From 9b28718635b474127cec2f30ad3638fc4b2840e0 Mon Sep 17 00:00:00 2001 From: Elias Rosendahl Date: Mon, 21 Jul 2025 14:36:31 +0200 Subject: [PATCH] initial commit --- .devcontainer/devcontainer.json | 14 + docker/Dockerfile | 46 + ros2_ws/src/ft_can_transceiver_lib/.DS_Store | Bin 0 -> 6148 bytes ros2_ws/src/ft_can_transceiver_lib/.gitignore | 1 + .../src/ft_can_transceiver_lib/CMakeLists.txt | 77 + .../ft_can_transceiver_lib/Config.cmake.in | 4 + ros2_ws/src/ft_can_transceiver_lib/README.md | 127 + .../dbc/.place_your_dbc_here | 1 + .../dbc/can/CAN5-Main.ini | 165 + .../dbc/can/CANdbcFT22/CAN1-AMS.dbc | 78 + .../dbc/can/CANdbcFT22/CAN1-AMS.ini | 165 + .../dbc/can/CANdbcFT22/CAN4-PDU.dbc | 78 + .../dbc/can/CANdbcFT22/CAN4-PDU.ini | 165 + .../dbc/can/CANdbcFT22/CAN5-Main.dbc | 309 + .../dbc/can/CANdbcFT23/CAN1-MainFT23.dbc | 1731 ++ .../dbc/can/CANdbcFT23/CAN1-MainFT23.ini | 165 + .../dbc/can/CANdbcFT23/CAN2_FS_DVLogger.dbc | 93 + .../dbc/can/CANdbcFT23/CAN2_FS_DVLogger.ini | 165 + .../dbc/can/CANdbcFT23/CAN4-FSGDatalogger.dbc | 76 + .../dbc/can/CANdbcFT23/CAN4-FSGDatalogger.ini | 165 + .../can/CANdbcFT23/CAN4_FS_DVLogger_RES.dbc | 104 + .../can/CANdbcFT23/CAN4_FS_DVLogger_RES.ini | 165 + .../dbc/can/CANdbcFT24/CAN1MainFT24.dbc | 2218 ++ .../dbc/can/CANdbcFT24/CAN1_Charger.dbc | 1434 + .../dbc/can/CANdbcFT24/CAN2_FS_DVLogger.dbc | 99 + .../can/CANdbcFT24/CAN4_FS_DVLogger_RES.dbc | 96 + .../dbc/can/CANdbcFT25/CAN1MainFT25.dbc | 856 + .../dbc/can/CANdbcFT25/CAN1_Charger.dbc | 1434 + .../dbc/can/CANdbcFT25/CAN2_FS_DVLogger.dbc | 99 + .../can/CANdbcFT25/CAN4_FS_DVLogger_RES.dbc | 96 + .../dbc/can/CANdbcFT25/FT25CANOpen.dbc | 170 + .../dbc/can/CANdbcFT25/XCP.dbc | 52 + .../ft_can_transceiver_lib/dbc/candocs.txt | 10473 +++++++ .../ft_can_transceiver_lib/include/.DS_Store | Bin 0 -> 6148 bytes .../include/ft_can_transceiver_lib/can1.h | 24612 ++++++++++++++++ .../include/ft_can_transceiver_lib/endec.hpp | 5489 ++++ .../ft_can_transceiver_lib/transceiver.h | 275 + .../install/.colcon_install_layout | 1 + .../install/COLCON_IGNORE | 0 .../install/_local_setup_util_ps1.py | 407 + .../install/_local_setup_util_sh.py | 407 + .../include/ft_can_transceiver_lib/can1.h | 24612 ++++++++++++++++ .../include/ft_can_transceiver_lib/endec.hpp | 5489 ++++ .../ft_can_transceiver_lib/transceiver.h | 275 + .../ft_can_transceiver_libConfig.cmake | 28 + ..._can_transceiver_libTargets-noconfig.cmake | 19 + .../ft_can_transceiver_libTargets.cmake | 102 + .../lib/libft_can_transceiver_lib.so | Bin 0 -> 1317464 bytes .../packages/ft_can_transceiver_lib | 1 + .../hook/cmake_prefix_path.dsv | 1 + .../hook/cmake_prefix_path.ps1 | 3 + .../hook/cmake_prefix_path.sh | 3 + .../hook/ld_library_path_lib.dsv | 1 + .../hook/ld_library_path_lib.ps1 | 3 + .../hook/ld_library_path_lib.sh | 3 + .../share/ft_can_transceiver_lib/package.bash | 39 + .../share/ft_can_transceiver_lib/package.dsv | 11 + .../share/ft_can_transceiver_lib/package.ps1 | 117 + .../share/ft_can_transceiver_lib/package.sh | 88 + .../share/ft_can_transceiver_lib/package.zsh | 50 + .../install/local_setup.bash | 121 + .../install/local_setup.ps1 | 55 + .../install/local_setup.sh | 137 + .../install/local_setup.zsh | 134 + .../ft_can_transceiver_lib/install/setup.bash | 31 + .../ft_can_transceiver_lib/install/setup.ps1 | 29 + .../ft_can_transceiver_lib/install/setup.sh | 45 + .../ft_can_transceiver_lib/install/setup.zsh | 31 + .../ft_can_transceiver_lib/log/COLCON_IGNORE | 0 .../log/build_2025-07-10_17-27-28/events.log | 340 + .../ft_can_transceiver_lib/command.log | 6 + .../ft_can_transceiver_lib/stderr.log | 19 + .../ft_can_transceiver_lib/stdout.log | 29 + .../ft_can_transceiver_lib/stdout_stderr.log | 48 + .../ft_can_transceiver_lib/streams.log | 54 + .../build_2025-07-10_17-27-28/logger_all.log | 111 + ros2_ws/src/ft_can_transceiver_lib/log/latest | 1 + .../ft_can_transceiver_lib/log/latest_build | 1 + .../src/ft_can_transceiver_lib/package.xml | 19 + ros2_ws/src/ft_can_transceiver_lib/src/.empty | 0 .../src/ft_can_transceiver_lib/src/can1.cpp | 15306 ++++++++++ .../src/transceiver.cpp | 3812 +++ ros2_ws/src/ft_can_viewer/CMakeLists.txt | 38 + ros2_ws/src/ft_can_viewer/package.xml | 18 + .../src/ft_can_viewer/src/can_viewer_node.cpp | 54 + 85 files changed, 103396 insertions(+) create mode 100644 .devcontainer/devcontainer.json create mode 100644 docker/Dockerfile create mode 100644 ros2_ws/src/ft_can_transceiver_lib/.DS_Store create mode 100644 ros2_ws/src/ft_can_transceiver_lib/.gitignore create mode 100644 ros2_ws/src/ft_can_transceiver_lib/CMakeLists.txt create mode 100644 ros2_ws/src/ft_can_transceiver_lib/Config.cmake.in create mode 100644 ros2_ws/src/ft_can_transceiver_lib/README.md create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/.place_your_dbc_here create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CAN5-Main.ini create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT22/CAN1-AMS.dbc create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT22/CAN1-AMS.ini create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT22/CAN4-PDU.dbc create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT22/CAN4-PDU.ini create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT22/CAN5-Main.dbc create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN1-MainFT23.dbc create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN1-MainFT23.ini create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN2_FS_DVLogger.dbc create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN2_FS_DVLogger.ini create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN4-FSGDatalogger.dbc create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN4-FSGDatalogger.ini create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN4_FS_DVLogger_RES.dbc create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN4_FS_DVLogger_RES.ini create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT24/CAN1MainFT24.dbc create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT24/CAN1_Charger.dbc create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT24/CAN2_FS_DVLogger.dbc create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT24/CAN4_FS_DVLogger_RES.dbc create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/CAN1MainFT25.dbc create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/CAN1_Charger.dbc create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/CAN2_FS_DVLogger.dbc create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/CAN4_FS_DVLogger_RES.dbc create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/FT25CANOpen.dbc create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/XCP.dbc create mode 100644 ros2_ws/src/ft_can_transceiver_lib/dbc/candocs.txt create mode 100644 ros2_ws/src/ft_can_transceiver_lib/include/.DS_Store create mode 100644 ros2_ws/src/ft_can_transceiver_lib/include/ft_can_transceiver_lib/can1.h create mode 100644 ros2_ws/src/ft_can_transceiver_lib/include/ft_can_transceiver_lib/endec.hpp create mode 100644 ros2_ws/src/ft_can_transceiver_lib/include/ft_can_transceiver_lib/transceiver.h create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/.colcon_install_layout create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/COLCON_IGNORE create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/_local_setup_util_ps1.py create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/_local_setup_util_sh.py create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/can1.h create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/endec.hpp create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/transceiver.h create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libConfig.cmake create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libTargets-noconfig.cmake create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libTargets.cmake create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/libft_can_transceiver_lib.so create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/colcon-core/packages/ft_can_transceiver_lib create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/cmake_prefix_path.dsv create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/cmake_prefix_path.ps1 create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/cmake_prefix_path.sh create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/ld_library_path_lib.dsv create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/ld_library_path_lib.ps1 create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/ld_library_path_lib.sh create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.bash create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.dsv create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.ps1 create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.sh create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.zsh create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/local_setup.bash create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/local_setup.ps1 create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/local_setup.sh create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/local_setup.zsh create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/setup.bash create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/setup.ps1 create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/setup.sh create mode 100644 ros2_ws/src/ft_can_transceiver_lib/install/setup.zsh create mode 100644 ros2_ws/src/ft_can_transceiver_lib/log/COLCON_IGNORE create mode 100644 ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/events.log create mode 100644 ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/ft_can_transceiver_lib/command.log create mode 100644 ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/ft_can_transceiver_lib/stderr.log create mode 100644 ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/ft_can_transceiver_lib/stdout.log create mode 100644 ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/ft_can_transceiver_lib/stdout_stderr.log create mode 100644 ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/ft_can_transceiver_lib/streams.log create mode 100644 ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/logger_all.log create mode 120000 ros2_ws/src/ft_can_transceiver_lib/log/latest create mode 120000 ros2_ws/src/ft_can_transceiver_lib/log/latest_build create mode 100644 ros2_ws/src/ft_can_transceiver_lib/package.xml create mode 100644 ros2_ws/src/ft_can_transceiver_lib/src/.empty create mode 100644 ros2_ws/src/ft_can_transceiver_lib/src/can1.cpp create mode 100644 ros2_ws/src/ft_can_transceiver_lib/src/transceiver.cpp create mode 100644 ros2_ws/src/ft_can_viewer/CMakeLists.txt create mode 100644 ros2_ws/src/ft_can_viewer/package.xml create mode 100644 ros2_ws/src/ft_can_viewer/src/can_viewer_node.cpp diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..54b0fab --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,14 @@ +{ + "name": "ft_analytics", + "image": "ft_analytics:latest", + "workspaceFolder": "/workspaces/can_viewer", + "runArgs": [ + "--net=host", + "--privileged" + ], + "settings": {}, + "extensions": [ + "ms-iot.vscode-ros", + "ms-python.python" + ] +} diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..6ff834b --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,46 @@ +FROM ubuntu:24.04 + +ENV PIP_BREAK_SYSTEM_PACKAGES=1 \ + SHELL=/bin/bash + +ARG USERNAME=can_viewer +ARG USER_UID=1000 +ARG USER_GID=${USER_UID} + +RUN if id -u "${USER_UID}" >/dev/null 2>&1; then \ + userdel "$(id -un "${USER_UID}")"; \ + fi \ + && groupadd --gid "${USER_GID}" "${USERNAME}" \ + && useradd --uid "${USER_UID}" --gid "${USER_GID}" -m "${USERNAME}" \ + && apt-get update \ + && apt-get install -y --no-install-recommends sudo \ + && echo "${USERNAME} ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/${USERNAME} \ + && chmod 0440 /etc/sudoers.d/${USERNAME} + +RUN apt-get update \ + && apt-get upgrade -y \ + && apt-get install -y --no-install-recommends \ + python3-pip \ + nano \ + python3-rosdep \ + && rm -rf /var/lib/apt/lists/* + +RUN pip3 install --no-cache-dir python-can cantools + +RUN echo "source /opt/ros/jazzy/setup.bash" \ + >> /home/${USERNAME}/.bashrc \ + && echo "source /workspaces/can_viewer/install/setup.bash" \ + >> /home/${USERNAME}/.bashrc + +RUN usermod --shell /bin/bash -aG video ${USERNAME} + +WORKDIR /workspaces/can_viewer +COPY --chown=${USERNAME}:${USERNAME} ros2_ws/src ros2_ws/src + +RUN rosdep update \ + && rosdep install -r --rosdistro jazzy \ + --from-paths ros2_ws/src --ignore-src -y + +USER ${USERNAME} + +CMD ["/bin/bash"] diff --git a/ros2_ws/src/ft_can_transceiver_lib/.DS_Store b/ros2_ws/src/ft_can_transceiver_lib/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..98a169a3b23a91ef43ced8f4965b72d5f4d544ae GIT binary patch literal 6148 zcmeHK&yUhT6n+D&6j7IhCVDVw;*}uFCYx-$R2B{<)20O8~!zy4E`1=&#Z+DLZT2M?0<-cFv5+1@^-<7GKeuGZv3HfwJ z5j_TDP8qy~@|?2Vx6j;91@1n$l2UpD-WZ$_P0UO!^rYKtaks!OQ;1(VDnz|6L{)hv z%$(qTLW&B}-+mt*Eay|RcYO|~Nj%Tm?XRL#uIyc@I#s9cyc)cf%R%O6i+R_dz2MeU zDU;x$?g!7}XgO@$JdtVU$7wWEggA^4^746{hH}}Ji!_`o?m!PXHK#Ug+*z$Uheu7f zb9}gNx~qeBr_*$gj@#>X&AD~&{)5xuSu#l_zc5T-yH$4G;01g@r69t)!7NQ=I>rdI z^e8W!51Eo}iAo%mU+^+wB#jGEUkXumnqsyQ(!$5mMp)c)EN)?Ll}sOV$yB3L>Z7-Z zls*-1Z6p**9EWSi|I0jEkn3QcR5QNSdTQ@>2Gjj;+?1^z1qczMR}=fj^lu0hY>Mk7XGLQ{d7D$Er_Xgc~`6XzM+Xw-BP=JFxTlZCmV2=#Q# z@2YSTo<>_*1*`(w3Y2xT!RLSf*Z2Qzl5JT9tOEa(0;19z^tyN@bGGih9G|r={5717 p<2D)<1%)||RfUh@+i+zVbGZWa3~n@{2WI~WC>d;F75JkH`~V0r&Nu)7 literal 0 HcmV?d00001 diff --git a/ros2_ws/src/ft_can_transceiver_lib/.gitignore b/ros2_ws/src/ft_can_transceiver_lib/.gitignore new file mode 100644 index 0000000..d163863 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/.gitignore @@ -0,0 +1 @@ +build/ \ No newline at end of file diff --git a/ros2_ws/src/ft_can_transceiver_lib/CMakeLists.txt b/ros2_ws/src/ft_can_transceiver_lib/CMakeLists.txt new file mode 100644 index 0000000..0539460 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/CMakeLists.txt @@ -0,0 +1,77 @@ +cmake_minimum_required(VERSION 3.8) +project(ft_can_transceiver_lib) + +# include for standard directories +include(GNUInstallDirs) + +# include for creating config.cmake +include(CMakePackageConfigHelpers) + +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) +endif() + +set(AUTOGENERATED_FILE_NAME can1) +set(AUTOGENERATED_FILE_NAME_TRANSCEIVER transceiver) +set(CAN_DBC_FILE_NAME can/CANdbcFT25/CAN1MainFT25.dbc) + +execute_process( + COMMAND python3 "-m" "cantools" "generate_c_source" "--prune" "${CMAKE_CURRENT_SOURCE_DIR}/dbc/${CAN_DBC_FILE_NAME}" "--database-name" "${AUTOGENERATED_FILE_NAME}" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/src" + ) + +execute_process( + COMMAND mkdir -p ${CMAKE_CURRENT_SOURCE_DIR}/include/${PROJECT_NAME} + COMMAND mv ${CMAKE_CURRENT_SOURCE_DIR}/src/${AUTOGENERATED_FILE_NAME}.h ${CMAKE_CURRENT_SOURCE_DIR}/include/${PROJECT_NAME}/${AUTOGENERATED_FILE_NAME}.h + COMMAND mv ${CMAKE_CURRENT_SOURCE_DIR}/src/${AUTOGENERATED_FILE_NAME}.c ${CMAKE_CURRENT_SOURCE_DIR}/src/${AUTOGENERATED_FILE_NAME}.cpp + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/src" +) + +execute_process( + COMMAND python3 "-m" "cantools" + "generate_c_source_transceiver" "${CMAKE_CURRENT_SOURCE_DIR}/dbc/${CAN_DBC_FILE_NAME}" + "--prune" + "--database-name" "${AUTOGENERATED_FILE_NAME}" + "--output-headers" "include/${PROJECT_NAME}" + "--output-sources" "src" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + ) + +include_directories(include/${PROJECT_NAME}) +include_directories(include) + +add_library(${PROJECT_NAME} SHARED src/${AUTOGENERATED_FILE_NAME}.cpp src/${AUTOGENERATED_FILE_NAME_TRANSCEIVER}.cpp) + +# Link the desire include directories of the library - different for build and install +target_include_directories(${PROJECT_NAME} + PUBLIC + "$" + "$" + ) + +install(TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}Targets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +install(DIRECTORY include/${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + +install(EXPORT ${PROJECT_NAME}Targets + FILE ${PROJECT_NAME}Targets.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} +) + +configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} +) \ No newline at end of file diff --git a/ros2_ws/src/ft_can_transceiver_lib/Config.cmake.in b/ros2_ws/src/ft_can_transceiver_lib/Config.cmake.in new file mode 100644 index 0000000..87de509 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/Config.cmake.in @@ -0,0 +1,4 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/ft_can_transceiver_libTargets.cmake") + diff --git a/ros2_ws/src/ft_can_transceiver_lib/README.md b/ros2_ws/src/ft_can_transceiver_lib/README.md new file mode 100644 index 0000000..cd9c7b7 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/README.md @@ -0,0 +1,127 @@ +# can-transceiver-lib +Generates a cpp library from a DBC file using the cantools DBC parser and extended generator. + +# Install + +## cantools extended generator + +1. Get the extended generator + + git clone --branch extend_codegen https://github.com/rimakoe/cantools.git + +1. Install it in your python using + + pip install -e ./path/to/cantools + +1. Verify the installation with + + pip freeze + + You should see something like + + -e + +## transceiver library + +1. Create a build folder inside the repo and go into it + + mkdir build && cd build + +1. Use cmake to build and install the library + + cmake .. && sudo make install + +Now you are able to link the library in every c++ project. + + + + \ No newline at end of file diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/.place_your_dbc_here b/ros2_ws/src/ft_can_transceiver_lib/dbc/.place_your_dbc_here new file mode 100644 index 0000000..83161e6 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/.place_your_dbc_here @@ -0,0 +1 @@ +placeholder to keep filestructure \ No newline at end of file diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CAN5-Main.ini b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CAN5-Main.ini new file mode 100644 index 0000000..1ca0192 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CAN5-Main.ini @@ -0,0 +1,165 @@ +[View_Vehicles] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_Vehicle] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,250, +[View_VehicleNetworks] +HIDDEN=3, +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,100,150, +[View_VehicleNetwork] +HIDDEN= +ORDER=0,1,2,3,4, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,250,150, +[View_VehicleNetworkTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,100,150, +[View_VehicleNetworkSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,100,50,100,100,100,50,50,50,50,100,100,150, +[View_VehicleControlUnit] +HIDDEN= +ORDER=0,1,2,3,4, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,250,150, +[View_VehicleGateways] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,250,100, +[View_VehicleGatewaySignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6, +DEFINITIONS= +COLUMNWIDTHS=250,250,250,250,250,250,250, +[View_Networks] +HIDDEN=2, +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,150, +[View_Network] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,150, +[View_NetworkTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,100,150, +[View_NetworkTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,100,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NetworkNodeGroup] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,150, +[View_Ecus] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_Ecu] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,150, +[View_EnvVars] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,50,50,50,50,100,100,150, +[View_EnvVar] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,100,50,50,50,50,100,100,150, +[View_NodeGroups] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_NodeGroup] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,150, +[View_Nodes] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,150, +[View_Node] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,150, +[View_NodeTxMsg] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeRxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,250,50,100,100,100,50,50,50,50,100,100,150, +[View_NodeRxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,250,50,100,100,100,50,50,50,50,100,100,150, +[View_Messages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7, +DEFINITIONS= +COLUMNWIDTHS=250,55,100,50,100,100,100,150, +[View_Message] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS= +COLUMNWIDTHS=250,156,100,50,50,100,100,100,71,50,50,50,100,100,150, +[View_Signals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,50,100,100,100,50,50,50,50,100,100,150,100, +[View_ValueTables] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_AttrDefs] +HIDDEN=6, +ORDER=0,1,2,3,4,5, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,50,50,100,150, diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT22/CAN1-AMS.dbc b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT22/CAN1-AMS.dbc new file mode 100644 index 0000000..b7644f7 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT22/CAN1-AMS.dbc @@ -0,0 +1,78 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: Shunt AMS ABX + + +BO_ 1280 AMS_Log: 3 AMS + SG_ AMS_Log_voltage7 m1 : 8|8@1+ (0.0196078,0) [0|5] "V" ABX + SG_ AMS_Log_voltage0 m0 : 8|8@1+ (0.0196078,0) [0|5] "V" ABX + SG_ AMS_Log_slave_ID : 4|4@1+ (1,0) [0|15] "" ABX + SG_ AMS_Log_frame M : 0|4@1+ (1,0) [0|15] "" ABX + +BO_ 10 AMS_Status: 6 AMS + SG_ AMS_State : 0|7@1+ (1,0) [0|1] "" ABX + SG_ SDC_Closed : 7|1@1+ (1,0) [0|1] "" ABX + SG_ SOC : 8|8@1+ (0.392157,0) [0|100] "%" ABX + SG_ Min_cell_volt : 23|16@0+ (7.62951E-005,0) [0|5] "V" ABX + SG_ Max_cell_temp : 39|16@0+ (0.0625,0) [0|4095.9375] "°C" ABX + +BO_ 66 AMS_Panic: 8 AMS + SG_ AMS_Error_arg : 8|56@1+ (1,0) [0|7.20576E+016] "" ABX + SG_ AMS_Error : 0|8@1+ (1,0) [0|255] "" ABX + +BO_ 11 AMS_In: 1 ABX + SG_ TS_activate : 0|1@1+ (1,0) [0|1] "" AMS + SG_ Lap_Number : 2|6@1+ (1,0) [0|64] "Laps" AMS + +BO_ 1313 Shunt_Current: 6 Shunt + SG_ Shunt_Current : 23|32@0- (0.001,0) [-2000000|2000000] "A" AMS + +BO_ 1314 Shunt_Voltage1: 6 Shunt + SG_ Shunt_Voltage1 : 23|32@0- (0.001,0) [-2000000|2000000] "V" AMS + +BO_ 1315 Shunt_Voltage2: 6 Shunt + SG_ Shunt_Voltage2 : 23|32@0- (0.001,0) [-2000000|2000000] "V" AMS + +BO_ 1316 Shunt_Voltage3: 6 Shunt + SG_ Shunt_Voltage3 : 23|32@0- (0.001,0) [-2000000|2000000] "V" AMS + +BO_ 1317 Shunt_Temperature: 6 Shunt + SG_ Shunt_Temperature : 23|32@0+ (0.1,0) [0|1000] "°C" ABX + + + +VAL_ 10 AMS_State 0 "TS_INACTIVE" 1 "TS_ACTIVE" 2 "TS_PRECHARGE" 3 "TS_DISCHARGE" 4 "TS_ERROR" 0 "No Description" ; + diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT22/CAN1-AMS.ini b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT22/CAN1-AMS.ini new file mode 100644 index 0000000..4fd7f7e --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT22/CAN1-AMS.ini @@ -0,0 +1,165 @@ +[View_Vehicles] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_Vehicle] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,250, +[View_VehicleNetworks] +HIDDEN=3, +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,100,150, +[View_VehicleNetwork] +HIDDEN= +ORDER=0,1,2,3,4, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,250,150, +[View_VehicleNetworkTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,100,150, +[View_VehicleNetworkSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,100,50,100,100,100,50,50,50,50,100,100,150, +[View_VehicleControlUnit] +HIDDEN= +ORDER=0,1,2,3,4, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,250,150, +[View_VehicleGateways] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,250,100, +[View_VehicleGatewaySignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6, +DEFINITIONS= +COLUMNWIDTHS=250,250,250,250,250,250,250, +[View_Networks] +HIDDEN=2, +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,150, +[View_Network] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,150, +[View_NetworkTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,100,150, +[View_NetworkTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,100,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NetworkNodeGroup] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,150, +[View_Ecus] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_Ecu] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,150, +[View_EnvVars] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,50,50,50,50,100,100,150, +[View_EnvVar] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,100,50,50,50,50,100,100,150, +[View_NodeGroups] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_NodeGroup] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,150, +[View_Nodes] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,150, +[View_Node] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,150, +[View_NodeTxMsg] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeRxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,250,50,100,100,100,50,50,50,50,100,100,150, +[View_NodeRxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,250,50,100,100,100,50,50,50,50,100,100,150, +[View_Messages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7, +DEFINITIONS= +COLUMNWIDTHS=250,55,100,50,100,100,100,150, +[View_Message] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,131,50,50,50,100,100,150, +[View_Signals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,50,100,100,100,50,50,50,50,100,100,150,100, +[View_ValueTables] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_AttrDefs] +HIDDEN=6, +ORDER=0,1,2,3,4,5, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,50,50,100,150, diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT22/CAN4-PDU.dbc b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT22/CAN4-PDU.dbc new file mode 100644 index 0000000..916f1fc --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT22/CAN4-PDU.dbc @@ -0,0 +1,78 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: +BU_: ABX PDU SDCL SSU +BO_ 17 SDCL_tx: 1 SDCL + SG_ sdcl_sdc_in : 0|1@1+ (1,0) [0|1] "" ABX + SG_ sdcl_sdc_ready : 1|1@1+ (1,0) [0|1] "" ABX + SG_ ts_start_muxed : 2|1@1+ (1,0) [0|1] "" ABX + +BO_ 16 SDCL_rx: 1 ABX + SG_ as_driving_mode : 0|1@1+ (1,0) [0|1] "" SDCL + SG_ as_close_sdc : 1|1@1+ (1,0) [0|1] "" SDCL + SG_ sdcl_heartbeat : 2|1@1+ (1,0) [0|1] "" SDCL + +BO_ 7 PDU_Setpoints: 6 ABX + SG_ EPSC : 23|1@1+ (1,0) [0|1] "" PDU + SG_ Fans : 8|1@1+ (1,0) [0|1] "" PDU + SG_ BBMC : 9|1@1+ (1,0) [0|1] "" PDU + SG_ Pumps : 10|1@1+ (1,0) [0|1] "" PDU + SG_ STW : 11|1@1+ (1,0) [0|1] "" PDU + SG_ Sensorbox : 12|1@1+ (1,0) [0|1] "" PDU + SG_ Soundbox : 14|1@1+ (1,0) [0|1] "" PDU + SG_ Misc : 15|1@1+ (1,0) [0|1] "" PDU + SG_ PDM : 22|1@1+ (1,0) [0|1] "" PDU + SG_ Autobox : 21|1@1+ (1,0) [0|1] "" PDU + SG_ Inverters : 20|1@1+ (1,0) [0|1] "" PDU + SG_ PWR_Servo_1 : 19|1@1+ (1,0) [0|1] "" PDU + SG_ HV_Box : 16|1@1+ (1,0) [0|1] "" PDU + SG_ Circuit_Switch_Valve : 31|1@1+ (1,0) [0|1] "" PDU + SG_ SB_Release_Valve : 30|1@1+ (1,0) [0|1] "" PDU + SG_ EBS_B_Valve : 29|1@1+ (1,0) [0|1] "" PDU + SG_ PWR_Servo : 17|1@1+ (1,0) [0|1] "" PDU + SG_ EBS_A_Valve : 28|1@1+ (1,0) [0|1] "" PDU + SG_ SDC : 27|1@1+ (1,0) [0|1] "" PDU + SG_ HydPowerPack : 26|1@1+ (1,0) [0|1] "" PDU + SG_ AMS : 25|1@1+ (1,0) [0|1] "" PDU + SG_ PWR_19V : 13|1@1+ (1,0) [0|1] "" PDU + SG_ HydPowerPack_DutyCycle : 32|8@1+ (1,0) [0|100] "%" PDU + SG_ Fan_DutyCycle : 40|8@1+ (1,0) [0|100] "%" PDU + SG_ Z_Stabi : 18|1@1+ (1,0) [0|1] "" PDU + +BO_ 8 PDU_Call: 1 ABX + SG_ PDU_Call : 0|8@1+ (1,0) [0|255] "" PDU + +BO_ 9 PDU_Response: 1 PDU + SG_ PDU_Response : 0|8@1+ (1,0) [0|255] "" ABX + diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT22/CAN4-PDU.ini b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT22/CAN4-PDU.ini new file mode 100644 index 0000000..0d7411e --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT22/CAN4-PDU.ini @@ -0,0 +1,165 @@ +[View_Vehicles] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_Vehicle] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,250, +[View_VehicleNetworks] +HIDDEN=3, +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,100,150, +[View_VehicleNetwork] +HIDDEN= +ORDER=0,1,2,3,4, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,250,150, +[View_VehicleNetworkTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,100,150, +[View_VehicleNetworkSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,100,50,100,100,100,50,50,50,50,100,100,150, +[View_VehicleControlUnit] +HIDDEN= +ORDER=0,1,2,3,4, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,250,150, +[View_VehicleGateways] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,250,100, +[View_VehicleGatewaySignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6, +DEFINITIONS= +COLUMNWIDTHS=250,250,250,250,250,250,250, +[View_Networks] +HIDDEN=2, +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,150, +[View_Network] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,150, +[View_NetworkTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,100,150, +[View_NetworkTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,100,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NetworkNodeGroup] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,150, +[View_Ecus] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_Ecu] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,150, +[View_EnvVars] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,50,50,50,50,100,100,150, +[View_EnvVar] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,100,50,50,50,50,100,100,150, +[View_NodeGroups] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_NodeGroup] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,150, +[View_Nodes] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,150, +[View_Node] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,150, +[View_NodeTxMsg] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeRxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,250,50,100,100,100,50,50,50,50,100,100,150, +[View_NodeRxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,250,50,100,100,100,50,50,50,50,100,100,150, +[View_Messages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7, +DEFINITIONS= +COLUMNWIDTHS=250,55,100,50,100,100,100,150, +[View_Message] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150, +[View_Signals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,50,100,100,100,50,50,50,50,100,100,150,100, +[View_ValueTables] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_AttrDefs] +HIDDEN=6, +ORDER=0,1,2,3,4,5, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,50,50,100,150, diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT22/CAN5-Main.dbc b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT22/CAN5-Main.dbc new file mode 100644 index 0000000..93f763f --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT22/CAN5-Main.dbc @@ -0,0 +1,309 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: +BU_: ABX STW FSG_Logger RES EPSC XSens PDMV +BO_ 1 Error: 1 XSens + +BO_ 2 Warning: 1 XSens + SG_ WarningCode : 7|8@0+ (1,0) [0|0] "" ABX + +BO_ 5 SampleTime: 4 XSens + SG_ Timestamp : 7|32@0+ (1,0) [0|0] "us" ABX + +BO_ 6 GroupCounter: 2 XSens + SG_ Counter : 7|16@0+ (1,0) [0|0] "" ABX + +BO_ 17 StatusWord: 4 XSens + SG_ SelfTestOk : 24|1@1+ (1,0) [0|1] "" ABX + SG_ OrientationValid : 25|1@1+ (1,0) [0|1] "" ABX + SG_ GpsValid : 26|1@1+ (1,0) [0|1] "" ABX + SG_ NoRotation : 28|2@0+ (1,0) [0|3] "" ABX + SG_ RepresentativeMotion : 29|1@1+ (1,0) [0|1] "" ABX + SG_ ExternalClockSynced : 30|1@1+ (1,0) [0|1] "" ABX + SG_ ClipAccX : 16|1@1+ (1,0) [0|1] "" ABX + SG_ ClipAccY : 17|1@1+ (1,0) [0|1] "" ABX + SG_ ClipAccZ : 18|1@1+ (1,0) [0|1] "" ABX + SG_ ClipGyrX : 19|1@1+ (1,0) [0|1] "" ABX + SG_ ClipGyrY : 20|1@1+ (1,0) [0|1] "" ABX + SG_ ClipGyrZ : 21|1@1+ (1,0) [0|1] "" ABX + SG_ ClipMagX : 22|1@1+ (1,0) [0|1] "" ABX + SG_ ClipMagY : 23|1@1+ (1,0) [0|1] "" ABX + SG_ ClipMagZ : 8|1@1+ (1,0) [0|1] "" ABX + SG_ Retransmitted : 10|1@1+ (1,0) [0|1] "" ABX + SG_ ClippingDetected : 11|1@1+ (1,0) [0|1] "" ABX + SG_ Interpolated : 12|1@1+ (1,0) [0|1] "" ABX + SG_ SyncIn : 13|1@1+ (1,0) [0|1] "" ABX + SG_ SyncOut : 14|1@1+ (1,0) [0|1] "" ABX + SG_ FilterMode : 1|3@0+ (1,0) [0|1] "" ABX + SG_ HaveGnssTimePulse : 2|1@1+ (1,0) [0|1] "" ABX + SG_ RtkStatus : 4|2@0+ (1,0) [0|1] "" ABX + +BO_ 33 Quaternion: 8 XSens + SG_ Q1 : 7|16@0- (3.05176e-05,0) [-1|1] "" ABX + SG_ Q2 : 23|16@0- (3.05176e-05,0) [-1|1] "" ABX + SG_ Q3 : 39|16@0- (3.05176e-05,0) [-1|1] "" ABX + SG_ Q4 : 55|16@0- (3.05176e-05,0) [-1|1] "" ABX + +BO_ 49 DeltaV: 7 XSens + SG_ X : 7|16@0- (7.62939e-06,0) [-0.25|0.25] "m/s" ABX + SG_ Y : 23|16@0- (7.62939e-06,0) [-0.25|0.25] "m/s" ABX + SG_ Z : 39|16@0- (7.62939e-06,0) [-0.25|0.25] "m/s" ABX + SG_ Exponent : 55|8@0+ (1,0) [0|0] "" ABX + +BO_ 50 RateOfTurn: 6 XSens + SG_ gyrX : 7|16@0- (0.00195313,0) [-35|35] "rad/s" ABX + SG_ gyrY : 23|16@0- (0.00195313,0) [-35|35] "rad/s" ABX + SG_ gyrZ : 39|16@0- (0.00195313,0) [-35|35] "rad/s" ABX + +BO_ 51 DeltaQ: 8 XSens + SG_ DeltaQ1 : 7|16@0- (3.05185e-05,0) [-1|1] "m/s²" ABX + SG_ DeltaQ2 : 23|16@0- (3.05185e-05,0) [-1|1] "m/s²" ABX + SG_ DeltaQ3 : 39|16@0- (3.05185e-05,0) [-1|1] "m/s²" ABX + SG_ DeltaQ4 : 55|16@0- (3.05185e-05,0) [-1|1] "m/s²" ABX + +BO_ 52 Acceleration: 6 XSens + SG_ accX : 7|16@0- (0.00390625,0) [-100|100] "m/s²" ABX + SG_ accY : 23|16@0- (0.00390625,0) [-100|100] "m/s²" ABX + SG_ accZ : 39|16@0- (0.00390625,0) [-100|100] "m/s²" ABX + +BO_ 53 FreeAcceleration: 6 XSens + SG_ FreeAccX : 7|16@0- (0.00390625,0) [-100|100] "m/s²" ABX + SG_ FreeAccY : 23|16@0- (0.00390625,0) [-100|100] "m/s²" ABX + SG_ FreeAccZ : 39|16@0- (0.00390625,0) [-100|100] "m/s²" ABX + +BO_ 97 RateOfTurnHR: 6 XSens + SG_ HrGyrX : 7|16@0- (0.00195313,0) [-35|35] "rad/s" ABX + SG_ HrGyrY : 23|16@0- (0.00195313,0) [-35|35] "rad/s" ABX + SG_ HrGyrZ : 39|16@0- (0.00195313,0) [-35|35] "rad/s" ABX + +BO_ 98 AccelerationHR: 6 XSens + SG_ HrAccX : 7|16@0- (0.00390625,0) [-100|100] "m/s²" ABX + SG_ HrAccY : 23|16@0- (0.00390625,0) [-100|100] "m/s²" ABX + SG_ HrAccZ : 39|16@0- (0.00390625,0) [-100|100] "m/s²" ABX + +BO_ 65 MagneticField: 6 XSens + SG_ magX : 7|16@0- (0.000976563,0) [-32|32] "a.u." ABX + SG_ magY : 23|16@0- (0.000976563,0) [-32|32] "a.u" ABX + SG_ magZ : 39|16@0- (0.000976563,0) [-32|32] "a.u" ABX + +BO_ 81 Temperature: 2 XSens + SG_ Temperature : 7|16@0- (0.00390625,0) [-40|85] "degC" ABX + +BO_ 82 BarometricPressure: 4 XSens + SG_ Pressure : 7|32@0- (3.05176e-05,0) [30000|125000] "Pa" ABX + +BO_ 7 UTC: 8 XSens + SG_ year : 7|8@0+ (1,0) [0|0] "Y" ABX + SG_ month : 15|8@0+ (1,0) [1|12] "M" ABX + SG_ day : 23|8@0+ (1,0) [1|31] "D" ABX + SG_ hour : 31|8@0+ (1,0) [0|24] "h" ABX + SG_ minute : 39|8@0+ (1,0) [0|60] "m" ABX + SG_ second : 47|8@0+ (1,0) [0|60] "s" ABX + SG_ tenthms : 55|16@0+ (1,0) [0|0] "ms/10" ABX + +BO_ 34 EulerAngles: 6 XSens + SG_ roll : 7|16@0- (0.0078125,0) [-180|180] "deg" ABX + SG_ pitch : 23|16@0- (0.0078125,0) [-90|90] "deg" ABX + SG_ yaw : 39|16@0- (0.0078125,0) [-180|180] "deg" ABX + +BO_ 113 LongLat: 8 XSens + SG_ latitude : 7|32@0- (5.96046e-08,0) [-90|90] "deg" ABX + SG_ longitude : 39|32@0- (1.19209e-07,0) [-180|180] "deg" ABX + +BO_ 114 AltitudeEllipsoid: 4 XSens + SG_ altEllipsoid : 7|32@0+ (3.05176e-05,0) [0|50000] "m" ABX + +BO_ 115 PositionEcef_X: 4 XSens + SG_ PositionEcef_X : 7|32@0- (0.00390625,0) [-6.5e+06|6.5e+06] "m" ABX + +BO_ 116 PositionEcef_Y: 4 XSens + SG_ PositionEcef_Y : 7|32@0- (0.00390625,0) [-6.5e+06|6.5e+06] "m" ABX + +BO_ 117 PositionEcef_Z: 4 XSens + SG_ PositionEcef_Z : 7|32@0- (0.00390625,0) [-6.5e+06|6.5e+06] "m" ABX + +BO_ 118 Velocity: 6 XSens + SG_ velX : 7|16@0- (0.015625,0) [-500|500] "m/s" ABX + SG_ velY : 23|16@0- (0.015625,0) [-500|500] "m/s" ABX + SG_ velZ : 39|16@0- (0.015625,0) [-500|500] "m/s" ABX + +BO_ 1040 AS_Mission_fb: 1 ABX + SG_ Mission_selection : 0|3@1+ (1,0) [1|7] "" STW + +BO_ 1024 STW_mission_selected: 1 STW + SG_ Mission_selection : 0|3@1+ (1,0) [1|7] "" ABX + +BO_ 1280 DV_driving_dynamics_1: 8 ABX + SG_ Speed_actual : 0|8@1+ (1,0) [0|250] "km/h" FSG_Logger + SG_ Speed_target : 8|8@1+ (1,0) [0|250] "km/h" FSG_Logger + SG_ Steering_angle_actual : 16|8@1- (0.5,0) [-60|60] "°" FSG_Logger + SG_ Steering_angle_target : 24|8@1- (0.5,0) [-60|60] "°" FSG_Logger + SG_ Brake_hydr_actual : 32|8@1+ (1,0) [0|100] "%" FSG_Logger + SG_ Brake_hydr_target : 40|8@1+ (1,0) [0|100] "%" FSG_Logger + SG_ Motor_moment_actual : 48|8@1- (1,0) [-100|100] "%" FSG_Logger + SG_ Motor_moment_target : 56|8@1- (1,0) [-100|100] "%" FSG_Logger + +BO_ 1281 DV_driving_dynamics_2: 6 ABX + SG_ Acceleration_longitudinal : 0|16@1- (0.00195313,0) [-50|50] "m/s^2" FSG_Logger + SG_ Acceleration_lateral : 16|16@1- (0.00195313,0) [-50|50] "m/s^2" FSG_Logger + SG_ Yaw_rate : 32|16@1- (0.0078125,0) [-200|200] "°/s" FSG_Logger + +BO_ 1282 DV_system_status: 5 ABX + SG_ AS_state : 0|3@1+ (1,0) [1|5] "" FSG_Logger + SG_ EBS_state : 3|2@1+ (1,0) [1|3] "" FSG_Logger + SG_ AMI_state : 5|3@1+ (1,0) [1|6] "" FSG_Logger + SG_ Steering_state : 8|1@1+ (1,0) [0|1] "" FSG_Logger + SG_ Service_brake_state : 9|2@1+ (1,0) [1|3] "" FSG_Logger + SG_ Lap_counter : 11|4@1+ (1,0) [0|10] "" FSG_Logger + SG_ Cones_count_actual : 15|8@1+ (1,0) [0|250] "" FSG_Logger + SG_ Cones_count_all : 23|17@1+ (1,0) [0|131000] "" FSG_Logger + +BO_ 801 EPSC_out: 8 EPSC + SG_ EPSC_measured_steering_angle : 0|12@1- (0.1,0) [-120|120] "°" ABX + SG_ EPSC_measured_rpm : 12|12@1- (1,0) [-120|120] "rpm" ABX + SG_ EPSC_measured_current : 24|12@1+ (0.1,0) [0|20] "A" ABX + SG_ EPSC_measured_voltage : 36|12@1+ (0.1,0) [0|20] "V" ABX + SG_ EPSC_measured_temperature : 48|12@1+ (1,0) [0|200] "°C" ABX + SG_ EPSC_measured_flag1 : 60|1@1+ (1,0) [0|1] "" ABX + SG_ EPSC_measured_flag2 : 61|1@1+ (1,0) [0|1] "" ABX + SG_ EPSC_measured_flag3 : 62|1@1+ (1,0) [0|1] "" ABX + SG_ EPSC_measured_flag4 : 63|1@1+ (1,0) [0|1] "" ABX + +BO_ 291 EPSC_In: 8 ABX + SG_ EPSC_mode M : 0|8@1+ (1,0) [0|1] "" EPSC + SG_ EPSC_desired_steering_angle : 8|16@1- (0.0001,0) [-10000|10000] "" EPSC + SG_ EPSC_Kp_pos : 24|8@1+ (0.1,0) [0|25.6] "" EPSC + SG_ EPSC_Kp_rpm m0 : 32|8@1+ (0.1,0) [0|25.6] "" EPSC + SG_ EPSC_Ki_rpm m0 : 40|8@1+ (0.1,0) [0|25.6] "" EPSC + SG_ EPSC_Kp_curr m0 : 48|8@1+ (0.1,0) [0|25.6] "" EPSC + SG_ EPSC_Ki_curr m0 : 56|8@1+ (0.1,0) [0|25.6] "" EPSC + SG_ EPSC_Ki_pos m1 : 32|8@1+ (0.1,0) [0|25.6] "" EPSC + +BO_ 1041 STW_control: 1 ABX + SG_ STW_debugMode : 0|1@1+ (1,0) [0|1] "" STW + +BO_ 1025 STW_buttons: 1 STW + SG_ STW_button_left : 0|1@1+ (1,0) [0|1] "" ABX + SG_ STW_button_right : 1|1@1+ (1,0) [0|1] "" ABX + SG_ STW_button_R2D : 2|1@1+ (1,0) [0|1] "" ABX + SG_ STW_button_Enter : 3|1@1+ (1,0) [0|1] "" ABX + +BO_ 1042 STW_status: 6 ABX + SG_ InvL_ready : 8|1@1+ (1,0) [0|0] "" STW + SG_ iniChk_state : 24|8@1+ (1,0) [0|255] "" STW + SG_ InvR_ready : 9|1@1+ (1,0) [0|0] "" STW + SG_ AS_state : 0|3@1+ (1,0) [0|5] "" Vector__XXX + SG_ SDC_BFL : 10|1@1+ (1,0) [0|0] "" STW + SG_ SDC_BRL : 11|1@1+ (1,0) [0|0] "" STW + SG_ SDC_ACC : 12|1@1+ (1,0) [0|0] "" STW + SG_ SDC_HVB : 13|1@1+ (1,0) [0|0] "" STW + SG_ Lap_Count : 16|6@1+ (1,0) [0|64] "" STW + SG_ ERR_SDC : 32|1@1+ (1,0) [0|1] "" STW + SG_ ERR_AMS : 33|1@1+ (1,0) [0|1] "" STW + SG_ ERR_InvL : 43|1@1+ (1,0) [0|1] "" STW + SG_ ERR_InvR : 44|1@1+ (1,0) [0|1] "" STW + SG_ ERR_IniChk : 35|1@1+ (1,0) [0|1] "" STW + SG_ ERR_ConMon : 36|1@1+ (1,0) [0|1] "" STW + SG_ ERR_SCS : 37|1@1+ (1,0) [0|1] "" STW + SG_ ERR_sBSPD : 38|1@1+ (1,0) [0|1] "" STW + SG_ ERR_APPSp : 39|1@1+ (1,0) [0|1] "" STW + SG_ ERR_AS : 40|1@1+ (1,0) [0|1] "" STW + SG_ ERR_ROS : 41|1@1+ (1,0) [0|1] "" STW + SG_ ERR_RES : 42|1@1+ (1,0) [0|1] "" STW + SG_ ERR_PDU : 34|1@1+ (1,0) [0|1] "" STW + SG_ R2D_Progress : 4|4@1+ (1,0) [0|15] "" STW + +BO_ 1297 DV_SEBSS_Pressures: 8 ABX + SG_ EBS_Pressure_tank_A : 0|16@1+ (0.1,0) [0|50] "Bar" FSG_Logger + SG_ EBS_Pressure_tank_B : 16|16@1+ (0.1,0) [0|50] "Bar" FSG_Logger + SG_ Brake_Pressure_front : 32|16@1+ (0.1,0) [0|200] "Bar" FSG_Logger + SG_ Brake_Pressure_rear : 48|16@1+ (0.1,0) [0|200] "Bar" FSG_Logger + +CM_ BU_ XSens "Generic Xsens Motion Sensor"; +CM_ SG_ 17 SelfTestOk "Set when the self test result was ok"; +CM_ SG_ 17 OrientationValid "Set when the computed orientation is valid. The orientation may be invalid during startup or when the XSens data is clipping during violent (for the device) motion"; +CM_ SG_ 17 GpsValid "Set when the device has a GPS receiver and the receiver says that there is a GPS position fix."; +CM_ SG_ 17 RepresentativeMotion "Indicates if the In-Run Compass Calibration is doing the representative motion analysis"; +CM_ SG_ 17 ExternalClockSynced "Indicates whether the internal clock is synced with an external clock (Either GNNS or custom provided clock sync)"; +CM_ SG_ 17 ClipAccX "Indicates if there was clipping on the X-axis of the accelerometer"; +CM_ SG_ 17 ClipAccY "Indicates if there was clipping on the Y-axis of the accelerometer"; +CM_ SG_ 17 ClipAccZ "Indicates if there was clipping on the Z-axis of the accelerometer"; +CM_ SG_ 17 ClipGyrX "Indicates if there was clipping on the X-axis of the gyroscope"; +CM_ SG_ 17 ClipGyrY "Indicates if there was clipping on the Y-axis of the gyroscope"; +CM_ SG_ 17 ClipGyrZ "Indicates if there was clipping on the Z-axis of the gyroscope"; +CM_ SG_ 17 ClipMagX "Indicates if there was clipping on the X-axis of the magnetometer"; +CM_ SG_ 17 ClipMagY "Indicates if there was clipping on the Y-axis of the magnetometer"; +CM_ SG_ 17 ClipMagZ "Indicates if there was clipping on the Z-axis of the magnetometer"; +CM_ SG_ 17 Retransmitted "When set Indicates the sample was received as a retransmission"; +CM_ SG_ 17 ClippingDetected "When set Indicates clipping has occurred"; +CM_ SG_ 17 Interpolated "When set Indicates the sample is an interpolation between other samples"; +CM_ SG_ 17 SyncIn "When set indicates a sync-in event has been triggered"; +CM_ SG_ 17 SyncOut "When set Indicates a sync-out event has been generated"; +CM_ SG_ 17 FilterMode "Mask for the 3 bit filter mode field"; +CM_ SG_ 17 HaveGnssTimePulse "Indicates that the 1PPS GNSS time pulse is present"; +CM_ SG_ 17 RtkStatus "Mask for 2 bit RTK status field"; +CM_ BO_ 7 "UTC Time in the following format YYMMDDhhmmss plus tenth of a milli second"; +VAL_ 17 SelfTestOk 0 "false" 1 "true"; +VAL_ 17 OrientationValid 0 "false" 1 "true"; +VAL_ 17 GpsValid 0 "false" 1 "true"; +VAL_ 17 NoRotation 1 "Aborted" 2 "SamplesRejected" 3 "RunningNormally"; +VAL_ 17 RepresentativeMotion 0 "false" 1 "true"; +VAL_ 17 ExternalClockSynced 0 "false" 1 "true"; +VAL_ 17 ClipAccX 0 "false" 1 "true"; +VAL_ 17 ClipAccY 0 "false" 1 "true"; +VAL_ 17 ClipAccZ 0 "false" 1 "true"; +VAL_ 17 ClipGyrX 0 "false" 1 "true"; +VAL_ 17 ClipGyrY 0 "false" 1 "true"; +VAL_ 17 ClipGyrZ 0 "false" 1 "true"; +VAL_ 17 ClipMagX 0 "false" 1 "true"; +VAL_ 17 ClipMagY 0 "false" 1 "true"; +VAL_ 17 ClipMagZ 0 "false" 1 "true"; +VAL_ 17 Retransmitted 0 "false" 1 "true"; +VAL_ 17 ClippingDetected 0 "false" 1 "true"; +VAL_ 17 Interpolated 0 "false" 1 "true"; +VAL_ 17 SyncIn 0 "false" 1 "true"; +VAL_ 17 SyncOut 0 "false" 1 "true"; +VAL_ 17 FilterMode 0 "false" 1 "true"; +VAL_ 17 HaveGnssTimePulse 0 "false" 1 "true"; +VAL_ 17 RtkStatus 0 "No RTK" 1 "RTK floating" 2 "RTK fixed"; +VAL_ 1040 Mission_selection 7 "MissionSelection_manual" 1 "MissionSelection_acceleration" 2 "MissionSelection_skidpad" 3 "MissionSelection_trackdrive" 4 "MissionSelection_braketest" 5 "MissionSelection_inspection" 6 "MissionSelection_autocross"; +VAL_ 1024 Mission_selection 7 "MissionSelection_manual" 1 "MissionSelection_acceleration" 2 "MissionSelection_skidpad" 3 "MissionSelection_trackdrive" 4 "MissionSelection_braketest" 5 "MissionSelection_inspection" 6 "MissionSelection_autocross"; +VAL_ 1282 AS_state 1 "AS_state_off" 2 "AS_state_ready" 3 "AS_state_driving" 4 "AS_state_emergency_brake" 5 "AS_state_finish"; +VAL_ 1282 EBS_state 1 "EBS_state_unavailable" 2 "EBS_state_armed" 3 "EBS_state_activated"; +VAL_ 1282 AMI_state 1 "AMI_state_acceleration" 2 "AMI_state_skidpad" 3 "AMI_state_trackdrive" 4 "AMI_state_braketest" 5 "AMI_state_inspection" 6 "AMI_state_autocross"; +VAL_ 1282 Service_brake_state 1 "Service_brake_state_disengaged" 2 "Service_brake_state_engaged" 3 "Service_brake_state_available"; +VAL_ 291 EPSC_mode 0 "Triple_Control_Loop" 1 "Single_Control_Loop"; +VAL_ 1042 iniChk_state 0 "Start" 1 "WD_Check" 2 "WD_OK" 3 "ASB_Check_1" 4 "ASB_Check_2" 5 "Wait_TS" 6 "EBS_Check_A" 7 "EBS_Check_B" 8 "Done" 9 "Error"; +VAL_ 1042 AS_state 0 "AS_Off" 1 "AS_Manual" 2 "AS_Ready" 3 "AS_Driving" 4 "AS_Finished" 5 "AS_Emergency"; +VAL_ 1042 R2D_Progress 0 "R2D_None" 1 "R2D_TSMS" 2 "R2D_TSActive" 3 "R2D_Resetting_Nodes" 4 "R2D_Resetting_Comms" 5 "R2D_Waiting_Init" 6 "R2D_Init_Stage1" 7 "R2D_Init_Stage2" 15 "R2D_Init_Success"; diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN1-MainFT23.dbc b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN1-MainFT23.dbc new file mode 100644 index 0000000..263f769 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN1-MainFT23.dbc @@ -0,0 +1,1731 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: Jetson SSU TTS_RL TTS_RR TTS_FR TTS_FL Shunt AMS ABX SDCL PDU PDMV XSens STW EPSC + + +BO_ 3221225472 VECTOR__INDEPENDENT_SIG_MSG: 0 Vector__XXX + SG_ STW_debugMode : 0|1@1+ (1,0) [0|1] "" Vector__XXX + +BO_ 273 ABX_Accel: 6 Vector__XXX + SG_ ABX_Accel_Z : 32|16@1- (0.001,0) [-32.768|32.767] "g" Vector__XXX + SG_ ABX_Accel_Y : 16|16@1- (0.001,0) [-32.768|32.767] "g" Vector__XXX + SG_ ABX_Accel_X : 0|16@1- (0.001,0) [-32.768|32.767] "g" Vector__XXX + +BO_ 1043 ABX_ParamConfirm: 1 Vector__XXX + SG_ ABX_ParamConfirm : 0|8@1+ (1,0) [0|255] "" Vector__XXX + +BO_ 272 ABX_Hydraulics: 3 Vector__XXX + SG_ ABX_Hyd_PB : 12|12@1+ (0.1,0) [0|409.5] "bar" Vector__XXX + SG_ ABX_Hyd_PA : 0|12@1+ (0.1,0) [0|409.5] "bar" Vector__XXX + +BO_ 225 JetsonTX: 7 Jetson + SG_ Jetson_Torque_Ratio : 32|8@1+ (0.00392156862745098,0) [0|1] "" ABX + SG_ Jetson_Brake_Ratio : 24|8@1+ (0.00392156862745098,0) [0|1] "" ABX + SG_ Jetson_Cones_Actual : 48|8@1+ (1,0) [0|255] "" ABX + SG_ Jetson_Cones_All : 40|8@1+ (1,0) [0|255] "" ABX + SG_ Jetson_Lap_Count : 4|4@1+ (1,0) [0|15] "" ABX + SG_ Jetson_Steering_Angle : 16|8@1- (0.00784313725490196,0) [-1|1] "" ABX + SG_ Jetson_Speed_Target : 8|8@1+ (0.2,0) [0|51] "" ABX + SG_ Jetson_AS_OK : 1|1@1+ (1,0) [0|1] "Bool" ABX + SG_ Jetson_AS_Mission_Complete : 0|1@1+ (1,0) [0|1] "Bool" ABX + +BO_ 1536 AMS_Slave0_Log0: 8 AMS + SG_ AMS_Slave0_V3 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V2 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V1 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V0 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1537 AMS_Slave0_Log1: 8 AMS + SG_ AMS_Slave0_V7 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V6 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V5 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V4 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1538 AMS_Slave0_Log2: 8 AMS + SG_ AMS_Slave0_V11 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V10 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V9 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V8 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1539 AMS_Slave0_Log3: 8 AMS + SG_ AMS_Slave0_V15 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V14 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V13 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V12 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1540 AMS_Slave0_Log4: 6 AMS + SG_ AMS_Slave0_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave0_V16 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1541 AMS_Slave0_Log5: 8 AMS + SG_ AMS_Slave0_T7 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T6 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T5 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T4 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T3 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T2 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T1 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1542 AMS_Slave0_Log6: 8 AMS + SG_ AMS_Slave0_T15 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T14 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T13 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T12 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T11 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T10 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T9 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1543 AMS_Slave0_Log7: 8 AMS + SG_ AMS_Slave0_T23 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T22 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T21 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T20 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T19 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T18 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T17 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1544 AMS_Slave0_Log8: 8 AMS + SG_ AMS_Slave0_T31 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T30 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T29 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T28 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T27 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T26 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T25 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1552 AMS_Slave1_Log0: 8 AMS + SG_ AMS_Slave1_V3 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V2 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V1 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V0 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1553 AMS_Slave1_Log1: 8 AMS + SG_ AMS_Slave1_V7 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V6 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V5 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V4 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1554 AMS_Slave1_Log2: 8 AMS + SG_ AMS_Slave1_V11 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V10 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V9 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V8 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1555 AMS_Slave1_Log3: 8 AMS + SG_ AMS_Slave1_V15 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V14 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V13 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V12 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1556 AMS_Slave1_Log4: 6 AMS + SG_ AMS_Slave1_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave1_V16 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1557 AMS_Slave1_Log5: 8 AMS + SG_ AMS_Slave1_T7 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T6 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T5 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T4 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T3 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T2 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T1 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1558 AMS_Slave1_Log6: 8 AMS + SG_ AMS_Slave1_T15 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T14 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T13 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T12 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T11 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T10 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T9 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1559 AMS_Slave1_Log7: 8 AMS + SG_ AMS_Slave1_T23 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T22 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T21 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T20 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T19 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T18 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T17 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1560 AMS_Slave1_Log8: 8 AMS + SG_ AMS_Slave1_T31 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T30 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T29 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T28 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T27 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T26 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T25 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1568 AMS_Slave2_Log0: 8 AMS + SG_ AMS_Slave2_V3 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V2 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V1 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V0 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1569 AMS_Slave2_Log1: 8 AMS + SG_ AMS_Slave2_V7 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V6 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V5 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V4 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1570 AMS_Slave2_Log2: 8 AMS + SG_ AMS_Slave2_V11 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V10 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V9 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V8 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1571 AMS_Slave2_Log3: 8 AMS + SG_ AMS_Slave2_V15 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V14 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V13 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V12 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1572 AMS_Slave2_Log4: 6 AMS + SG_ AMS_Slave2_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave2_V16 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1573 AMS_Slave2_Log5: 8 AMS + SG_ AMS_Slave2_T7 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T6 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T5 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T4 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T3 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T2 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T1 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1574 AMS_Slave2_Log6: 8 AMS + SG_ AMS_Slave2_T15 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T14 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T13 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T12 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T11 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T10 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T9 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1575 AMS_Slave2_Log7: 8 AMS + SG_ AMS_Slave2_T23 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T22 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T21 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T20 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T19 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T18 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T17 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1576 AMS_Slave2_Log8: 8 AMS + SG_ AMS_Slave2_T31 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T30 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T29 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T28 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T27 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T26 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T25 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1584 AMS_Slave3_Log0: 8 AMS + SG_ AMS_Slave3_V3 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V2 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V1 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V0 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1585 AMS_Slave3_Log1: 8 AMS + SG_ AMS_Slave3_V7 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V6 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V5 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V4 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1586 AMS_Slave3_Log2: 8 AMS + SG_ AMS_Slave3_V11 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V10 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V9 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V8 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1587 AMS_Slave3_Log3: 8 AMS + SG_ AMS_Slave3_V15 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V14 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V13 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V12 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1588 AMS_Slave3_Log4: 6 AMS + SG_ AMS_Slave3_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave3_V16 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1589 AMS_Slave3_Log5: 8 AMS + SG_ AMS_Slave3_T7 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T6 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T5 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T4 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T3 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T2 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T1 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1590 AMS_Slave3_Log6: 8 AMS + SG_ AMS_Slave3_T15 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T14 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T13 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T12 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T11 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T10 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T9 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1591 AMS_Slave3_Log7: 8 AMS + SG_ AMS_Slave3_T23 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T22 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T21 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T20 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T19 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T18 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T17 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1592 AMS_Slave3_Log8: 8 AMS + SG_ AMS_Slave3_T31 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T30 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T29 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T28 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T27 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T26 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T25 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1600 AMS_Slave4_Log0: 8 AMS + SG_ AMS_Slave4_V3 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V2 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V1 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V0 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1601 AMS_Slave4_Log1: 8 AMS + SG_ AMS_Slave4_V7 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V6 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V5 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V4 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1602 AMS_Slave4_Log2: 8 AMS + SG_ AMS_Slave4_V11 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V10 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V9 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V8 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1603 AMS_Slave4_Log3: 8 AMS + SG_ AMS_Slave4_V15 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V14 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V13 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V12 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1604 AMS_Slave4_Log4: 6 AMS + SG_ AMS_Slave4_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave4_V16 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1605 AMS_Slave4_Log5: 8 AMS + SG_ AMS_Slave4_T7 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T6 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T5 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T4 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T3 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T2 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T1 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1606 AMS_Slave4_Log6: 8 AMS + SG_ AMS_Slave4_T15 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T14 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T13 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T12 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T11 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T10 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T9 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1607 AMS_Slave4_Log7: 8 AMS + SG_ AMS_Slave4_T23 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T22 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T21 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T20 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T19 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T18 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T17 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1608 AMS_Slave4_Log8: 8 AMS + SG_ AMS_Slave4_T31 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T30 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T29 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T28 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T27 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T26 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T25 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1616 AMS_Slave5_Log0: 8 AMS + SG_ AMS_Slave5_V3 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V2 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V1 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V0 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1617 AMS_Slave5_Log1: 8 AMS + SG_ AMS_Slave5_V7 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V6 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V5 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V4 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1618 AMS_Slave5_Log2: 8 AMS + SG_ AMS_Slave5_V11 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V10 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V9 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V8 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1619 AMS_Slave5_Log3: 8 AMS + SG_ AMS_Slave5_V15 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V14 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V13 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V12 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1620 AMS_Slave5_Log4: 6 AMS + SG_ AMS_Slave5_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave5_V16 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1621 AMS_Slave5_Log5: 8 AMS + SG_ AMS_Slave5_T7 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T6 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T5 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T4 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T3 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T2 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T1 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1622 AMS_Slave5_Log6: 8 AMS + SG_ AMS_Slave5_T15 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T14 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T13 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T12 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T11 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T10 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T9 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1623 AMS_Slave5_Log7: 8 AMS + SG_ AMS_Slave5_T23 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T22 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T21 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T20 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T19 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T18 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T17 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1624 AMS_Slave5_Log8: 8 AMS + SG_ AMS_Slave5_T31 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T30 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T29 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T28 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T27 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T26 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T25 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1632 AMS_Slave6_Log0: 8 AMS + SG_ AMS_Slave6_V3 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V2 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V1 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V0 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1633 AMS_Slave6_Log1: 8 AMS + SG_ AMS_Slave6_V7 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V6 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V5 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V4 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1634 AMS_Slave6_Log2: 8 AMS + SG_ AMS_Slave6_V11 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V10 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V9 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V8 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1635 AMS_Slave6_Log3: 8 AMS + SG_ AMS_Slave6_V15 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V14 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V13 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V12 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1636 AMS_Slave6_Log4: 6 AMS + SG_ AMS_Slave6_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave6_V16 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1637 AMS_Slave6_Log5: 8 AMS + SG_ AMS_Slave6_T7 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T6 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T5 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T4 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T3 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T2 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T1 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1638 AMS_Slave6_Log6: 8 AMS + SG_ AMS_Slave6_T15 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T14 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T13 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T12 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T11 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T10 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T9 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1639 AMS_Slave6_Log7: 8 AMS + SG_ AMS_Slave6_T23 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T22 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T21 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T20 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T19 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T18 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T17 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1640 AMS_Slave6_Log8: 8 AMS + SG_ AMS_Slave6_T31 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T30 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T29 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T28 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T27 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T26 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T25 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1648 AMS_Slave7_Log0: 8 AMS + SG_ AMS_Slave7_V3 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V2 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V1 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V0 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1649 AMS_Slave7_Log1: 8 AMS + SG_ AMS_Slave7_V7 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V6 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V5 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V4 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1650 AMS_Slave7_Log2: 8 AMS + SG_ AMS_Slave7_V11 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V10 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V9 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V8 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1651 AMS_Slave7_Log3: 8 AMS + SG_ AMS_Slave7_V15 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V14 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V13 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V12 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1652 AMS_Slave7_Log4: 6 AMS + SG_ AMS_Slave7_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave7_V16 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1653 AMS_Slave7_Log5: 8 AMS + SG_ AMS_Slave7_T7 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T6 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T5 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T4 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T3 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T2 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T1 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1654 AMS_Slave7_Log6: 8 AMS + SG_ AMS_Slave7_T15 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T14 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T13 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T12 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T11 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T10 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T9 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1655 AMS_Slave7_Log7: 8 AMS + SG_ AMS_Slave7_T23 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T22 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T21 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T20 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T19 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T18 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T17 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1656 AMS_Slave7_Log8: 8 AMS + SG_ AMS_Slave7_T31 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T30 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T29 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T28 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T27 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T26 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T25 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1664 AMS_Slave8_Log0: 8 AMS + SG_ AMS_Slave8_V3 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V2 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V1 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V0 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1665 AMS_Slave8_Log1: 8 AMS + SG_ AMS_Slave8_V7 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V6 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V5 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V4 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1666 AMS_Slave8_Log2: 8 AMS + SG_ AMS_Slave8_V11 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V10 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V9 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V8 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1667 AMS_Slave8_Log3: 8 AMS + SG_ AMS_Slave8_V15 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V14 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V13 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V12 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1668 AMS_Slave8_Log4: 6 AMS + SG_ AMS_Slave8_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave8_V16 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1669 AMS_Slave8_Log5: 8 AMS + SG_ AMS_Slave8_T7 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T6 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T5 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T4 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T3 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T2 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T1 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1670 AMS_Slave8_Log6: 8 AMS + SG_ AMS_Slave8_T15 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T14 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T13 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T12 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T11 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T10 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T9 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1671 AMS_Slave8_Log7: 8 AMS + SG_ AMS_Slave8_T23 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T22 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T21 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T20 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T19 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T18 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T17 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1672 AMS_Slave8_Log8: 8 AMS + SG_ AMS_Slave8_T31 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T30 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T29 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T28 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T27 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T26 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T25 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1680 AMS_Slave9_Log0: 8 AMS + SG_ AMS_Slave9_V3 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V2 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V1 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V0 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1681 AMS_Slave9_Log1: 8 AMS + SG_ AMS_Slave9_V7 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V6 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V5 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V4 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1682 AMS_Slave9_Log2: 8 AMS + SG_ AMS_Slave9_V11 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V10 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V9 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V8 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1683 AMS_Slave9_Log3: 8 AMS + SG_ AMS_Slave9_V15 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V14 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V13 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V12 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1684 AMS_Slave9_Log4: 6 AMS + SG_ AMS_Slave9_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave9_V16 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1685 AMS_Slave9_Log5: 8 AMS + SG_ AMS_Slave9_T7 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T6 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T5 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T4 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T3 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T2 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T1 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1686 AMS_Slave9_Log6: 8 AMS + SG_ AMS_Slave9_T15 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T14 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T13 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T12 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T11 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T10 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T9 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1687 AMS_Slave9_Log7: 8 AMS + SG_ AMS_Slave9_T23 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T22 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T21 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T20 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T19 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T18 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T17 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1688 AMS_Slave9_Log8: 8 AMS + SG_ AMS_Slave9_T31 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T30 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T29 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T28 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T27 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T26 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T25 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1696 AMS_Slave10_Log0: 8 AMS + SG_ AMS_Slave10_V3 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave10_V2 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave10_V1 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave10_V0 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1697 AMS_Slave10_Log1: 8 AMS + SG_ AMS_Slave10_V7 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave10_V6 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave10_V5 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave10_V4 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1698 AMS_Slave10_Log2: 8 AMS + SG_ AMS_Slave10_V11 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave10_V10 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave10_V9 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave10_V8 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1699 AMS_Slave10_Log3: 8 AMS + SG_ AMS_Slave10_V15 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave10_V14 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave10_V13 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave10_V12 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1700 AMS_Slave10_Log4: 6 AMS + SG_ AMS_Slave10_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave10_V16 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1701 AMS_Slave10_Log5: 8 AMS + SG_ AMS_Slave10_T7 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T6 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T5 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T4 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T3 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T2 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T1 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1702 AMS_Slave10_Log6: 8 AMS + SG_ AMS_Slave10_T15 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T14 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T13 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T12 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T11 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T10 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T9 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1703 AMS_Slave10_Log7: 8 AMS + SG_ AMS_Slave10_T23 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T22 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T21 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T20 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T19 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T18 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T17 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1704 AMS_Slave10_Log8: 8 AMS + SG_ AMS_Slave10_T31 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T30 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T29 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T28 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T27 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T26 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T25 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1712 AMS_Slave11_Log0: 8 AMS + SG_ AMS_Slave11_V3 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave11_V2 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave11_V1 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave11_V0 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1713 AMS_Slave11_Log1: 8 AMS + SG_ AMS_Slave11_V7 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave11_V6 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave11_V5 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave11_V4 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1714 AMS_Slave11_Log2: 8 AMS + SG_ AMS_Slave11_V11 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave11_V10 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave11_V9 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave11_V8 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1715 AMS_Slave11_Log3: 8 AMS + SG_ AMS_Slave11_V15 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave11_V14 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave11_V13 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave11_V12 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1716 AMS_Slave11_Log4: 6 AMS + SG_ AMS_Slave11_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave11_V16 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1717 AMS_Slave11_Log5: 8 AMS + SG_ AMS_Slave11_T7 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T6 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T5 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T4 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T3 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T2 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T1 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1718 AMS_Slave11_Log6: 8 AMS + SG_ AMS_Slave11_T15 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T14 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T13 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T12 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T11 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T10 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T9 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1719 AMS_Slave11_Log7: 8 AMS + SG_ AMS_Slave11_T23 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T22 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T21 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T20 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T19 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T18 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T17 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1720 AMS_Slave11_Log8: 8 AMS + SG_ AMS_Slave11_T31 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T30 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T29 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T28 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T27 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T26 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T25 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1728 AMS_Slave12_Log0: 8 AMS + SG_ AMS_Slave12_V3 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave12_V2 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave12_V1 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave12_V0 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1729 AMS_Slave12_Log1: 8 AMS + SG_ AMS_Slave12_V7 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave12_V6 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave12_V5 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave12_V4 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1730 AMS_Slave12_Log2: 8 AMS + SG_ AMS_Slave12_V11 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave12_V10 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave12_V9 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave12_V8 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1731 AMS_Slave12_Log3: 8 AMS + SG_ AMS_Slave12_V15 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave12_V14 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave12_V13 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave12_V12 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1732 AMS_Slave12_Log4: 6 AMS + SG_ AMS_Slave12_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave12_V16 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1733 AMS_Slave12_Log5: 8 AMS + SG_ AMS_Slave12_T7 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T6 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T5 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T4 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T3 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T2 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T1 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1734 AMS_Slave12_Log6: 8 AMS + SG_ AMS_Slave12_T15 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T14 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T13 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T12 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T11 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T10 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T9 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1735 AMS_Slave12_Log7: 8 AMS + SG_ AMS_Slave12_T23 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T22 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T21 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T20 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T19 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T18 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T17 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1736 AMS_Slave12_Log8: 8 AMS + SG_ AMS_Slave12_T31 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T30 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T29 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T28 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T27 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T26 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T25 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave12_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1744 AMS_Slave13_Log0: 8 AMS + SG_ AMS_Slave13_V3 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave13_V2 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave13_V1 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave13_V0 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1745 AMS_Slave13_Log1: 8 AMS + SG_ AMS_Slave13_V7 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave13_V6 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave13_V5 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave13_V4 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1746 AMS_Slave13_Log2: 8 AMS + SG_ AMS_Slave13_V11 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave13_V10 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave13_V9 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave13_V8 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1747 AMS_Slave13_Log3: 8 AMS + SG_ AMS_Slave13_V15 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave13_V14 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave13_V13 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave13_V12 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1748 AMS_Slave13_Log4: 6 AMS + SG_ AMS_Slave13_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave13_V16 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1749 AMS_Slave13_Log5: 8 AMS + SG_ AMS_Slave13_T7 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T6 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T5 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T4 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T3 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T2 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T1 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1750 AMS_Slave13_Log6: 8 AMS + SG_ AMS_Slave13_T15 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T14 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T13 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T12 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T11 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T10 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T9 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1751 AMS_Slave13_Log7: 8 AMS + SG_ AMS_Slave13_T23 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T22 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T21 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T20 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T19 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T18 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T17 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1752 AMS_Slave13_Log8: 8 AMS + SG_ AMS_Slave13_T31 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T30 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T29 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T28 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T27 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T26 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T25 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave13_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1760 AMS_Slave14_Log0: 8 AMS + SG_ AMS_Slave14_V3 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave14_V2 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave14_V1 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave14_V0 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1761 AMS_Slave14_Log1: 8 AMS + SG_ AMS_Slave14_V7 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave14_V6 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave14_V5 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave14_V4 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1762 AMS_Slave14_Log2: 8 AMS + SG_ AMS_Slave14_V11 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave14_V10 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave14_V9 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave14_V8 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1763 AMS_Slave14_Log3: 8 AMS + SG_ AMS_Slave14_V15 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave14_V14 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave14_V13 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave14_V12 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1764 AMS_Slave14_Log4: 6 AMS + SG_ AMS_Slave14_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave14_V16 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1765 AMS_Slave14_Log5: 8 AMS + SG_ AMS_Slave14_T7 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T6 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T5 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T4 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T3 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T2 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T1 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1766 AMS_Slave14_Log6: 8 AMS + SG_ AMS_Slave14_T15 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T14 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T13 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T12 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T11 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T10 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T9 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1767 AMS_Slave14_Log7: 8 AMS + SG_ AMS_Slave14_T23 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T22 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T21 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T20 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T19 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T18 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T17 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1768 AMS_Slave14_Log8: 8 AMS + SG_ AMS_Slave14_T31 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T30 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T29 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T28 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T27 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T26 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T25 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave14_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1776 AMS_Slave15_Log0: 8 AMS + SG_ AMS_Slave15_V3 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave15_V2 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave15_V1 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave15_V0 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1777 AMS_Slave15_Log1: 8 AMS + SG_ AMS_Slave15_V7 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave15_V6 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave15_V5 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave15_V4 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1778 AMS_Slave15_Log2: 8 AMS + SG_ AMS_Slave15_V11 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave15_V10 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave15_V9 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave15_V8 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1779 AMS_Slave15_Log3: 8 AMS + SG_ AMS_Slave15_V15 : 55|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave15_V14 : 39|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave15_V13 : 23|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave15_V12 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1780 AMS_Slave15_Log4: 6 AMS + SG_ AMS_Slave15_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave15_V16 : 7|16@0+ (0.0001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1781 AMS_Slave15_Log5: 8 AMS + SG_ AMS_Slave15_T7 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T6 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T5 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T4 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T3 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T2 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T1 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1782 AMS_Slave15_Log6: 8 AMS + SG_ AMS_Slave15_T15 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T14 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T13 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T12 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T11 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T10 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T9 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1783 AMS_Slave15_Log7: 8 AMS + SG_ AMS_Slave15_T23 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T22 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T21 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T20 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T19 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T18 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T17 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 1784 AMS_Slave15_Log8: 8 AMS + SG_ AMS_Slave15_T31 : 56|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T30 : 48|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T29 : 40|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T28 : 32|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T27 : 24|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T26 : 16|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T25 : 8|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave15_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 224 JetsonRX: 4 ABX + SG_ Jetson_AllowTorque : 24|1@1+ (1,0) [0|1] "bool" Vector__XXX + SG_ Jetson_Reset : 7|1@1+ (1,0) [0|1] "bool" Vector__XXX + SG_ Jetson_Power_Off : 6|1@1+ (1,0) [0|1] "bool" Vector__XXX + SG_ Jetson_Speed_XSens : 16|8@1+ (0.2,0) [0|51] "m/s" Vector__XXX + SG_ Jetson_Speed : 8|8@1+ (0.2,0) [0|51] "m/s" Jetson + SG_ Jetson_AS_State : 3|3@1+ (1,0) [0|5] "" Jetson + SG_ Jetson_AS_Mission : 0|3@1+ (1,0) [0|7] "int" Jetson + +BO_ 143 AMS_Slave15Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_SoC : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 142 AMS_Slave14Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_SoC : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 141 AMS_Slave13Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_SoC : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 140 AMS_Slave12Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_SoC : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 139 AMS_Slave11Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_SoC : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 138 AMS_Slave10Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_SoC : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 137 AMS_Slave9Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_SoC : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 136 AMS_Slave8Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_SoC : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 135 AMS_Slave7Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_SoC : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 134 AMS_Slave6Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_SoC : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 133 AMS_Slave5Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_SoC : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 132 AMS_Slave4Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_SoC : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 131 AMS_Slave3Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_SoC : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 130 AMS_Slave2Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_SoC : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 129 AMS_Slave1Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_SoC : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 265 ABX_Misc: 7 ABX + SG_ ABX_LV_Voltage : 48|8@1+ (0.0588235294117647,0) [0|15] "V" Vector__XXX + SG_ ABX_LV_SoC : 40|8@1+ (1,0) [0|100] "%" Vector__XXX + SG_ ABX_DriverProtocol : 0|3@1+ (1,0) [0|7] "" Vector__XXX + SG_ ABX_Distance_total : 24|16@1+ (0.01,0) [0|655.35] "km" Vector__XXX + SG_ ABX_Distance_session : 8|16@1+ (1,0) [0|65535] "m" Vector__XXX + +BO_ 12 AMS_Error: 2 AMS + SG_ AMS_Error_Arg : 8|8@1- (1,0) [0|0] "" ABX + SG_ AMS_Error_Kind : 0|8@1- (1,0) [0|0] "" ABX + +BO_ 264 ABX_CoolingSys_Internal: 8 ABX + SG_ ABX_CS_T_MotR : 48|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_CS_T_MotL : 32|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_CS_T_InvR : 16|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_CS_T_InvL : 0|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + +BO_ 262 ABX_CoolingSys_Acc: 6 ABX + SG_ ABX_CS_T_AccOut : 32|10@1+ (0.1,0) [0|102.3] "�C" Vector__XXX + SG_ ABX_CS_T_AccIn : 16|10@1+ (0.1,0) [0|102.3] "�C" Vector__XXX + SG_ ABX_CS_P_AccOut : 8|8@1+ (0.02,0) [0|4] "bar" Vector__XXX + SG_ ABX_CS_P_AccIn : 0|8@1+ (0.02,0) [0|4] "bar" Vector__XXX + +BO_ 263 ABX_CoolingSys_MotInv: 8 ABX + SG_ ABX_CS_P_MotRIn : 24|8@1+ (0.02,0) [0|4] "bar" Vector__XXX + SG_ ABX_CS_T_RadIn : 52|10@1+ (0.1,0) [0|102.3] "�C" Vector__XXX + SG_ ABX_CS_T_MotIn : 42|10@1+ (0.1,0) [0|102.3] "�C" Vector__XXX + SG_ ABX_CS_T_InvIn : 32|10@1+ (0.1,0) [0|102.3] "�C" Vector__XXX + SG_ ABX_CS_P_RadIn : 16|8@1+ (0.02,0) [0|4] "bar" Vector__XXX + SG_ ABX_CS_P_MotLIn : 8|8@1+ (0.02,0) [0|4] "bar" Vector__XXX + SG_ ABX_CS_P_InvIn : 0|8@1+ (0.02,0) [0|4] "bar" Vector__XXX + +BO_ 261 ABX_BrakeT: 8 ABX + SG_ ABX_BrakeT_RR : 48|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_BrakeT_RL : 32|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_BrakeT_FR : 16|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_BrakeT_FL : 0|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + +BO_ 260 ABX_Wheelspeed: 8 ABX + SG_ ABX_Wheelspeed_RR : 48|16@1- (0.001,0) [-32.768|32.767] "1/s" Vector__XXX + SG_ ABX_Wheelspeed_RL : 32|16@1- (0.001,0) [-32.768|32.767] "1/s" Vector__XXX + SG_ ABX_Wheelspeed_FR : 16|16@1- (0.001,0) [-32.768|32.767] "1/s" Vector__XXX + SG_ ABX_Wheelspeed_FL : 0|16@1- (0.001,0) [-32.768|32.767] "1/s" Vector__XXX + +BO_ 259 ABX_Dampers: 8 ABX + SG_ ABX_DamperRoll_R : 48|16@1+ (0.01,0) [0|75] "mm" Vector__XXX + SG_ ABX_DamperRoll_F : 16|16@1+ (0.01,0) [0|75] "mm" Vector__XXX + SG_ ABX_DamperHeave_R : 32|16@1+ (0.01,0) [0|75] "mm" Vector__XXX + SG_ ABX_DamperHeave_F : 0|16@1+ (0.01,0) [0|75] "mm" Vector__XXX + +BO_ 258 ABX_Timings: 8 ABX + SG_ ABX_Sectortime_last : 48|16@1+ (0.01,0) [0|655.35] "s" Vector__XXX + SG_ ABX_Sectortime_best : 32|16@1+ (0.01,0) [0|655.35] "s" Vector__XXX + SG_ ABX_Laptime_last : 16|16@1+ (0.01,0) [0|655.35] "s" Vector__XXX + SG_ ABX_Laptime_best : 0|16@1+ (0.01,0) [0|655.35] "s" Vector__XXX + +BO_ 257 ABX_Driver: 8 ABX + SG_ ABX_Sectorcounter : 56|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ ABX_Lapcounter : 48|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ ABX_Steering_Angle : 32|8@1- (1,0) [-128|127] "�" Vector__XXX + SG_ ABX_Speed : 40|8@1+ (0.2,0) [0|51] "m/s" Vector__XXX + SG_ ABX_BrakeP_R : 20|12@1+ (0.1,0) [0|160] "bar" Vector__XXX + SG_ ABX_BrakeP_F : 8|12@1+ (0.1,0) [0|160] "bar" Vector__XXX + SG_ ABX_APPS_percent : 0|8@1+ (1,0) [0|100] "%" Vector__XXX + +BO_ 1792 TTS_Config: 1 ABX + SG_ TTS_NewID : 0|2@1+ (1,0) [0|3] "" Vector__XXX + +BO_ 1796 TTS_RR: 8 TTS_RR + SG_ TTS_RR_Outer : 48|12@1- (0.1,150) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_RR_Inner : 0|12@1- (0.1,150) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_RR_CenterOut : 36|12@1- (0.1,150) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_RR_CenterIn : 12|12@1- (0.1,150) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_RR_Center : 24|12@1- (0.1,150) [-54.8|354.7] "�C" Vector__XXX + +BO_ 1795 TTS_RL: 8 TTS_RL + SG_ TTS_RL_Outer : 0|12@1- (0.1,150) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_RL_Inner : 48|12@1- (0.1,150) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_RL_CenterIn : 36|12@1- (0.1,150) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_RL_CenterOut : 12|12@1- (0.1,150) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_RL_Center : 24|12@1- (0.1,150) [-54.8|354.7] "�C" Vector__XXX + +BO_ 1794 TTS_FR: 8 TTS_FR + SG_ TTS_FR_Outer : 48|12@1- (0.1,150) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_FR_Inner : 0|12@1- (0.1,150) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_FR_CenterIn : 12|12@1- (0.1,150) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_FR_CenterOut : 36|12@1- (0.1,150) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_FR_Center : 24|12@1- (0.1,150) [-54.8|354.7] "�C" Vector__XXX + +BO_ 1793 TTS_FL: 8 TTS_FL + SG_ TTS_FL_Outer : 0|12@1- (0.1,150) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_FL_Inner : 48|12@1- (0.1,150) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_FL_CenterIn : 36|12@1- (0.1,150) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_FL_CenterOut : 12|12@1- (0.1,150) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_FL_Center : 24|12@1- (0.1,150) [-54.8|354.7] "�C" Vector__XXX + +BO_ 1026 STW_Param_Set: 5 STW + SG_ STW_Param_BBal m0 : 15|32@0+ (0.1,0) [0|0] "" Vector__XXX + SG_ STW_Param_Type M : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ STW_Param_SLIPREF m1 : 15|32@0+ (0.01,0) [0|1] "" Vector__XXX + SG_ STW_Param_ASRP m3 : 15|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_ASRON m4 : 15|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_ASRI m5 : 15|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_EnduPowerLimit m6 : 15|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_Test3 m7 : 15|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_Test4 m8 : 15|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_MUMAX m2 : 15|32@0+ (0.1,0) [0|1] "" Vector__XXX + +BO_ 128 AMS_Slave0Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_SoC : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.0001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 1280 SSU_Message: 4 SSU + SG_ SSU_AirTemp : 16|16@1- (0.1,0) [-20|80] "�C" Vector__XXX + SG_ SSU_AirPressure : 0|16@1- (1,0) [-1000|1000] "Pa" Vector__XXX + +BO_ 10 AMS_Status: 6 AMS + SG_ AMS_State : 0|7@1+ (1,0) [0|1] "" ABX + SG_ SDC_Closed : 7|1@1+ (1,0) [0|1] "" ABX + SG_ SOC : 8|8@1+ (1,0) [0|100] "%" ABX + SG_ Min_cell_volt : 23|16@0+ (0.0001,0) [0|5] "V" ABX + SG_ Max_cell_temp : 39|16@0+ (0.0625,0) [0|4095.94] "°C" ABX + +BO_ 9 AMS_SlavePanic: 8 AMS + SG_ AMS_SlavePanic_Kind : 15|8@0+ (1,0) [0|7.20576E+016] "" ABX + SG_ AMS_SlavePanic_SlaveID : 0|8@1+ (1,0) [0|255] "" ABX + SG_ AMS_SlavePanic_Arg : 23|32@0+ (1,0) [0|7.20576E+016] "" ABX + +BO_ 11 AMS_In: 1 ABX + SG_ TS_activate : 0|1@1+ (1,0) [0|1] "" AMS + SG_ Lap_Number : 2|6@1+ (1,0) [0|64] "Laps" AMS + SG_ Inverters_discharged : 1|1@1+ (1,0) [0|1] "" AMS + +BO_ 1313 Shunt_Current: 6 Shunt + SG_ Shunt_Current : 23|32@0- (0.001,0) [-2000000|2000000] "A" AMS + +BO_ 1314 Shunt_Voltage1: 6 Shunt + SG_ Shunt_Voltage1 : 23|32@0- (0.001,0) [-2000000|2000000] "V" AMS + +BO_ 1315 Shunt_Voltage2: 6 Shunt + SG_ Shunt_Voltage2 : 23|32@0- (0.001,0) [-2000000|2000000] "V" AMS + +BO_ 1316 Shunt_Voltage3: 6 Shunt + SG_ Shunt_Voltage3 : 23|32@0- (0.001,0) [-2000000|2000000] "V" AMS + +BO_ 1317 Shunt_Temperature: 6 Shunt + SG_ Shunt_Temperature : 23|32@0+ (0.1,0) [0|1000] "°C" ABX + +BO_ 16 SDCL_tx: 4 SDCL + SG_ asms_state : 0|1@1+ (1,0) [0|1] "" ABX + SG_ sdc_state_1 : 1|1@1+ (1,0) [0|1] "" ABX + SG_ sdc_state_2 : 2|1@1+ (1,0) [0|1] "" ABX + SG_ sdc_state_3 : 3|1@1+ (1,0) [0|1] "" ABX + SG_ heartbeat_ok : 4|1@1+ (1,0) [0|1] "" ABX + SG_ sdcl_sdc_ready : 5|1@1+ (1,0) [0|1] "" ABX + SG_ ts_start_muxed : 6|1@1+ (1,0) [0|1] "" ABX + SG_ latch_init_open : 8|1@1+ (1,0) [0|1] "" ABX + SG_ latch_closed : 9|1@1+ (1,0) [0|1] "" ABX + SG_ latch_reopened : 10|1@1+ (1,0) [0|1] "" ABX + SG_ as_mission : 11|3@1+ (1,0) [0|7] "" ABX + +BO_ 15 SDCL_rx: 3 ABX + SG_ as_close_sdc : 0|1@1+ (1,0) [0|1] "" SDCL + SG_ sdcl_heartbeat : 1|1@1+ (1,0) [0|1] "" SDCL + SG_ asb_error : 2|1@1+ (1,0) [0|1] "" SDCL + SG_ as_mission : 4|3@1+ (1,0) [0|7] "" SDCL + +BO_ 200 PDU_Command: 6 ABX + SG_ PDU_led3_rx : 13|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_led2_rx : 14|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_led1_rx : 15|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_servo_rx : 1|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_misc_rx : 2|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_alwayson_rx : 3|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_shutdown_circuit_rx : 4|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_ebs_valve_2_rx : 5|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_mode_valve_2_rx : 6|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_inverter_rx : 7|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_mode_valve_1_rx : 8|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_steering_rx : 9|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_ebs_valve_1_rx : 10|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_service_brake_rx : 11|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_sensorbox_rx : 12|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_PWM_fans_rx : 23|8@0+ (1,0) [0|255] "" PDU + SG_ PDU_PWM_aggregat_rx : 31|8@0+ (1,0) [0|255] "" PDU + SG_ PDU_PWM_pump_rx : 39|8@0+ (1,0) [0|255] "" PDU + SG_ PDU_checksum_rx : 47|8@0+ (1,0) [0|255] "" PDU + +BO_ 201 PDU_Response: 6 PDU + SG_ PDU_led3_tx : 13|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_led2_tx : 14|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_led1_tx : 15|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_servo_tx : 1|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_misc_tx : 2|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_alwayson_tx : 3|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_shutdown_circuit_tx : 4|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_evs_valve_2_tx : 5|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_mode_valve_2_tx : 6|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_inverter_tx : 7|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_mode_valve_1_tx : 8|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_steering_tx : 9|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_ebs_valve_1_tx : 10|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_service_brake_tx : 11|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_sensorbox_tx : 12|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_PWM_fans_tx : 23|8@0+ (1,0) [0|255] "" ABX + SG_ PDU_PWM_aggregat : 31|8@0+ (1,0) [0|255] "" ABX + SG_ PDU_PWM_pump : 39|8@0+ (1,0) [0|255] "" ABX + SG_ PDU_checksum_tx : 47|8@0+ (1,0) [0|255] "" ABX + +BO_ 514 TxPDO: 6 ABX + SG_ pdm_output2_shortcircuit : 21|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_output1_shortcircuit : 20|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_output2_cablebreak : 19|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_output1_cablebreak : 18|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_output2_controllerrange : 17|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_output1_controllerrange : 16|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_temperature_shutdown : 13|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_temperature_warning : 12|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_analoginput_currentoverload : 11|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_analoginput_shortcircuit : 10|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_analoginput_cablebreak : 9|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_analoginput_middleposition : 8|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_canbus_statewarning : 5|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_canbus_startupmissing : 4|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_canbus_timeout : 3|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_powersupply_greater_32v : 2|1@1+ (1,0) [0|1] "" ABX + SG_ pdm_powersupply_less_8v : 1|1@1+ (1,0) [0|1] "" ABX + SG_ PDM_analoginput : 32|16@1+ (1,0) [0|65535] "%." ABX + +BO_ 1 XSens_Error: 1 XSens + +BO_ 2 XSens_Warning: 1 XSens + SG_ WarningCode : 7|8@0+ (1,0) [0|0] "" ABX + +BO_ 5 XSens_SampleTime: 4 XSens + SG_ Timestamp : 7|32@0+ (1,0) [0|0] "us" ABX + +BO_ 6 XSens_GroupCounter: 2 XSens + SG_ Counter : 7|16@0+ (1,0) [0|0] "" ABX + +BO_ 17 XSens_StatusWord: 4 XSens + SG_ SelfTestOk : 24|1@1+ (1,0) [0|1] "" ABX + SG_ OrientationValid : 25|1@1+ (1,0) [0|1] "" ABX + SG_ GpsValid : 26|1@1+ (1,0) [0|1] "" ABX + SG_ NoRotation : 28|2@0+ (1,0) [0|3] "" ABX + SG_ RepresentativeMotion : 29|1@1+ (1,0) [0|1] "" ABX + SG_ ExternalClockSynced : 30|1@1+ (1,0) [0|1] "" ABX + SG_ ClipAccX : 16|1@1+ (1,0) [0|1] "" ABX + SG_ ClipAccY : 17|1@1+ (1,0) [0|1] "" ABX + SG_ ClipAccZ : 18|1@1+ (1,0) [0|1] "" ABX + SG_ ClipGyrX : 19|1@1+ (1,0) [0|1] "" ABX + SG_ ClipGyrY : 20|1@1+ (1,0) [0|1] "" ABX + SG_ ClipGyrZ : 21|1@1+ (1,0) [0|1] "" ABX + SG_ ClipMagX : 22|1@1+ (1,0) [0|1] "" ABX + SG_ ClipMagY : 23|1@1+ (1,0) [0|1] "" ABX + SG_ ClipMagZ : 8|1@1+ (1,0) [0|1] "" ABX + SG_ Retransmitted : 10|1@1+ (1,0) [0|1] "" ABX + SG_ ClippingDetected : 11|1@1+ (1,0) [0|1] "" ABX + SG_ Interpolated : 12|1@1+ (1,0) [0|1] "" ABX + SG_ SyncIn : 13|1@1+ (1,0) [0|1] "" ABX + SG_ SyncOut : 14|1@1+ (1,0) [0|1] "" ABX + SG_ FilterMode : 1|3@0+ (1,0) [0|1] "" ABX + SG_ HaveGnssTimePulse : 2|1@1+ (1,0) [0|1] "" ABX + SG_ RtkStatus : 4|2@0+ (1,0) [0|1] "" ABX + +BO_ 50 XSens_RateOfTurn: 6 XSens + SG_ XSens_gyrX : 7|16@0- (0.00195313,0) [-35|35] "rad/s" ABX + SG_ XSens_gyrY : 23|16@0- (0.00195313,0) [-35|35] "rad/s" ABX + SG_ XSens_gyrZ : 39|16@0- (0.00195313,0) [-35|35] "rad/s" ABX + +BO_ 52 XSens_Acceleration: 6 XSens + SG_ XSens_accX : 7|16@0- (0.00390625,0) [-100|100] "m/s²" ABX + SG_ XSens_accY : 23|16@0- (0.00390625,0) [-100|100] "m/s²" ABX + SG_ XSens_accZ : 39|16@0- (0.00390625,0) [-100|100] "m/s²" ABX + +BO_ 113 XSens_LongLat: 8 XSens + SG_ latitude : 7|32@0- (5.96046E-008,0) [-90|90] "deg" ABX + SG_ longitude : 39|32@0- (1.19209E-007,0) [-180|180] "deg" ABX + +BO_ 118 XSens_Velocity: 6 XSens + SG_ velX : 7|16@0- (0.015625,0) [-500|500] "m/s" ABX + SG_ velY : 23|16@0- (0.015625,0) [-500|500] "m/s" ABX + SG_ velZ : 39|16@0- (0.015625,0) [-500|500] "m/s" ABX + +BO_ 1040 AS_Mission_fb: 1 ABX + SG_ Mission_selection : 0|3@1+ (1,0) [1|7] "" STW + +BO_ 1024 STW_mission_selected: 1 STW + SG_ Mission_selection : 0|3@1+ (1,0) [1|7] "" ABX + +BO_ 801 EPSC_out: 8 EPSC + SG_ EPSC_measured_steering_angle : 7|16@0- (7.20721E-005,0) [-13875|13875] "part of full steering" ABX + SG_ EPSC_measured_rpm : 39|12@0- (0.1,0) [-204.8|204.7] "rpm" ABX + SG_ EPSC_measured_current : 23|8@0+ (0.1,0) [0|25.5] "A" ABX + SG_ EPSC_measured_voltage : 31|8@0+ (0.1,0) [0|20] "V" ABX + SG_ EPSC_measured_temperature : 43|10@0+ (0.1,0) [0|102.3] "°C" ABX + SG_ EPSC_measured_internal_temp : 49|10@0+ (0.1,0) [0|102.3] "°C" ABX + +BO_ 291 EPSC_Steering_In: 2 ABX + SG_ EPSC_desired_steering_angle : 7|16@0- (0.0001,0) [-10000|10000] "" EPSC + +BO_ 1025 STW_buttons: 1 STW + SG_ STW_button_left : 0|1@1+ (1,0) [0|1] "" ABX + SG_ STW_button_right : 1|1@1+ (1,0) [0|1] "" ABX + SG_ STW_button_R2D : 2|1@1+ (1,0) [0|1] "" ABX + SG_ STW_button_Enter : 3|1@1+ (1,0) [0|1] "" ABX + +BO_ 1042 STW_status: 6 ABX + SG_ InvL_ready : 8|1@1+ (1,0) [0|0] "" STW + SG_ iniChk_state : 24|8@1+ (1,0) [0|255] "" STW + SG_ InvR_ready : 9|1@1+ (1,0) [0|0] "" STW + SG_ AS_State_STW : 0|3@1+ (1,0) [0|5] "" Vector__XXX + SG_ SDC_BFL : 10|1@1+ (1,0) [0|0] "" STW + SG_ SDC_BRL : 11|1@1+ (1,0) [0|0] "" STW + SG_ SDC_ACC : 12|1@1+ (1,0) [0|0] "" STW + SG_ SDC_HVB : 13|1@1+ (1,0) [0|0] "" STW + SG_ Lap_Count : 16|6@1+ (1,0) [0|64] "" STW + SG_ ERR_SDC : 32|1@1+ (1,0) [0|1] "" STW + SG_ ERR_AMS : 33|1@1+ (1,0) [0|1] "" STW + SG_ ERR_InvL : 43|1@1+ (1,0) [0|1] "" STW + SG_ ERR_InvR : 44|1@1+ (1,0) [0|1] "" STW + SG_ ERR_IniChk : 35|1@1+ (1,0) [0|1] "" STW + SG_ ERR_ConMon : 36|1@1+ (1,0) [0|1] "" STW + SG_ ERR_SCS : 37|1@1+ (1,0) [0|1] "" STW + SG_ ERR_sBSPD : 38|1@1+ (1,0) [0|1] "" STW + SG_ ERR_APPSp : 39|1@1+ (1,0) [0|1] "" STW + SG_ ERR_AS : 40|1@1+ (1,0) [0|1] "" STW + SG_ ERR_ROS : 41|1@1+ (1,0) [0|1] "" STW + SG_ ERR_RES : 42|1@1+ (1,0) [0|1] "" STW + SG_ ERR_PDU : 34|1@1+ (1,0) [0|1] "" STW + SG_ R2D_Progress : 4|4@1+ (1,0) [0|15] "" STW + +BO_ 202 PDU_Current_1: 8 PDU + SG_ PDU_alwayson_curr : 7|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_misc_curr : 23|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_inverter_curr : 39|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_shutdown_circuit_curr : 55|16@0+ (1,0) [0|65535] "" ABX + +BO_ 203 PDU_Current_2: 8 PDU + SG_ PDU_fans_curr : 7|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_pump_curr : 23|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_aggregat_curr : 39|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_steering_curr : 55|16@0+ (1,0) [0|65535] "" ABX + +BO_ 204 PDU_Current_3: 8 PDU + SG_ PDU_ebs_valve_1_curr : 7|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_ebs_valve_2_curr : 23|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_mode_valve_1_curr : 39|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_mode_valve_2_curr : 55|16@0+ (1,0) [0|65535] "" ABX + +BO_ 205 PDU_Current_4: 8 PDU + SG_ PDU_sensorbox_curr : 7|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_service_brake_curr : 23|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_servos_curr : 39|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_shutdown_circuit_curr : 55|16@0+ (1,0) [0|65535] "" ABX + +BO_ 292 EPSC_Config_In: 7 ABX + SG_ EPSC_Ki_curr m1 : 55|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_Kp_curr m1 : 47|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_Ki_rpm m1 : 39|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_Kp_rpm m1 : 31|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_Ki_pos m1 : 23|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_Kp_pos m1 : 15|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_should_calibrate : 7|1@0- (1,0) [0|1] "" Vector__XXX + SG_ EPSC_should_change_mode M : 6|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_mode m1 : 5|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_flag3 : 4|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_flag4 : 3|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_flag5 : 2|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_flag6 : 1|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_flag7 : 0|1@0+ (1,0) [0|1] "" Vector__XXX + + + +CM_ BU_ XSens "Generic Xsens Motion Sensor"; +CM_ BO_ 3221225472 "This is a message for not used signals, created by Vector CANdb++ DBC OLE DB Provider."; +CM_ BO_ 225 "Cycle Time: 100ms"; +CM_ BO_ 224 "Cycle Time: 50ms"; +CM_ SG_ 224 Jetson_AS_Mission "AS Mission Selection"; +CM_ BO_ 265 "Cycle time: 1s"; +CM_ BO_ 264 "Cycle time: 100ms"; +CM_ BO_ 262 "Cycle time: 100ms"; +CM_ BO_ 263 "Cycle time: 100ms"; +CM_ BO_ 261 "Cycle time: 100ms"; +CM_ BO_ 260 "Cycle time: 10ms"; +CM_ BO_ 259 "Cycle time: 10ms"; +CM_ BO_ 258 "Cycle time: 1s"; +CM_ BO_ 257 "Cycle time: 10ms"; +CM_ BO_ 1792 "Sent only if TTS positions swapped"; +CM_ SG_ 17 SelfTestOk "Set when the self test result was ok"; +CM_ SG_ 17 OrientationValid "Set when the computed orientation is valid. The orientation may be invalid during startup or when the XSens data is clipping during violent (for the device) motion"; +CM_ SG_ 17 GpsValid "Set when the device has a GPS receiver and the receiver says that there is a GPS position fix."; +CM_ SG_ 17 RepresentativeMotion "Indicates if the In-Run Compass Calibration is doing the representative motion analysis"; +CM_ SG_ 17 ExternalClockSynced "Indicates whether the internal clock is synced with an external clock (Either GNNS or custom provided clock sync)"; +CM_ SG_ 17 ClipAccX "Indicates if there was clipping on the X-axis of the accelerometer"; +CM_ SG_ 17 ClipAccY "Indicates if there was clipping on the Y-axis of the accelerometer"; +CM_ SG_ 17 ClipAccZ "Indicates if there was clipping on the Z-axis of the accelerometer"; +CM_ SG_ 17 ClipGyrX "Indicates if there was clipping on the X-axis of the gyroscope"; +CM_ SG_ 17 ClipGyrY "Indicates if there was clipping on the Y-axis of the gyroscope"; +CM_ SG_ 17 ClipGyrZ "Indicates if there was clipping on the Z-axis of the gyroscope"; +CM_ SG_ 17 ClipMagX "Indicates if there was clipping on the X-axis of the magnetometer"; +CM_ SG_ 17 ClipMagY "Indicates if there was clipping on the Y-axis of the magnetometer"; +CM_ SG_ 17 ClipMagZ "Indicates if there was clipping on the Z-axis of the magnetometer"; +CM_ SG_ 17 Retransmitted "When set Indicates the sample was received as a retransmission"; +CM_ SG_ 17 ClippingDetected "When set Indicates clipping has occurred"; +CM_ SG_ 17 Interpolated "When set Indicates the sample is an interpolation between other samples"; +CM_ SG_ 17 SyncIn "When set indicates a sync-in event has been triggered"; +CM_ SG_ 17 SyncOut "When set Indicates a sync-out event has been generated"; +CM_ SG_ 17 FilterMode "Mask for the 3 bit filter mode field"; +CM_ SG_ 17 HaveGnssTimePulse "Indicates that the 1PPS GNSS time pulse is present"; +CM_ SG_ 17 RtkStatus "Mask for 2 bit RTK status field"; +CM_ SG_ 801 EPSC_measured_steering_angle "+-13875 equals to +-1.0, so the factor is 1/13875"; +VAL_ 12 AMS_Error_Kind 5 "Shunt Overtemperature" 4 "Shunt Overcurrent" 3 "Shunt Timeout" 2 "Slave Panic" 1 "Slave Timeout" 0 "None" ; +VAL_ 1026 STW_Param_Type 0 "BrakeBalance" 1 "TractionControl1" 2 "TractionControl2" 3 "TorqueMap" 4 "Test1" 5 "Test2" 6 "Test3" 7 "Test4" ; +VAL_ 1026 STW_Param_ASRON 0 "OFF" 1 "ON" ; +VAL_ 10 AMS_State 0 "TS_INACTIVE" 1 "TS_ACTIVE" 2 "TS_PRECHARGE" 3 "TS_DISCHARGE" 4 "TS_ERROR" ; +VAL_ 9 AMS_SlavePanic_Kind 0 "Overtemperature" 1 "Undertemperature" 2 "Overvoltage" 3 "Undervoltage" 4 "Too_few_working_temperature_sensors" 5 "Open_cell_connection" ; +VAL_ 17 SelfTestOk 0 "false" 1 "true" ; +VAL_ 17 OrientationValid 0 "false" 1 "true" ; +VAL_ 17 GpsValid 0 "false" 1 "true" ; +VAL_ 17 NoRotation 1 "Aborted" 2 "SamplesRejected" 3 "RunningNormally" ; +VAL_ 17 RepresentativeMotion 0 "false" 1 "true" ; +VAL_ 17 ExternalClockSynced 0 "false" 1 "true" ; +VAL_ 17 ClipAccX 0 "false" 1 "true" ; +VAL_ 17 ClipAccY 0 "false" 1 "true" ; +VAL_ 17 ClipAccZ 0 "false" 1 "true" ; +VAL_ 17 ClipGyrX 0 "false" 1 "true" ; +VAL_ 17 ClipGyrY 0 "false" 1 "true" ; +VAL_ 17 ClipGyrZ 0 "false" 1 "true" ; +VAL_ 17 ClipMagX 0 "false" 1 "true" ; +VAL_ 17 ClipMagY 0 "false" 1 "true" ; +VAL_ 17 ClipMagZ 0 "false" 1 "true" ; +VAL_ 17 Retransmitted 0 "false" 1 "true" ; +VAL_ 17 ClippingDetected 0 "false" 1 "true" ; +VAL_ 17 Interpolated 0 "false" 1 "true" ; +VAL_ 17 SyncIn 0 "false" 1 "true" ; +VAL_ 17 SyncOut 0 "false" 1 "true" ; +VAL_ 17 FilterMode 0 "false" 1 "true" ; +VAL_ 17 HaveGnssTimePulse 0 "false" 1 "true" ; +VAL_ 17 RtkStatus 0 "No RTK" 1 "RTK floating" 2 "RTK fixed" ; +VAL_ 1040 Mission_selection 1 "MissionSelection_acceleration" 2 "MissionSelection_skidpad" 3 "MissionSelection_trackdrive" 4 "MissionSelection_braketest" 5 "MissionSelection_inspection" 6 "MissionSelection_autocross" 7 "MissionSelection_manual" ; +VAL_ 1024 Mission_selection 1 "MissionSelection_acceleration" 2 "MissionSelection_skidpad" 3 "MissionSelection_trackdrive" 4 "MissionSelection_braketest" 5 "MissionSelection_inspection" 6 "MissionSelection_autocross" 7 "MissionSelection_manual" ; +VAL_ 1042 iniChk_state 0 "Start" 1 "WD_Check" 2 "WD_OK" 3 "ASB_Check_1" 4 "ASB_Check_2" 5 "Wait_TS" 6 "EBS_Check_A" 7 "EBS_Check_B" 8 "Done" 9 "Error" ; +VAL_ 1042 AS_State_STW 0 "AS_Off" 1 "AS_Manual" 2 "AS_Ready" 3 "AS_Driving" 4 "AS_Finished" 5 "AS_Emergency" ; +VAL_ 1042 R2D_Progress 0 "R2D_None" 1 "R2D_TSMS" 2 "R2D_TSActive" 3 "R2D_Resetting_Nodes" 4 "R2D_Resetting_Comms" 5 "R2D_Waiting_Init" 6 "R2D_Init_Stage1" 7 "R2D_Init_Stage2" 15 "R2D_Init_Success" ; + diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN1-MainFT23.ini b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN1-MainFT23.ini new file mode 100644 index 0000000..5ad104a --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN1-MainFT23.ini @@ -0,0 +1,165 @@ +[View_Vehicles] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_Vehicle] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,250, +[View_VehicleNetworks] +HIDDEN=3, +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,100,150, +[View_VehicleNetwork] +HIDDEN= +ORDER=0,1,2,3,4, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,250,150, +[View_VehicleNetworkTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,100,150, +[View_VehicleNetworkSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,100,50,100,100,100,50,50,50,50,100,100,150, +[View_VehicleControlUnit] +HIDDEN= +ORDER=0,1,2,3,4, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,250,150, +[View_VehicleGateways] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,250,100, +[View_VehicleGatewaySignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6, +DEFINITIONS= +COLUMNWIDTHS=250,250,250,250,250,250,250, +[View_Networks] +HIDDEN=2, +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,150, +[View_Network] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,150, +[View_NetworkTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,100,150, +[View_NetworkTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,100,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NetworkNodeGroup] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,150, +[View_Ecus] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_Ecu] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,150, +[View_EnvVars] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,50,50,50,50,100,100,150, +[View_EnvVar] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,100,50,50,50,50,100,100,150, +[View_NodeGroups] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_NodeGroup] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,150, +[View_Nodes] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,150, +[View_Node] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,150, +[View_NodeTxMsg] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeRxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,250,50,100,100,100,50,50,50,50,100,100,150, +[View_NodeRxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,250,50,100,100,100,50,50,50,50,100,100,150, +[View_Messages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7, +DEFINITIONS= +COLUMNWIDTHS=250,55,100,50,100,100,100,150, +[View_Message] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,73,50,100,100,100,136,50,50,50,100,100,150, +[View_Signals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,50,100,100,100,50,50,50,50,100,100,150,100, +[View_ValueTables] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_AttrDefs] +HIDDEN=6, +ORDER=0,1,2,3,4,5, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,50,50,100,150, diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN2_FS_DVLogger.dbc b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN2_FS_DVLogger.dbc new file mode 100644 index 0000000..2134486 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN2_FS_DVLogger.dbc @@ -0,0 +1,93 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: ABX RES FS_Datalogger + + +BO_ 1072 FS_Datalogger_Status: 6 FS_Datalogger + SG_ Current : 32|16@1+ (64,0) [0|4194240] "mA" ABX + SG_ Voltage : 16|16@1+ (16,0) [0|1048560] "mV" ABX + SG_ Status_Triggered_Current : 11|1@1- (1,0) [0|0] "" ABX + SG_ Status_Triggered_Voltage : 10|1@1- (1,0) [0|0] "" ABX + SG_ Status_Logging : 9|1@1- (1,0) [0|0] "" ABX + SG_ Status_Ready : 8|1@1- (1,0) [0|0] "" ABX + SG_ MsgCnt : 0|8@1+ (1,0) [0|255] "" ABX + +BO_ 1298 DV_ContinuousMonitoring: 1 ABX + SG_ Pressure_charged : 5|1@1+ (1,0) [0|1] "bool" FS_Datalogger + SG_ PDU_comm_alive : 2|1@1+ (1,0) [0|1] "bool" FS_Datalogger + SG_ Position_sensors_closed : 4|1@1+ (1,0) [0|1] "bool" FS_Datalogger + SG_ AS_error : 3|1@1+ (1,0) [0|1] "bool" FS_Datalogger + SG_ AS_comm_alive : 1|1@1+ (1,0) [0|1] "bool" FS_Datalogger + SG_ SDC_opened : 0|1@1+ (1,0) [0|1] "bool" FS_Datalogger + +BO_ 1280 DV_driving_dynamics_1: 8 ABX + SG_ Speed_actual : 0|8@1+ (1,0) [0|250] "km/h" FS_Datalogger + SG_ Speed_target : 8|8@1+ (1,0) [0|250] "km/h" FS_Datalogger + SG_ Steering_angle_actual : 16|8@1- (0.5,0) [-60|60] "°" FS_Datalogger + SG_ Steering_angle_target : 24|8@1- (0.5,0) [-60|60] "°" FS_Datalogger + SG_ Brake_hydr_actual : 32|8@1+ (1,0) [0|100] "%" FS_Datalogger + SG_ Brake_hydr_target : 40|8@1+ (1,0) [0|100] "%" FS_Datalogger + SG_ Motor_moment_actual : 48|8@1- (1,0) [-100|100] "%" FS_Datalogger + SG_ Motor_moment_target : 56|8@1- (1,0) [-100|100] "%" FS_Datalogger + +BO_ 1281 DV_driving_dynamics_2: 6 ABX + SG_ Acceleration_longitudinal : 0|16@1- (0.00195313,0) [-50|50] "m/s^2" FS_Datalogger + SG_ Acceleration_lateral : 16|16@1- (0.00195313,0) [-50|50] "m/s^2" FS_Datalogger + SG_ Yaw_rate : 32|16@1- (0.0078125,0) [-200|200] "°/s" FS_Datalogger + +BO_ 1282 DV_system_status: 5 ABX + SG_ AS_state : 0|3@1+ (1,0) [1|5] "" FS_Datalogger + SG_ EBS_state : 3|2@1+ (1,0) [1|3] "" FS_Datalogger + SG_ AMI_state : 5|3@1+ (1,0) [1|6] "" FS_Datalogger + SG_ Steering_state : 8|1@1+ (1,0) [0|1] "" FS_Datalogger + SG_ Service_brake_state : 9|2@1+ (1,0) [1|3] "" FS_Datalogger + SG_ Lap_counter : 11|4@1+ (1,0) [0|10] "" FS_Datalogger + SG_ Cones_count_actual : 15|8@1+ (1,0) [0|250] "" FS_Datalogger + SG_ Cones_count_all : 23|17@1+ (1,0) [0|131000] "" FS_Datalogger + +BO_ 1297 DV_SEBSS_Pressures: 8 ABX + SG_ EBS_Pressure_tank_A : 0|16@1+ (0.1,0) [0|50] "Bar" FS_Datalogger + SG_ EBS_Pressure_tank_B : 16|16@1+ (0.1,0) [0|50] "Bar" FS_Datalogger + SG_ Brake_Pressure_front : 32|16@1+ (0.1,0) [0|200] "Bar" FS_Datalogger + SG_ Brake_Pressure_rear : 48|16@1+ (0.1,0) [0|200] "Bar" FS_Datalogger + + + +VAL_ 1282 AS_state 1 "AS_state_off" 2 "AS_state_ready" 3 "AS_state_driving" 4 "AS_state_emergency_brake" 5 "AS_state_finish" ; +VAL_ 1282 EBS_state 1 "EBS_state_unavailable" 2 "EBS_state_armed" 3 "EBS_state_activated" ; +VAL_ 1282 AMI_state 1 "AMI_state_acceleration" 2 "AMI_state_skidpad" 3 "AMI_state_trackdrive" 4 "AMI_state_braketest" 5 "AMI_state_inspection" 6 "AMI_state_autocross" ; +VAL_ 1282 Service_brake_state 1 "Service_brake_state_disengaged" 2 "Service_brake_state_engaged" 3 "Service_brake_state_available" ; + diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN2_FS_DVLogger.ini b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN2_FS_DVLogger.ini new file mode 100644 index 0000000..0d7411e --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN2_FS_DVLogger.ini @@ -0,0 +1,165 @@ +[View_Vehicles] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_Vehicle] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,250, +[View_VehicleNetworks] +HIDDEN=3, +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,100,150, +[View_VehicleNetwork] +HIDDEN= +ORDER=0,1,2,3,4, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,250,150, +[View_VehicleNetworkTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,100,150, +[View_VehicleNetworkSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,100,50,100,100,100,50,50,50,50,100,100,150, +[View_VehicleControlUnit] +HIDDEN= +ORDER=0,1,2,3,4, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,250,150, +[View_VehicleGateways] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,250,100, +[View_VehicleGatewaySignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6, +DEFINITIONS= +COLUMNWIDTHS=250,250,250,250,250,250,250, +[View_Networks] +HIDDEN=2, +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,150, +[View_Network] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,150, +[View_NetworkTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,100,150, +[View_NetworkTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,100,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NetworkNodeGroup] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,150, +[View_Ecus] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_Ecu] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,150, +[View_EnvVars] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,50,50,50,50,100,100,150, +[View_EnvVar] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,100,50,50,50,50,100,100,150, +[View_NodeGroups] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_NodeGroup] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,150, +[View_Nodes] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,150, +[View_Node] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,150, +[View_NodeTxMsg] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeRxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,250,50,100,100,100,50,50,50,50,100,100,150, +[View_NodeRxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,250,50,100,100,100,50,50,50,50,100,100,150, +[View_Messages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7, +DEFINITIONS= +COLUMNWIDTHS=250,55,100,50,100,100,100,150, +[View_Message] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150, +[View_Signals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,50,100,100,100,50,50,50,50,100,100,150,100, +[View_ValueTables] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_AttrDefs] +HIDDEN=6, +ORDER=0,1,2,3,4,5, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,50,50,100,150, diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN4-FSGDatalogger.dbc b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN4-FSGDatalogger.dbc new file mode 100644 index 0000000..01e3147 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN4-FSGDatalogger.dbc @@ -0,0 +1,76 @@ +VERSION "created by canmatrix" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: ABX FSG_Logger RES + + +BO_ 1280 DV_driving_dynamics_1: 8 ABX + SG_ Speed_actual : 0|8@1+ (1,0) [0|250] "km/h" FSG_Logger + SG_ Speed_target : 8|8@1+ (1,0) [0|250] "km/h" FSG_Logger + SG_ Steering_angle_actual : 16|8@1- (0.5,0) [-60|60] "°" FSG_Logger + SG_ Steering_angle_target : 24|8@1- (0.5,0) [-60|60] "°" FSG_Logger + SG_ Brake_hydr_actual : 32|8@1+ (1,0) [0|100] "%" FSG_Logger + SG_ Brake_hydr_target : 40|8@1+ (1,0) [0|100] "%" FSG_Logger + SG_ Motor_moment_actual : 48|8@1- (1,0) [-100|100] "%" FSG_Logger + SG_ Motor_moment_target : 56|8@1- (1,0) [-100|100] "%" FSG_Logger + +BO_ 1281 DV_driving_dynamics_2: 6 ABX + SG_ Acceleration_longitudinal : 0|16@1- (0.00195313,0) [-50|50] "m/s^2" FSG_Logger + SG_ Acceleration_lateral : 16|16@1- (0.00195313,0) [-50|50] "m/s^2" FSG_Logger + SG_ Yaw_rate : 32|16@1- (0.0078125,0) [-200|200] "°/s" FSG_Logger + +BO_ 1282 DV_system_status: 5 ABX + SG_ AS_state : 0|3@1+ (1,0) [1|5] "" FSG_Logger + SG_ EBS_state : 3|2@1+ (1,0) [1|3] "" FSG_Logger + SG_ AMI_state : 5|3@1+ (1,0) [1|6] "" FSG_Logger + SG_ Steering_state : 8|1@1+ (1,0) [0|1] "" FSG_Logger + SG_ Service_brake_state : 9|2@1+ (1,0) [1|3] "" FSG_Logger + SG_ Lap_counter : 11|4@1+ (1,0) [0|10] "" FSG_Logger + SG_ Cones_count_actual : 15|8@1+ (1,0) [0|250] "" FSG_Logger + SG_ Cones_count_all : 23|17@1+ (1,0) [0|131000] "" FSG_Logger + +BO_ 1297 DV_SEBSS_Pressures: 8 ABX + SG_ EBS_Pressure_tank_A : 0|16@1+ (0.1,0) [0|50] "Bar" FSG_Logger + SG_ EBS_Pressure_tank_B : 16|16@1+ (0.1,0) [0|50] "Bar" FSG_Logger + SG_ Brake_Pressure_front : 32|16@1+ (0.1,0) [0|200] "Bar" FSG_Logger + SG_ Brake_Pressure_rear : 48|16@1+ (0.1,0) [0|200] "Bar" FSG_Logger + + + +VAL_ 1282 AS_state 1 "AS_state_off" 2 "AS_state_ready" 3 "AS_state_driving" 4 "AS_state_emergency_brake" 5 "AS_state_finish" ; +VAL_ 1282 EBS_state 1 "EBS_state_unavailable" 2 "EBS_state_armed" 3 "EBS_state_activated" ; +VAL_ 1282 AMI_state 1 "AMI_state_acceleration" 2 "AMI_state_skidpad" 3 "AMI_state_trackdrive" 4 "AMI_state_braketest" 5 "AMI_state_inspection" 6 "AMI_state_autocross" ; +VAL_ 1282 Service_brake_state 1 "Service_brake_state_disengaged" 2 "Service_brake_state_engaged" 3 "Service_brake_state_available" ; + diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN4-FSGDatalogger.ini b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN4-FSGDatalogger.ini new file mode 100644 index 0000000..0d7411e --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN4-FSGDatalogger.ini @@ -0,0 +1,165 @@ +[View_Vehicles] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_Vehicle] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,250, +[View_VehicleNetworks] +HIDDEN=3, +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,100,150, +[View_VehicleNetwork] +HIDDEN= +ORDER=0,1,2,3,4, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,250,150, +[View_VehicleNetworkTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,100,150, +[View_VehicleNetworkSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,100,50,100,100,100,50,50,50,50,100,100,150, +[View_VehicleControlUnit] +HIDDEN= +ORDER=0,1,2,3,4, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,250,150, +[View_VehicleGateways] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,250,100, +[View_VehicleGatewaySignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6, +DEFINITIONS= +COLUMNWIDTHS=250,250,250,250,250,250,250, +[View_Networks] +HIDDEN=2, +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,150, +[View_Network] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,150, +[View_NetworkTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,100,150, +[View_NetworkTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,100,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NetworkNodeGroup] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,150, +[View_Ecus] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_Ecu] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,150, +[View_EnvVars] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,50,50,50,50,100,100,150, +[View_EnvVar] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,100,50,50,50,50,100,100,150, +[View_NodeGroups] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_NodeGroup] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,150, +[View_Nodes] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,150, +[View_Node] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,150, +[View_NodeTxMsg] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeRxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,250,50,100,100,100,50,50,50,50,100,100,150, +[View_NodeRxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,250,50,100,100,100,50,50,50,50,100,100,150, +[View_Messages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7, +DEFINITIONS= +COLUMNWIDTHS=250,55,100,50,100,100,100,150, +[View_Message] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150, +[View_Signals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,50,100,100,100,50,50,50,50,100,100,150,100, +[View_ValueTables] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_AttrDefs] +HIDDEN=6, +ORDER=0,1,2,3,4,5, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,50,50,100,150, diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN4_FS_DVLogger_RES.dbc b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN4_FS_DVLogger_RES.dbc new file mode 100644 index 0000000..9324854 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN4_FS_DVLogger_RES.dbc @@ -0,0 +1,104 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: ABX RES FS_Datalogger + + +BO_ 401 RES_PDO: 7 RES + SG_ RES_Signal_Strength : 48|8@1+ (1,0) [0|100] "%" Vector__XXX + SG_ RES_Switch : 1|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ RES_Go_Signal : 2|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ RES_EStop : 0|1@1+ (1,0) [0|1] "" Vector__XXX + +BO_ 0 NMT_Operational: 2 Vector__XXX + SG_ NMT_Node_ID : 8|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ NMT_Command : 0|1@1+ (1,0) [0|1] "" Vector__XXX + +BO_ 1072 FS_Datalogger_Status: 6 FS_Datalogger + SG_ Current : 32|16@1+ (64,0) [0|4194240] "mA" ABX + SG_ Voltage : 16|16@1+ (16,0) [0|1048560] "mV" ABX + SG_ Status_Triggered_Current : 11|1@1- (1,0) [0|0] "" ABX + SG_ Status_Triggered_Voltage : 10|1@1- (1,0) [0|0] "" ABX + SG_ Status_Logging : 9|1@1- (1,0) [0|0] "" ABX + SG_ Status_Ready : 8|1@1- (1,0) [0|0] "" ABX + SG_ MsgCnt : 0|8@1+ (1,0) [0|255] "" ABX + +BO_ 1298 DV_ContinuousMonitoring: 1 ABX + SG_ Pressure_charged : 5|1@1+ (1,0) [0|1] "bool" FS_Datalogger + SG_ PDU_comm_alive : 2|1@1+ (1,0) [0|1] "bool" FS_Datalogger + SG_ Position_sensors_closed : 4|1@1+ (1,0) [0|1] "bool" FS_Datalogger + SG_ AS_error : 3|1@1+ (1,0) [0|1] "bool" FS_Datalogger + SG_ AS_comm_alive : 1|1@1+ (1,0) [0|1] "bool" FS_Datalogger + SG_ SDC_opened : 0|1@1+ (1,0) [0|1] "bool" FS_Datalogger + +BO_ 1280 DV_driving_dynamics_1: 8 ABX + SG_ Speed_actual : 0|8@1+ (1,0) [0|250] "km/h" FS_Datalogger + SG_ Speed_target : 8|8@1+ (1,0) [0|250] "km/h" FS_Datalogger + SG_ Steering_angle_actual : 16|8@1- (0.5,0) [-60|60] "°" FS_Datalogger + SG_ Steering_angle_target : 24|8@1- (0.5,0) [-60|60] "°" FS_Datalogger + SG_ Brake_hydr_actual : 32|8@1+ (1,0) [0|100] "%" FS_Datalogger + SG_ Brake_hydr_target : 40|8@1+ (1,0) [0|100] "%" FS_Datalogger + SG_ Motor_moment_actual : 48|8@1- (1,0) [-100|100] "%" FS_Datalogger + SG_ Motor_moment_target : 56|8@1- (1,0) [-100|100] "%" FS_Datalogger + +BO_ 1281 DV_driving_dynamics_2: 6 ABX + SG_ Acceleration_longitudinal : 0|16@1- (0.00195313,0) [-50|50] "m/s^2" FS_Datalogger + SG_ Acceleration_lateral : 16|16@1- (0.00195313,0) [-50|50] "m/s^2" FS_Datalogger + SG_ Yaw_rate : 32|16@1- (0.0078125,0) [-200|200] "°/s" FS_Datalogger + +BO_ 1282 DV_system_status: 5 ABX + SG_ AS_state : 0|3@1+ (1,0) [1|5] "" FS_Datalogger + SG_ EBS_state : 3|2@1+ (1,0) [1|3] "" FS_Datalogger + SG_ AMI_state : 5|3@1+ (1,0) [1|6] "" FS_Datalogger + SG_ Steering_state : 8|1@1+ (1,0) [0|1] "" FS_Datalogger + SG_ Service_brake_state : 9|2@1+ (1,0) [1|3] "" FS_Datalogger + SG_ Lap_counter : 11|4@1+ (1,0) [0|10] "" FS_Datalogger + SG_ Cones_count_actual : 15|8@1+ (1,0) [0|250] "" FS_Datalogger + SG_ Cones_count_all : 23|17@1+ (1,0) [0|131000] "" FS_Datalogger + +BO_ 1297 DV_SEBSS_Pressures: 8 ABX + SG_ EBS_Pressure_tank_A : 0|16@1+ (0.1,0) [0|50] "Bar" FS_Datalogger + SG_ EBS_Pressure_tank_B : 16|16@1+ (0.1,0) [0|50] "Bar" FS_Datalogger + SG_ Brake_Pressure_front : 32|16@1+ (0.1,0) [0|200] "Bar" FS_Datalogger + SG_ Brake_Pressure_rear : 48|16@1+ (0.1,0) [0|200] "Bar" FS_Datalogger + + + +CM_ SG_ 0 NMT_Node_ID "Needs to be 17 for RES"; +VAL_ 1282 AS_state 1 "AS_state_off" 2 "AS_state_ready" 3 "AS_state_driving" 4 "AS_state_emergency_brake" 5 "AS_state_finish" ; +VAL_ 1282 EBS_state 1 "EBS_state_unavailable" 2 "EBS_state_armed" 3 "EBS_state_activated" ; +VAL_ 1282 AMI_state 1 "AMI_state_acceleration" 2 "AMI_state_skidpad" 3 "AMI_state_trackdrive" 4 "AMI_state_braketest" 5 "AMI_state_inspection" 6 "AMI_state_autocross" ; +VAL_ 1282 Service_brake_state 1 "Service_brake_state_disengaged" 2 "Service_brake_state_engaged" 3 "Service_brake_state_available" ; + diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN4_FS_DVLogger_RES.ini b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN4_FS_DVLogger_RES.ini new file mode 100644 index 0000000..0d7411e --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT23/CAN4_FS_DVLogger_RES.ini @@ -0,0 +1,165 @@ +[View_Vehicles] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_Vehicle] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,250, +[View_VehicleNetworks] +HIDDEN=3, +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,100,150, +[View_VehicleNetwork] +HIDDEN= +ORDER=0,1,2,3,4, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,250,150, +[View_VehicleNetworkTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,100,150, +[View_VehicleNetworkSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,100,50,100,100,100,50,50,50,50,100,100,150, +[View_VehicleControlUnit] +HIDDEN= +ORDER=0,1,2,3,4, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,250,150, +[View_VehicleGateways] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,250,100, +[View_VehicleGatewaySignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6, +DEFINITIONS= +COLUMNWIDTHS=250,250,250,250,250,250,250, +[View_Networks] +HIDDEN=2, +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,150, +[View_Network] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,150, +[View_NetworkTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,100,150, +[View_NetworkTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,100,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NetworkNodeGroup] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,150, +[View_Ecus] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_Ecu] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,150, +[View_EnvVars] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,50,50,50,50,100,100,150, +[View_EnvVar] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,100,50,50,50,50,100,100,150, +[View_NodeGroups] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_NodeGroup] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,150, +[View_Nodes] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=250,100,150, +[View_Node] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7, +DEFINITIONS= +COLUMNWIDTHS=250,250,55,100,50,100,100,150, +[View_NodeTxMsg] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeRxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150,-1, +[View_NodeTxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,250,50,100,100,100,50,50,50,50,100,100,150, +[View_NodeRxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,250,50,100,100,100,50,50,50,50,100,100,150, +[View_Messages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7, +DEFINITIONS= +COLUMNWIDTHS=250,55,100,50,100,100,100,150, +[View_Message] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS= +COLUMNWIDTHS=250,250,100,50,50,100,100,100,50,50,50,50,100,100,150, +[View_Signals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=250,50,100,100,100,50,50,50,50,100,100,150,100, +[View_ValueTables] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=250,150, +[View_AttrDefs] +HIDDEN=6, +ORDER=0,1,2,3,4,5, +DEFINITIONS= +COLUMNWIDTHS=250,100,100,50,50,100,150, diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT24/CAN1MainFT24.dbc b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT24/CAN1MainFT24.dbc new file mode 100644 index 0000000..b8c88af --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT24/CAN1MainFT24.dbc @@ -0,0 +1,2218 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: VN200 PG ACU SSU TTS_RL TTS_RR TTS_FR TTS_FL Shunt AMS ABX SDCL PDU PDMV STW EPSC + + +BO_ 2147483648 VECTOR__INDEPENDENT_SIG_MSG: 0 Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + SG_ PDU_mode_valve_1_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_sensorbox_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_led3_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_led2_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_led1_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_mode_valve_1_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_sensorbox_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 0|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 0|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 0|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PG_Errorbit : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TTS_NewID : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ PG_ready : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ PG_active : 0|1@1+ (1,0) [0|255] "" Vector__XXX + SG_ AMS_Slave9_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_FailedSensors : 0|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave9_V16 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V15 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V14 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V13 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V12 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V11 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V10 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V9 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V8 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V7 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V6 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V5 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V4 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V3 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V2 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V1 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V0 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_FailedSensors : 0|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave8_V16 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V15 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V14 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V13 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V12 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V11 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V10 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V9 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V8 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V7 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V6 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V5 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V4 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V3 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V2 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V1 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V0 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 0|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 0|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 0|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 0|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 0|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 0|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 0|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 0|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 0|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_Slave11_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_FailedSensors : 0|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave11_V16 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave11_V15 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave11_V14 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave11_V13 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave11_V12 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave11_V9 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave11_V8 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave11_V11 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave11_V10 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave11_V7 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave11_V6 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave11_V5 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave11_V4 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave11_V3 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave11_V2 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave11_V1 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave11_V0 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_FailedSensors : 0|32@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave10_V16 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V15 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V14 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V13 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V12 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V9 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V8 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V11 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V10 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V7 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V6 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V5 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V4 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V3 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V2 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V1 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V0 : 0|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave0_V3 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V2 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V1 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V0 : 0|16@0+ (0.001,0) [0|6.5535] "mV" Vector__XXX + SG_ AMS_Slave0_V7 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V6 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V5 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V4 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V11 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V10 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V9 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V8 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V15 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V14 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V13 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V12 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_FailedSensors : 0|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave0_V16 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_V3 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V2 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V1 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V0 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V7 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V6 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V5 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V4 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V11 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V10 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V9 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V8 : 0|16@0+ (0.001,0) [0|65.535] "V" Vector__XXX + SG_ AMS_Slave1_V15 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V14 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V13 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V12 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_FailedSensors : 0|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave1_V16 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_V3 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V2 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V1 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V0 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V7 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V6 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V5 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V4 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V11 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V10 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V9 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V8 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V15 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V14 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V13 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V12 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_FailedSensors : 0|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave2_V16 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_V3 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V2 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V1 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V0 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V7 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V6 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V5 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V4 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V11 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V10 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V9 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V8 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V15 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V14 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V13 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V12 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_FailedSensors : 0|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave3_V16 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_V3 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V2 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V1 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V0 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V7 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V6 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V5 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V4 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V11 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V10 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V9 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V8 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V15 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V14 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V13 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V12 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_FailedSensors : 0|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave4_V16 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_V3 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V2 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V1 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V0 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V7 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V6 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V5 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V4 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V11 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V10 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V9 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V8 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V15 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V14 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V13 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V12 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_FailedSensors : 0|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave5_V16 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_V3 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V2 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V1 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V0 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V7 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V6 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V5 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V4 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V11 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V10 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V9 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V8 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V15 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V14 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V13 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V12 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_FailedSensors : 0|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave6_V16 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_V1 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V3 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V2 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V0 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V7 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V6 : 0|16@0+ (0.001,0) [0|65.535] "V" Vector__XXX + SG_ AMS_Slave7_V5 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V4 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V11 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V10 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V9 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V8 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V15 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V14 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V13 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V12 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_FailedSensors : 0|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave7_V16 : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 206 PDU_Voltages: 2 PDU + SG_ LV_Voltage : 7|16@0+ (0.001,0) [0|20] "V" Vector__XXX + +BO_ 1283 PG_TX_Details: 4 PG + SG_ PGE_Voltage_Cell12 m12 : 15|16@0- (0.001,0) [0|10] "V" ABX + SG_ PGE_Voltage_Cell11 m11 : 15|16@0- (0.001,0) [0|10] "V" ABX + SG_ PGE_Voltage_Cell10 m10 : 15|16@0- (0.001,0) [0|10] "V" ABX + SG_ PGE_Voltage_Cell09 m9 : 15|16@0- (0.001,0) [0|10] "V" ABX + SG_ PGE_Voltage_Cell08 m8 : 15|16@0- (0.001,0) [0|10] "V" ABX + SG_ PGE_Voltage_Cell07 m7 : 15|16@0- (0.001,0) [0|10] "V" ABX + SG_ PGE_Voltage_Cell06 m6 : 15|16@0- (0.001,0) [0|10] "V" ABX + SG_ PGE_Voltage_Cell05 m5 : 15|16@0- (0.001,0) [0|10] "V" ABX + SG_ PGE_Voltage_Cell04 m4 : 15|16@0- (0.001,0) [0|10] "V" ABX + SG_ PGE_Voltage_Cell03 m3 : 15|16@0- (0.001,0) [0|10] "V" ABX + SG_ PGE_Voltage_Cell02 m2 : 15|16@0- (0.001,0) [0|10] "V" ABX + SG_ PGE_Voltage_Cell01 m1 : 15|16@0- (0.001,0) [0|10] "V" ABX + SG_ PGE_Temperature_Cell12 m12 : 24|8@1- (1,0) [0|100] "degC" Vector__XXX + SG_ PGE_Temperature_Cell11 m11 : 24|8@1- (1,0) [0|100] "degC" Vector__XXX + SG_ PGE_Temperature_Cell10 m10 : 24|8@1- (1,0) [0|100] "degC" Vector__XXX + SG_ PGE_Temperature_Cell09 m9 : 24|8@1- (1,0) [0|100] "degC" Vector__XXX + SG_ PGE_Temperature_Cell08 m8 : 24|8@1- (1,0) [0|100] "degC" Vector__XXX + SG_ PGE_Temperature_Cell07 m7 : 24|8@1- (1,0) [0|100] "degC" Vector__XXX + SG_ PGE_Temperature_Cell06 m6 : 24|8@1- (1,0) [0|100] "degC" Vector__XXX + SG_ PGE_Temperature_Cell05 m5 : 24|8@1- (1,0) [0|100] "degC" Vector__XXX + SG_ PGE_Temperature_Cell04 m4 : 24|8@1- (1,0) [0|100] "degC" Vector__XXX + SG_ PGE_Temperature_Cell03 m3 : 24|8@1- (1,0) [0|100] "degC" Vector__XXX + SG_ PGE_Temperature_Cell02 m2 : 24|8@1- (1,0) [0|100] "degC" Vector__XXX + SG_ PGE_Temperature_Cell01 m1 : 24|8@1- (1,0) [0|100] "degC" Vector__XXX + SG_ PGE_Temperature_Cell00 m0 : 24|8@1- (1,0) [0|100] "degC" Vector__XXX + SG_ PGE_Voltage_Cell00 m0 : 15|16@0- (0.001,0) [0|10] "V" ABX + SG_ PGE_Cell_ID M : 0|8@1+ (1,0) [0|12] "" Vector__XXX + +BO_ 1720 AMS_Slave11_Log8: 8 Vector__XXX + SG_ AMS_SlaveID_T31 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T30 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T29 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T28 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T27 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T26 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T25 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T24 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1704 AMS_Slave10_Log8: 8 Vector__XXX + SG_ AMS_SlaveID_T31 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T30 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T29 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T28 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T27 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T26 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T25 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T24 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1688 AMS_Slave9_Log8: 8 Vector__XXX + SG_ AMS_SlaveID_T31 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T30 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T29 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T28 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T27 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T26 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T25 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T24 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1672 AMS_Slave8_Log8: 8 Vector__XXX + SG_ AMS_SlaveID_T31 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T30 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T29 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T28 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T27 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T26 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T25 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T24 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1656 AMS_Slave7_Log8: 8 Vector__XXX + SG_ AMS_SlaveID_T31 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T30 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T29 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T28 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T27 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T26 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T25 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T24 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1640 AMS_Slave6_Log8: 8 Vector__XXX + SG_ AMS_SlaveID_T31 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T30 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T29 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T28 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T27 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T26 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T25 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T24 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1624 AMS_Slave5_Log8: 8 Vector__XXX + SG_ AMS_SlaveID_T31 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T30 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T29 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T28 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T27 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T26 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T25 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T24 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1608 AMS_Slave4_Log8: 8 Vector__XXX + SG_ AMS_SlaveID_T31 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T30 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T29 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T28 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T27 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T26 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T25 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T24 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1592 AMS_Slave3_Log8: 8 Vector__XXX + SG_ AMS_SlaveID_T31 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T30 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T29 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T28 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T27 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T26 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T25 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T24 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1576 AMS_Slave2_Log8: 8 Vector__XXX + SG_ AMS_SlaveID_T31 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T30 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T29 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T28 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T27 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T26 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T25 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T24 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1560 AMS_Slave1_Log8: 8 Vector__XXX + SG_ AMS_SlaveID_T31 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T30 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T29 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T28 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T27 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T26 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T25 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T24 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1718 AMS_Slave11_Log6: 8 Vector__XXX + SG_ AMS_SlaveID_T15 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T14 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T13 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T12 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T11 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T10 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T9 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T8 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1702 AMS_Slave10_Log6: 8 Vector__XXX + SG_ AMS_SlaveID_T15 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T14 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T13 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T12 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T11 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T10 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T9 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T8 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1686 AMS_Slave9_Log6: 8 Vector__XXX + SG_ AMS_SlaveID_T15 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T14 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T13 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T12 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T11 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T10 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T9 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T8 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1670 AMS_Slave8_Log6: 8 Vector__XXX + SG_ AMS_SlaveID_T15 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T14 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T13 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T12 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T11 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T10 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T9 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T8 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1654 AMS_Slave7_Log6: 8 Vector__XXX + SG_ AMS_SlaveID_T15 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T14 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T13 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T12 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T11 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T10 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T9 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T8 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1638 AMS_Slave6_Log6: 8 Vector__XXX + SG_ AMS_SlaveID_T15 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T14 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T13 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T12 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T11 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T10 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T9 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T8 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1622 AMS_Slave5_Log6: 8 Vector__XXX + SG_ AMS_SlaveID_T15 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T14 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T13 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T12 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T11 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T10 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T9 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T8 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1606 AMS_Slave4_Log6: 8 Vector__XXX + SG_ AMS_SlaveID_T15 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T14 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T13 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T12 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T11 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T10 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T9 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T8 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1590 AMS_Slave3_Log6: 8 Vector__XXX + SG_ AMS_SlaveID_T15 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T14 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T13 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T12 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T11 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T10 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T9 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T8 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1574 AMS_Slave2_Log6: 8 Vector__XXX + SG_ AMS_SlaveID_T15 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T14 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T13 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T12 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T11 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T10 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T9 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T8 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1558 AMS_Slave1_Log6: 8 Vector__XXX + SG_ AMS_SlaveID_T15 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T14 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T13 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T12 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T11 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T10 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T9 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T8 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1719 AMS_Slave11_Log7: 8 Vector__XXX + SG_ AMS_SlaveID_T23 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T22 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T21 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T20 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T19 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T18 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T17 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T16 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1703 AMS_Slave10_Log7: 8 Vector__XXX + SG_ AMS_SlaveID_T23 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T22 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T21 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T20 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T19 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T18 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T17 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T16 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1687 AMS_Slave9_Log7: 8 Vector__XXX + SG_ AMS_SlaveID_T23 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T22 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T21 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T20 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T19 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T18 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T17 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T16 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1671 AMS_Slave8_Log7: 8 Vector__XXX + SG_ AMS_SlaveID_T23 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T22 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T21 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T20 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T19 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T18 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T17 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T16 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1655 AMS_Slave7_Log7: 8 Vector__XXX + SG_ AMS_SlaveID_T23 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T22 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T21 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T20 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T19 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T18 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T17 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T16 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1639 AMS_Slave6_Log7: 8 Vector__XXX + SG_ AMS_SlaveID_T23 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T22 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T21 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T20 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T19 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T18 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T17 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T16 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1623 AMS_Slave5_Log7: 8 Vector__XXX + SG_ AMS_SlaveID_T23 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T22 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T21 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T20 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T19 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T18 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T17 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T16 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1607 AMS_Slave4_Log7: 8 Vector__XXX + SG_ AMS_SlaveID_T23 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T22 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T21 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T20 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T19 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T18 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T17 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T16 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1591 AMS_Slave3_Log7: 8 Vector__XXX + SG_ AMS_SlaveID_T23 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T22 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T21 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T20 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T19 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T18 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T17 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T16 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1575 AMS_Slave2_Log7: 8 Vector__XXX + SG_ AMS_SlaveID_T23 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T22 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T21 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T20 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T19 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T18 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T17 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T16 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1559 AMS_Slave1_Log7: 8 Vector__XXX + SG_ AMS_SlaveID_T23 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T22 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T21 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T20 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T19 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T18 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T17 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T16 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1717 AMS_Slave11_Log5: 8 Vector__XXX + SG_ AMS_SlaveID_T4 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T7 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T6 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T5 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T3 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T2 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T1 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T0 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1701 AMS_Slave10_Log5: 8 Vector__XXX + SG_ AMS_SlaveID_T4 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T7 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T6 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T5 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T3 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T2 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T1 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T0 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1685 AMS_Slave9_Log5: 8 Vector__XXX + SG_ AMS_SlaveID_T4 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T7 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T6 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T5 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T3 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T2 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T1 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T0 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1669 AMS_Slave8_Log5: 8 Vector__XXX + SG_ AMS_SlaveID_T4 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T7 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T6 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T5 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T3 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T2 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T1 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T0 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1653 AMS_Slave7_Log5: 8 Vector__XXX + SG_ AMS_SlaveID_T4 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T7 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T6 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T5 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T3 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T2 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T1 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T0 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1637 AMS_Slave6_Log5: 8 Vector__XXX + SG_ AMS_SlaveID_T4 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T7 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T6 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T5 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T3 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T2 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T1 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T0 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1621 AMS_Slave5_Log5: 8 Vector__XXX + SG_ AMS_SlaveID_T4 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T7 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T6 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T5 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T3 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T2 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T1 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T0 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1605 AMS_Slave4_Log5: 8 Vector__XXX + SG_ AMS_SlaveID_T4 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T7 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T6 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T5 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T3 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T2 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T1 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T0 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1589 AMS_Slave3_Log5: 8 Vector__XXX + SG_ AMS_SlaveID_T4 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T7 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T6 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T5 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T3 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T2 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T1 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T0 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1573 AMS_Slave2_Log5: 8 Vector__XXX + SG_ AMS_SlaveID_T4 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T7 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T6 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T5 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T3 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T2 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T1 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T0 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1557 AMS_Slave1_Log5: 8 Vector__XXX + SG_ AMS_SlaveID_T4 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T7 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T6 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T5 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T3 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T2 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T1 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T0 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1716 AMS_Slave11_Log4: 6 Vector__XXX + SG_ AMS_SlaveID_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1700 AMS_Slave10_Log4: 6 Vector__XXX + SG_ AMS_SlaveID_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1684 AMS_Slave9_Log4: 6 Vector__XXX + SG_ AMS_SlaveID_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1668 AMS_Slave8_Log4: 6 Vector__XXX + SG_ AMS_SlaveID_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1652 AMS_Slave7_Log4: 6 Vector__XXX + SG_ AMS_SlaveID_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1636 AMS_Slave6_Log4: 6 Vector__XXX + SG_ AMS_SlaveID_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1620 AMS_Slave5_Log4: 6 Vector__XXX + SG_ AMS_SlaveID_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1604 AMS_Slave4_Log4: 6 Vector__XXX + SG_ AMS_SlaveID_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1588 AMS_Slave3_Log4: 6 Vector__XXX + SG_ AMS_SlaveID_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1572 AMS_Slave2_Log4: 6 Vector__XXX + SG_ AMS_SlaveID_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1556 AMS_Slave1_Log4: 6 Vector__XXX + SG_ AMS_SlaveID_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1715 AMS_Slave11_Log3: 8 Vector__XXX + SG_ AMS_SlaveID_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1699 AMS_Slave10_Log3: 8 Vector__XXX + SG_ AMS_SlaveID_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1683 AMS_Slave9_Log3: 8 Vector__XXX + SG_ AMS_SlaveID_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1667 AMS_Slave8_Log3: 8 Vector__XXX + SG_ AMS_SlaveID_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1651 AMS_Slave7_Log3: 8 Vector__XXX + SG_ AMS_SlaveID_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1635 AMS_Slave6_Log3: 8 Vector__XXX + SG_ AMS_SlaveID_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1619 AMS_Slave5_Log3: 8 Vector__XXX + SG_ AMS_SlaveID_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1603 AMS_Slave4_Log3: 8 Vector__XXX + SG_ AMS_SlaveID_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1587 AMS_Slave3_Log3: 8 Vector__XXX + SG_ AMS_SlaveID_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1571 AMS_Slave2_Log3: 8 Vector__XXX + SG_ AMS_SlaveID_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1555 AMS_Slave1_Log3: 8 Vector__XXX + SG_ AMS_SlaveID_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1714 AMS_Slave11_Log2: 8 Vector__XXX + SG_ AMS_SlaveID_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1698 AMS_Slave10_Log2: 8 Vector__XXX + SG_ AMS_SlaveID_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1682 AMS_Slave9_Log2: 8 Vector__XXX + SG_ AMS_SlaveID_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1666 AMS_Slave8_Log2: 8 Vector__XXX + SG_ AMS_SlaveID_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1650 AMS_Slave7_Log2: 8 Vector__XXX + SG_ AMS_SlaveID_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1634 AMS_Slave6_Log2: 8 Vector__XXX + SG_ AMS_SlaveID_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1618 AMS_Slave5_Log2: 8 Vector__XXX + SG_ AMS_SlaveID_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1602 AMS_Slave4_Log2: 8 Vector__XXX + SG_ AMS_SlaveID_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1586 AMS_Slave3_Log2: 8 Vector__XXX + SG_ AMS_SlaveID_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1570 AMS_Slave2_Log2: 8 Vector__XXX + SG_ AMS_SlaveID_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1554 AMS_Slave1_Log2: 8 Vector__XXX + SG_ AMS_SlaveID_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1713 AMS_Slave11_Log1: 8 Vector__XXX + SG_ AMS_SlaveID_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1697 AMS_Slave10_Log1: 8 Vector__XXX + SG_ AMS_SlaveID_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1681 AMS_Slave9_Log1: 8 Vector__XXX + SG_ AMS_SlaveID_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1665 AMS_Slave8_Log1: 8 Vector__XXX + SG_ AMS_SlaveID_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1649 AMS_Slave7_Log1: 8 Vector__XXX + SG_ AMS_SlaveID_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1633 AMS_Slave6_Log1: 8 Vector__XXX + SG_ AMS_SlaveID_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1617 AMS_Slave5_Log1: 8 Vector__XXX + SG_ AMS_SlaveID_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1601 AMS_Slave4_Log1: 8 Vector__XXX + SG_ AMS_SlaveID_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1585 AMS_Slave3_Log1: 8 Vector__XXX + SG_ AMS_SlaveID_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1569 AMS_Slave2_Log1: 8 Vector__XXX + SG_ AMS_SlaveID_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1553 AMS_Slave1_Log1: 8 Vector__XXX + SG_ AMS_SlaveID_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1712 AMS_Slave11_Log0: 8 Vector__XXX + SG_ AMS_SlaveID_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1696 AMS_Slave10_Log0: 8 Vector__XXX + SG_ AMS_SlaveID_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1680 AMS_Slave9_Log0: 8 Vector__XXX + SG_ AMS_SlaveID_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1664 AMS_Slave8_Log0: 8 Vector__XXX + SG_ AMS_SlaveID_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1648 AMS_Slave7_Log0: 8 Vector__XXX + SG_ AMS_SlaveID_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1632 AMS_Slave6_Log0: 8 Vector__XXX + SG_ AMS_SlaveID_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1616 AMS_Slave5_Log0: 8 Vector__XXX + SG_ AMS_SlaveID_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1600 AMS_Slave4_Log0: 8 Vector__XXX + SG_ AMS_SlaveID_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1584 AMS_Slave3_Log0: 8 Vector__XXX + SG_ AMS_SlaveID_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1568 AMS_Slave2_Log0: 8 Vector__XXX + SG_ AMS_SlaveID_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1552 AMS_Slave1_Log0: 8 Vector__XXX + SG_ AMS_SlaveID_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1722 AMS_Slave11_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1706 AMS_Slave10_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1690 AMS_Slave9_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1674 AMS_Slave8_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1658 AMS_Slave7_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1642 AMS_Slave6_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1626 AMS_Slave5_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1610 AMS_Slave4_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1594 AMS_Slave3_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1578 AMS_Slave2_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1562 AMS_Slave1_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1721 AMS_Slave11_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1705 AMS_Slave10_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1689 AMS_Slave9_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1673 AMS_Slave8_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1657 AMS_Slave7_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1641 AMS_Slave6_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1625 AMS_Slave5_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1609 AMS_Slave4_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1593 AMS_Slave3_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1577 AMS_Slave2_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1561 AMS_Slave1_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1546 AMS_Slave0_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1545 AMS_Slave0_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 199 PDU_Heartbeat: 1 ABX + SG_ PDU_Heartbeat : 0|1@1- (1,0) [0|0] "" Vector__XXX + +BO_ 5 VN200_GNSS_LL: 8 VN200 + SG_ Latitude : 0|16@1- (0.005,0) [-163.84|163.835] "" VN200 + SG_ Longitude : 16|16@1- (0.05,0) [-1638.4|1638.35] "" VN200 + SG_ UncertaintyN : 32|16@1+ (0.0001,0) [0|6.5535] "" VN200 + SG_ UncertaintyE : 48|16@1+ (0.0001,0) [0|6.5535] "" VN200 + +BO_ 1 VN200_IMU_ACC_ANG: 8 VN200 + SG_ AccAngZ : 40|20@1- (0.0001,0) [-52.4288|52.4287] "" VN200 + SG_ AccAngY : 20|20@1- (0.0001,0) [-52.4288|52.4287] "" VN200 + SG_ AccAngX : 0|20@1- (0.0001,0) [0|0] "" VN200 + +BO_ 2 VN200_IMU_ACC_LIN: 8 VN200 + SG_ AccLinZ : 40|20@1- (0.0001,0) [-52.4288|52.4287] "" VN200 + SG_ AccLinY : 20|20@1- (0.0001,0) [-52.4288|52.4287] "" VN200 + SG_ AccLinX : 0|20@1- (0.0001,0) [-52.4288|52.4287] "" VN200 + +BO_ 17 VN200_INS_LL: 8 VN200 + SG_ UncertaintyN : 32|16@1+ (0.0001,0) [0|6.5535] "" VN200 + SG_ UncertaintyE : 48|16@1+ (0.001,0) [0|65.535] "" VN200 + SG_ Longitude : 16|16@1- (0.05,0) [-1638.4|1638.35] "" VN200 + SG_ Latitude : 0|16@1- (0.005,0) [-163.84|163.835] "" VN200 + +BO_ 50 VN200_INS_VEL: 8 VN200 + SG_ VelLinZ : 32|16@1+ (0.001,0) [0|0] "" VN200 + SG_ VelLinY : 16|16@1+ (0.001,0) [0|65.535] "" VN200 + SG_ VelLinX : 0|16@1+ (0.001,0) [0|0] "" VN200 + SG_ Uncertainity : 48|16@1+ (0.0001,0) [0|6.5535] "" VN200 + +BO_ 6 VN200_INS_YPR: 8 VN200 + SG_ Yaw : 0|16@1- (0.001,0) [-32.768|32.767] "" Vector__XXX + SG_ Pitch : 16|16@1- (0.001,0) [-32.768|32.767] "" Vector__XXX + SG_ Roll : 32|16@1- (0.001,0) [-32.768|32.767] "" Vector__XXX + SG_ Uncertainty : 48|16@1+ (0.0001,0) [0|6.5535] "" Vector__XXX + +BO_ 136 AMS_Slave8Status: 8 Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|159.375] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + +BO_ 139 AMS_Slave11Status: 8 Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + +BO_ 138 AMS_Slave10Status: 8 Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + +BO_ 137 AMS_Slave9Status: 8 Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [-128|127] "%" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 1281 PG_RX: 2 ABX + SG_ PG_ESC_percent : 8|8@1+ (1,0) [0|100] "%_Duty_Cycle_PWM" PG + SG_ PG_command : 0|8@1+ (1,0) [0|3] "" PG + +BO_ 273 ABX_Accel: 8 ABX + SG_ ABX_Accel_Z : 32|16@1- (0.001,0) [-32.768|32.767] "" Vector__XXX + SG_ ABX_Accel_Y : 16|16@1- (0.001,0) [-32.768|32.767] "" Vector__XXX + SG_ ABX_Accel_X : 0|16@1- (0.001,0) [-32.768|32.767] "" Vector__XXX + +BO_ 272 ABX_Hydraulics: 8 ABX + SG_ ABX_Hyd_PB : 16|12@1+ (0.1,0) [0|409.5] "" Vector__XXX + SG_ ABX_Hyd_PA : 0|12@1+ (0.1,0) [0|409.5] "" Vector__XXX + +BO_ 1043 ABX_ParamConfirm: 8 ABX + SG_ ABX_ParamConfirm : 0|8@1+ (1,0) [0|255] "" Vector__XXX + +BO_ 1282 PG_TX: 8 PG + SG_ PG_inverter_voltage : 40|8@1+ (1,0) [0|100] "V" ABX + SG_ PG_temperature : 56|8@1+ (1,0) [0|255] "degC" ABX + SG_ PG_State : 0|4@1+ (1,0) [0|7] "" ABX + SG_ PG_Powerground_Status : 8|8@1+ (1,0) [0|100] "%_PWM" Vector__XXX + SG_ PG_SOC : 24|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ PG_Error_BMStimeout : 16|1@1+ (1,0) [0|1] "" ABX + SG_ PG_current_measurement : 48|8@1+ (1,0) [0|0] "A" ABX + SG_ PG_battery_voltage : 32|8@1+ (1,0) [0|100] "V" ABX + SG_ PG_Error_BMSfault : 17|1@1+ (1,0) [0|1] "" ABX + SG_ PG_Error_TemperatureError : 18|1@1+ (1,0) [0|1] "" ABX + SG_ PG_Error_CurrentError : 19|1@1+ (1,0) [0|1] "" ABX + SG_ PG_Error_CurrentSensorMissing : 20|1@1+ (1,0) [0|1] "" ABX + SG_ PG_Error_VoltageError : 21|1@1+ (1,0) [0|1] "" ABX + SG_ PG_Error_VoltageMissing : 22|1@1+ (1,0) [0|1] "" ABX + SG_ PG_Error_StateTransitionFail : 23|1@1+ (1,0) [0|1] "" ABX + +BO_ 227 ACU_TX_Commands: 8 ABX + SG_ ABX_Steering_Angle_Right : 40|8@1- (0.0156863,0) [-2.00784|1.99216] "" ACU + SG_ ABX_Steering_Angle_Left : 32|8@1- (0.0156863,0) [-2.00784|1.99216] "" ACU + SG_ ABX_Speed_RR : 24|8@1+ (0.2,0) [0|51] "" ACU + SG_ ABX_Speed_RL : 16|8@1+ (0.2,0) [0|51] "" ACU + SG_ ABX_Speed_FR : 8|8@1+ (0.2,0) [0|51] "" ACU + SG_ ABX_Speed_FL : 0|8@1+ (0.2,0) [0|51] "" ACU + +BO_ 226 ACU_RX_Commands: 8 ACU + SG_ ACU_Steering_Angle_Left : 24|8@1- (0.016,0) [-2.048|2.032] "" Vector__XXX + SG_ ACU_Steering_Angle_Right : 16|8@1- (0.016,0) [-2.048|2.032] "" Vector__XXX + SG_ ACU_Speed_Target_right : 8|8@1+ (1.2,0) [0|306] "m/s" Vector__XXX + SG_ ACU_Speed_Target_left : 0|8@1+ (1.2,0) [0|306] "" Vector__XXX + +BO_ 225 ACU_RX: 7 ACU + SG_ ACU_PG : 25|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ACU_DRS : 24|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ACU_Cones_Actual : 16|8@1+ (1,0) [0|255] "" ABX + SG_ ACU_Cones_All : 8|8@1+ (1,0) [0|255] "" ABX + SG_ ACU_Lap_Count : 4|4@1+ (1,0) [0|15] "" ABX + SG_ ACU_AS_OK : 1|1@1+ (1,0) [0|1] "Bool" ABX + SG_ ACU_AS_Mission_Complete : 0|1@1+ (1,0) [0|1] "Bool" ABX + +BO_ 1536 AMS_Slave0_Log0: 8 AMS + SG_ AMS_SlaveID_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1537 AMS_Slave0_Log1: 8 AMS + SG_ AMS_SlaveID_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1538 AMS_Slave0_Log2: 8 AMS + SG_ AMS_SlaveID_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1539 AMS_Slave0_Log3: 8 AMS + SG_ AMS_SlaveID_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveID_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1540 AMS_Slave0_Log4: 6 AMS + SG_ AMS_SlaveID_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1541 AMS_Slave0_Log5: 8 AMS + SG_ AMS_SlaveID_T4 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T7 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T6 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T5 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T3 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T2 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T1 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T0 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1542 AMS_Slave0_Log6: 8 AMS + SG_ AMS_SlaveID_T15 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T14 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T13 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T12 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T11 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T10 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T9 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T8 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1543 AMS_Slave0_Log7: 8 AMS + SG_ AMS_SlaveID_T23 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T22 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T21 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T20 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T19 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T18 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T17 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T16 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1544 AMS_Slave0_Log8: 8 AMS + SG_ AMS_SlaveID_T31 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T30 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T29 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T28 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T27 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T26 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T25 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T24 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 224 ACU_TX: 4 ABX + SG_ ABX_ConMon_Error : 10|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ ACU_AllowTorque : 8|1@1+ (1,0) [0|1] "bool" Vector__XXX + SG_ ACU_Reset : 7|1@1+ (1,0) [0|1] "bool" Vector__XXX + SG_ ACU_Power_Off : 6|1@1+ (1,0) [0|1] "bool" Vector__XXX + SG_ ACU_AS_State : 3|3@1+ (1,0) [0|5] "" ACU + SG_ ACU_AS_Mission : 0|3@1+ (1,0) [0|7] "int" ACU + +BO_ 135 AMS_Slave7Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 134 AMS_Slave6Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 133 AMS_Slave5Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 132 AMS_Slave4Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 131 AMS_Slave3Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 130 AMS_Slave2Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 129 AMS_Slave1Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_Sensor : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 265 ABX_Misc: 7 ABX + SG_ ABX_LV_SoC : 40|8@1+ (1,0) [0|100] "%" Vector__XXX + SG_ ABX_Distance_session : 8|16@1+ (1,0) [0|65535] "m" Vector__XXX + +BO_ 12 AMS_Error: 2 AMS + SG_ AMS_Error_Arg : 8|8@1- (1,0) [0|0] "" ABX + SG_ AMS_Error_Kind : 0|8@1- (1,0) [0|0] "" ABX + +BO_ 264 ABX_CoolingSys_Internal: 8 ABX + SG_ ABX_CS_T_MotR : 48|16@1+ (0.01,0) [0|655.35] "degC" Vector__XXX + SG_ ABX_CS_T_MotL : 32|16@1+ (0.01,0) [0|655.35] "degC" Vector__XXX + SG_ ABX_CS_T_InvR : 16|16@1+ (0.01,0) [0|655.35] "degC" Vector__XXX + SG_ ABX_CS_T_InvL : 0|16@1+ (0.01,0) [0|655.35] "degC" Vector__XXX + +BO_ 263 ABX_CoolingSys_MotInv: 8 ABX + SG_ ABX_CS_P_MotRIn : 24|8@1+ (0.02,0) [0|4] "bar" Vector__XXX + SG_ ABX_CS_T_MotIn : 42|10@1+ (0.1,0) [0|102.3] "degC" Vector__XXX + SG_ ABX_CS_T_InvIn : 32|10@1+ (0.1,0) [0|102.3] "degC" Vector__XXX + SG_ ABX_CS_P_MotLIn : 8|8@1+ (0.02,0) [0|4] "bar" Vector__XXX + SG_ ABX_CS_P_InvIn : 0|8@1+ (0.02,0) [0|4] "bar" Vector__XXX + +BO_ 261 ABX_BrakeT: 8 ABX + SG_ ABX_BrakeT_RR : 48|16@1+ (0.01,0) [0|655.35] "degC" Vector__XXX + SG_ ABX_BrakeT_RL : 32|16@1+ (0.01,0) [0|655.35] "degC" Vector__XXX + SG_ ABX_BrakeT_FR : 16|16@1+ (0.01,0) [0|655.35] "degC" Vector__XXX + SG_ ABX_BrakeT_FL : 0|16@1+ (0.01,0) [0|655.35] "degC" Vector__XXX + +BO_ 260 ABX_Wheelspeed: 8 ABX + SG_ ABX_Wheelspeed_RR : 48|16@1- (0.001,0) [-32.768|32.767] "1/s" Vector__XXX + SG_ ABX_Wheelspeed_RL : 32|16@1- (0.001,0) [-32.768|32.767] "1/s" Vector__XXX + SG_ ABX_Wheelspeed_FR : 16|16@1- (0.001,0) [-32.768|32.767] "1/s" Vector__XXX + SG_ ABX_Wheelspeed_FL : 0|16@1- (0.001,0) [-32.768|32.767] "1/s" Vector__XXX + +BO_ 259 ABX_Dampers: 8 ABX + SG_ ABX_Damper_RR : 48|16@1+ (0.01,0) [0|75] "mm" Vector__XXX + SG_ ABX_Damper_FR : 16|16@1+ (0.01,0) [0|75] "mm" Vector__XXX + SG_ ABX_Damper_RL : 32|16@1+ (0.01,0) [0|75] "mm" Vector__XXX + SG_ ABX_Damper_FL : 0|16@1+ (0.01,0) [0|75] "mm" Vector__XXX + +BO_ 258 ABX_Timings: 8 ABX + SG_ ABX_Sectortime_last : 48|16@1+ (0.01,0) [0|655.35] "s" Vector__XXX + SG_ ABX_Sectortime_best : 32|16@1+ (0.01,0) [0|655.35] "s" Vector__XXX + SG_ ABX_Laptime_last : 16|16@1+ (0.01,0) [0|655.35] "s" Vector__XXX + SG_ ABX_Laptime_best : 0|16@1+ (0.01,0) [0|655.35] "s" Vector__XXX + +BO_ 257 ABX_Driver: 8 ABX + SG_ ABX_BrakeP_R : 20|12@1+ (0.1,0) [0|160] "bar" Vector__XXX + SG_ ABX_Sectorcounter : 56|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ ABX_Lapcounter : 48|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ ABX_Steering_Angle : 32|8@1- (1,0) [-128|127] "" Vector__XXX + SG_ ABX_Speed : 40|8@1+ (0.2,0) [0|51] "m/s" Vector__XXX + SG_ ABX_BrakeP_F : 8|12@1+ (0.1,0) [0|160] "bar" Vector__XXX + SG_ ABX_APPS_percent : 0|8@1+ (1,0) [0|100] "%" Vector__XXX + +BO_ 1796 TTS_RR: 8 TTS_RR + SG_ TTS_Status : 60|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ TTS_OutetRight : 48|12@1+ (0.1,0) [-54.8|354.7] "degC" Vector__XXX + SG_ TTS_OuterLeft : 0|12@1+ (0.1,0) [-54.8|354.7] "degC" Vector__XXX + SG_ TTS_CenterRight : 36|12@1+ (0.1,0) [-54.8|354.7] "degC" Vector__XXX + SG_ TTS_CenterLeft : 12|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_Center : 24|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + +BO_ 1795 TTS_RL: 8 TTS_RL + SG_ TTS_Status : 60|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ TTS_OuterLeft : 0|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_OuterRight : 48|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_CenterRight : 36|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_CenterLeft : 12|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_Center : 24|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + +BO_ 1794 TTS_FR: 8 TTS_FR + SG_ TTS_Status : 60|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ TTS_OuterRight : 48|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_OuterLeft : 0|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_CenterLeft : 12|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_CenterRight : 36|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_Center : 24|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + +BO_ 1793 TTS_FL: 8 TTS_FL + SG_ TTS_Status : 60|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ TTS_OuterLeft : 0|12@1+ (0.1,0) [-54.8|354.7] "degC" Vector__XXX + SG_ TTS_OuterRight : 48|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_CenterRight : 36|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_CenterLeft : 12|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_Center : 24|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + +BO_ 1026 STW_Param_Set: 5 STW + SG_ STW_Param_Plim m0 : 15|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ STW_Param_Type M : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ STW_Param_Tlim m1 : 15|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_TVec m3 : 15|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_PG m4 : 15|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_Reku m5 : 15|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_Test2 m6 : 15|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_Test3 m7 : 15|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_Test4 m8 : 15|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_Slim m2 : 15|32@0+ (1,0) [0|1] "" Vector__XXX + +BO_ 128 AMS_Slave0Status: 8 AMS + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [-128|127] "%" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 1280 SSU_Message: 4 SSU + SG_ SSU_AirTemp : 16|16@1- (0.1,0) [-20|80] "degC" Vector__XXX + SG_ SSU_AirPressure : 0|16@1- (1,0) [-1000|1000] "Pa" Vector__XXX + +BO_ 10 AMS_Status: 8 AMS + SG_ AMS_IMD_State : 48|7@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_IMD_ok : 55|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_State : 0|7@1+ (1,0) [0|1] "" ABX + SG_ SDC_Closed : 7|1@1+ (1,0) [0|1] "" ABX + SG_ SOC : 8|8@1+ (1,0) [0|100] "%" ABX + SG_ Min_cell_volt : 23|16@0+ (0.001,0) [0|65.535] "V" ABX + SG_ Max_cell_temp : 39|16@0+ (0.0625,0) [0|4095.94] "degC" ABX + +BO_ 9 AMS_SlavePanic: 8 AMS + SG_ AMS_SlavePanic_Kind : 15|8@0+ (1,0) [0|7.20576E+016] "" ABX + SG_ AMS_SlavePanic_SlaveID : 0|8@1+ (1,0) [0|255] "" ABX + SG_ AMS_SlavePanic_Arg : 23|32@0+ (1,0) [0|7.20576E+016] "" ABX + +BO_ 11 AMS_In: 1 ABX + SG_ TS_activate : 0|1@1+ (1,0) [0|1] "" AMS + SG_ Lap_Number : 2|6@1+ (1,0) [0|64] "Laps" AMS + SG_ Inverters_discharged : 1|1@1+ (1,0) [0|1] "" AMS + +BO_ 1313 Shunt_Current: 6 Shunt + SG_ Shunt_Current : 23|32@0- (0.001,0) [-2000000|2000000] "A" AMS + +BO_ 1314 Shunt_Voltage1: 6 Shunt + SG_ Shunt_Voltage1 : 23|32@0- (0.001,0) [-2000000|2000000] "V" AMS + +BO_ 1315 Shunt_Voltage2: 6 Shunt + SG_ Shunt_Voltage2 : 23|32@0- (0.001,0) [-2000000|2000000] "V" AMS + +BO_ 1316 Shunt_Voltage3: 6 Shunt + SG_ Shunt_Voltage3 : 23|32@0- (0.001,0) [-2000000|2000000] "V" AMS + +BO_ 1317 Shunt_Temperature: 6 Shunt + SG_ Shunt_Temperature : 23|32@0+ (0.1,0) [0|1000] "degC" ABX + +BO_ 16 SDCL_tx: 4 SDCL + SG_ asms_state : 0|1@1+ (1,0) [0|1] "" ABX + SG_ sdc_state_1 : 1|1@1+ (1,0) [0|1] "" ABX + SG_ sdc_state_2 : 2|1@1+ (1,0) [0|1] "" ABX + SG_ sdc_state_3 : 3|1@1+ (1,0) [0|1] "" ABX + SG_ heartbeat_ok : 4|1@1+ (1,0) [0|1] "" ABX + SG_ sdcl_sdc_ready : 5|1@1+ (1,0) [0|1] "" ABX + SG_ ts_start_muxed : 6|1@1+ (1,0) [0|1] "" ABX + SG_ latch_init_open : 8|1@1+ (1,0) [0|1] "" ABX + SG_ latch_closed : 9|1@1+ (1,0) [0|1] "" ABX + SG_ latch_reopened : 10|1@1+ (1,0) [0|1] "" ABX + SG_ as_mission : 11|3@1+ (1,0) [0|7] "" ABX + +BO_ 15 SDCL_rx: 3 ABX + SG_ as_close_sdc : 0|1@1+ (1,0) [0|1] "" SDCL + SG_ sdcl_heartbeat : 1|1@1+ (1,0) [0|1] "" SDCL + SG_ asb_error : 2|1@1+ (1,0) [0|1] "" SDCL + SG_ as_mission : 4|3@1+ (1,0) [0|7] "" SDCL + +BO_ 200 PDU_Command: 7 ABX + SG_ PDU_servos_regler_rx : 2|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_lidar_rx : 5|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_ACU_rx : 3|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_PWM_radiator_fans_rx : 23|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_servo_rx : 14|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_misc_rx : 15|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_alwayson_rx : 7|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_shutdown_circuit_rx : 6|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_ebs_valve_2_rx : 12|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_cs_valve_rx : 11|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_inverter_rx : 1|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_steering_rx : 8|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_ebs_valve_1_rx : 13|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_aggregat_rx : 9|1@0+ (1,0) [0|1] "" PDU + SG_ PDU_PWM_TSAC_fans_rx : 31|8@0+ (1,0) [0|255] "" PDU + SG_ PDU_PWM_aggregat_rx : 39|8@0+ (1,0) [0|255] "" PDU + SG_ PDU_PWM_pump_rx : 47|8@0+ (1,0) [0|255] "" PDU + SG_ PDU_checksum_rx : 55|8@0+ (1,0) [0|255] "" PDU + +BO_ 201 PDU_Response: 7 PDU + SG_ PDU_ebs_valve_2_tx : 12|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_PWM_TSAC_fans : 23|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_servos_regler_tx : 2|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_ACU_tx : 3|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_lidar_tx : 5|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_servo_tx : 14|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_misc_tx : 15|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_alwayson_tx : 7|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_shutdown_circuit_tx : 6|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_aggregat_tx : 9|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_inverter_tx : 1|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_steering_tx : 8|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_ebs_valve_1_tx : 13|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_cs_valve_tx : 11|1@0+ (1,0) [0|1] "" ABX + SG_ PDU_PWM_radiatot_fans_tx : 31|8@0+ (1,0) [0|255] "" ABX + SG_ PDU_PWM_aggregat : 39|8@0+ (1,0) [0|255] "" ABX + SG_ PDU_PWM_pump : 47|8@0+ (1,0) [0|255] "" ABX + SG_ PDU_heartbeat_ok_tx : 55|8@0+ (1,0) [0|255] "" ABX + +BO_ 514 TxPDO: 6 ABX + SG_ pdm_output2_shortcircuit : 21|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_output1_shortcircuit : 20|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_output2_cablebreak : 19|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_output1_cablebreak : 18|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_output2_controllerrange : 17|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_output1_controllerrange : 16|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_temperature_shutdown : 13|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_temperature_warning : 12|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_analoginput_currentoverload : 11|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_analoginput_shortcircuit : 10|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_analoginput_cablebreak : 9|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_analoginput_middleposition : 8|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_canbus_statewarning : 5|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_canbus_startupmissing : 4|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_canbus_timeout : 3|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_powersupply_greater_32v : 2|1@1+ (1,0) [0|1] "" ABX + SG_ pdm_powersupply_less_8v : 1|1@1+ (1,0) [0|1] "" ABX + SG_ PDM_analoginput : 32|16@1+ (1,0) [0|65535] "%." ABX + +BO_ 1040 AS_Mission_fb: 1 ABX + SG_ Mission_selection : 0|3@1+ (1,0) [1|7] "" STW + +BO_ 1024 STW_mission_selected: 1 STW + SG_ Mission_selection : 0|3@1+ (1,0) [1|7] "" ABX + +BO_ 801 EPSC_out: 8 EPSC + SG_ EPSC_measured_steering_angle : 7|16@0- (7.20721E-005,0) [-13875|13875] "part of full steering" ABX + SG_ EPSC_measured_rpm : 39|12@0- (0.1,0) [-204.8|204.7] "rpm" ABX + SG_ EPSC_measured_current : 23|8@0+ (0.1,0) [0|25.5] "A" ABX + SG_ EPSC_measured_voltage : 31|8@0+ (0.1,0) [0|20] "V" ABX + SG_ EPSC_measured_temperature : 43|10@0+ (0.1,0) [0|102.3] "degC" ABX + SG_ EPSC_measured_internal_temp : 49|10@0+ (0.1,0) [0|102.3] "degC" ABX + +BO_ 291 EPSC_Steering_In: 2 ABX + SG_ EPSC_desired_steering_angle : 7|16@0- (0.0001,0) [-10000|10000] "" EPSC + +BO_ 1025 STW_buttons: 1 STW + SG_ STW_button_DRS : 4|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ STW_button_Enter : 3|1@1+ (1,0) [0|1] "" ABX + SG_ STW_button_PG : 2|1@1+ (1,0) [0|1] "" ABX + SG_ STW_button_Reku : 1|1@1+ (1,0) [0|1] "" ABX + SG_ STW_button_TV : 0|1@1+ (1,0) [0|1] "" ABX + +BO_ 1042 STW_status: 6 ABX + SG_ InvL_ready : 8|1@1+ (1,0) [0|0] "" STW + SG_ iniChk_state : 24|8@1+ (1,0) [0|255] "" STW + SG_ InvR_ready : 9|1@1+ (1,0) [0|0] "" STW + SG_ AS_State_STW : 0|3@1+ (1,0) [0|5] "" Vector__XXX + SG_ SDC_BFL : 10|1@1+ (1,0) [0|0] "" STW + SG_ SDC_BRL : 11|1@1+ (1,0) [0|0] "" STW + SG_ SDC_ACC : 12|1@1+ (1,0) [0|0] "" STW + SG_ SDC_HVB : 13|1@1+ (1,0) [0|0] "" STW + SG_ Lap_Count : 16|6@1+ (1,0) [0|64] "" STW + SG_ ERR_SDC : 32|1@1+ (1,0) [0|1] "" STW + SG_ ERR_AMS : 33|1@1+ (1,0) [0|1] "" STW + SG_ ERR_InvL : 43|1@1+ (1,0) [0|1] "" STW + SG_ ERR_InvR : 44|1@1+ (1,0) [0|1] "" STW + SG_ ERR_IniChk : 35|1@1+ (1,0) [0|1] "" STW + SG_ ERR_ConMon : 36|1@1+ (1,0) [0|1] "" STW + SG_ ERR_SCS : 37|1@1+ (1,0) [0|1] "" STW + SG_ ERR_sBSPD : 38|1@1+ (1,0) [0|1] "" STW + SG_ ERR_APPSp : 39|1@1+ (1,0) [0|1] "" STW + SG_ ERR_AS : 40|1@1+ (1,0) [0|1] "" STW + SG_ ERR_ROS : 41|1@1+ (1,0) [0|1] "" STW + SG_ ERR_RES : 42|1@1+ (1,0) [0|1] "" STW + SG_ ERR_PDU : 34|1@1+ (1,0) [0|1] "" STW + SG_ R2D_Progress : 4|4@1+ (1,0) [0|15] "" STW + +BO_ 202 PDU_Current_1: 8 PDU + SG_ PDU_alwayson_curr : 7|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_misc_curr : 23|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_inverter_curr : 39|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_shutdown_circuit_curr : 55|16@0+ (1,0) [0|65535] "" ABX + +BO_ 203 PDU_Current_2: 8 PDU + SG_ PDU_tsac__fans_curr : 7|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_pump_curr : 23|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_aggregat_curr : 39|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_steering_curr : 55|16@0+ (1,0) [0|65535] "" ABX + +BO_ 204 PDU_Current_3: 8 PDU + SG_ PDU_ebs_valve_1_curr : 7|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_ebs_valve_2_curr : 23|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_mode_cs_valve_curr : 39|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_mode_gss_curr : 55|16@0+ (1,0) [0|65535] "" ABX + +BO_ 205 PDU_Current_4: 8 PDU + SG_ PDU_radiator_fans_curr : 7|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_ACU_curr : 23|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_servos_curr : 39|16@0+ (1,0) [0|65535] "" ABX + SG_ PDU_lidar_curr : 55|16@0+ (1,0) [0|65535] "" ABX + +BO_ 292 EPSC_Config_In: 7 ABX + SG_ EPSC_Ki_curr m1 : 55|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_Kp_curr m1 : 47|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_Ki_rpm m1 : 39|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_Kp_rpm m1 : 31|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_Ki_pos m1 : 23|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_Kp_pos m1 : 15|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_should_calibrate : 7|1@0- (1,0) [0|1] "" Vector__XXX + SG_ EPSC_should_change_mode M : 6|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_mode m1 : 5|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_flag3 : 4|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_flag4 : 3|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_flag5 : 2|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_flag6 : 1|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_flag7 : 0|1@0+ (1,0) [0|1] "" Vector__XXX + + + +CM_ BO_ 225 "Cycle Time: 100ms"; +CM_ BO_ 224 "Cycle Time: 50ms"; +CM_ SG_ 224 ACU_AS_Mission "AS Mission Selection"; +CM_ BO_ 265 "Cycle time: 1s"; +CM_ BO_ 264 "Cycle time: 100ms"; +CM_ BO_ 263 "Cycle time: 100ms"; +CM_ BO_ 261 "Cycle time: 100ms"; +CM_ BO_ 260 "Cycle time: 10ms"; +CM_ BO_ 259 "Cycle time: 10ms"; +CM_ BO_ 258 "Cycle time: 1s"; +CM_ SG_ 801 EPSC_measured_steering_angle "+-13875 equals to +-1.0, so the factor is 1/13875"; +VAL_ 1281 PG_command 0 "PG_INACTIVE" 1 "PG_READY" 2 "PG_ACTIVE" 15 "PG_CHARGING" ; +VAL_ 1282 PG_State 0 "PG_INACTIVE" 1 "PG_PRECHARGE" 2 "PG_READY" 3 "PG_ACTIVE" 4 "PG_DISCHARGE" 5 "PG_CHARGING_PRECHARGE" 6 "PG_CHARGING" 7 "PG_ERROR" ; +VAL_ 12 AMS_Error_Kind 5 "Shunt Overtemperature" 4 "Shunt Overcurrent" 3 "Shunt Timeout" 2 "Slave Panic" 1 "Slave Timeout" 0 "None" ; +VAL_ 1026 STW_Param_Type 0 "BrakeBalance" 1 "TractionControl1" 2 "TractionControl2" 3 "TorqueMap" 4 "Test1" 5 "Test2" 6 "Test3" 7 "Test4" ; +VAL_ 1026 STW_Param_PG 0 "OFF" 1 "ON" ; +VAL_ 10 AMS_State 0 "TS_INACTIVE" 1 "TS_ACTIVE" 2 "TS_PRECHARGE" 3 "TS_DISCHARGE" 4 "TS_ERROR" ; +VAL_ 9 AMS_SlavePanic_Kind 0 "Overtemperature" 1 "Undertemperature" 2 "Overvoltage" 3 "Undervoltage" 4 "Too_few_working_temperature_sensors" 5 "Open_cell_connection" ; +VAL_ 1040 Mission_selection 1 "MissionSelection_acceleration" 2 "MissionSelection_skidpad" 3 "MissionSelection_trackdrive" 4 "MissionSelection_braketest" 5 "MissionSelection_inspection" 6 "MissionSelection_autocross" 7 "MissionSelection_manual" ; +VAL_ 1024 Mission_selection 1 "MissionSelection_acceleration" 2 "MissionSelection_skidpad" 3 "MissionSelection_trackdrive" 4 "MissionSelection_braketest" 5 "MissionSelection_inspection" 6 "MissionSelection_autocross" 7 "MissionSelection_manual" ; +VAL_ 1042 iniChk_state 0 "Start" 1 "WD_Check" 2 "WD_OK" 3 "ASB_Check_1" 4 "ASB_Check_2" 5 "Wait_TS" 6 "EBS_Check_A" 7 "EBS_Check_B" 8 "Done" 9 "Error" ; +VAL_ 1042 AS_State_STW 0 "AS_Off" 1 "AS_Manual" 2 "AS_Ready" 3 "AS_Driving" 4 "AS_Finished" 5 "AS_Emergency" ; +VAL_ 1042 R2D_Progress 0 "R2D_None" 1 "R2D_TSMS" 2 "R2D_TSActive" 3 "R2D_Resetting_Nodes" 4 "R2D_Resetting_Comms" 5 "R2D_Waiting_Init" 6 "R2D_Init_Stage1" 7 "R2D_Init_Stage2" 15 "R2D_Init_Success" ; + diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT24/CAN1_Charger.dbc b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT24/CAN1_Charger.dbc new file mode 100644 index 0000000..19bad03 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT24/CAN1_Charger.dbc @@ -0,0 +1,1434 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: VN200 PG ACU SSU TTS_RL TTS_RR TTS_FR TTS_FL Shunt AMS ABX SDCL PDU PDMV STW EPSC + + +BO_ 3221225472 VECTOR__INDEPENDENT_SIG_MSG: 0 Vector__XXX + SG_ AMS_Slave_T32 : 0|8@1- (1,0) [-128|127] "" Vector__XXX + SG_ New_Signal_712 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ New_Signal_711 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ PDU_mode_valve_1_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_sensorbox_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_led3_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_led2_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_led1_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_mode_valve_1_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_sensorbox_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 0|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 0|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 0|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PG_Errorbit : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TTS_NewID : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ PG_ready : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ PG_active : 0|1@1+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_Heartbeat : 0|1@1- (1,0) [0|0] "" Vector__XXX + SG_ Latitude : 0|16@1- (0.005,0) [-163.84|163.835] "" Vector__XXX + SG_ Longitude : 0|16@1- (0.05,0) [-1638.4|1638.35] "" Vector__XXX + SG_ UncertaintyN : 0|16@1+ (0.0001,0) [0|6.5535] "" Vector__XXX + SG_ UncertaintyE : 0|16@1+ (0.0001,0) [0|6.5535] "" Vector__XXX + SG_ AccAngZ : 0|20@1- (0.0001,0) [-52.4288|52.4287] "" Vector__XXX + SG_ AccAngY : 0|20@1- (0.0001,0) [-52.4288|52.4287] "" Vector__XXX + SG_ AccAngX : 0|20@1- (0.0001,0) [0|0] "" Vector__XXX + SG_ AccLinZ : 0|20@1- (0.0001,0) [-52.4288|52.4287] "" Vector__XXX + SG_ AccLinY : 0|20@1- (0.0001,0) [-52.4288|52.4287] "" Vector__XXX + SG_ AccLinX : 0|20@1- (0.0001,0) [-52.4288|52.4287] "" Vector__XXX + SG_ UncertaintyN : 0|16@1+ (0.0001,0) [0|6.5535] "" Vector__XXX + SG_ UncertaintyE : 0|16@1+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ Longitude : 0|16@1- (0.05,0) [-1638.4|1638.35] "" Vector__XXX + SG_ Latitude : 0|16@1- (0.005,0) [-163.84|163.835] "" Vector__XXX + SG_ VelLinZ : 0|16@1+ (0.001,0) [0|0] "" Vector__XXX + SG_ VelLinY : 0|16@1+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ VelLinX : 0|16@1+ (0.001,0) [0|0] "" Vector__XXX + SG_ Uncertainity : 0|16@1+ (0.0001,0) [0|6.5535] "" Vector__XXX + SG_ Yaw : 0|16@1- (0.001,0) [-32.768|32.767] "" Vector__XXX + SG_ Pitch : 0|16@1- (0.001,0) [-32.768|32.767] "" Vector__XXX + SG_ Roll : 0|16@1- (0.001,0) [-32.768|32.767] "" Vector__XXX + SG_ Uncertainty : 0|16@1+ (0.0001,0) [0|6.5535] "" Vector__XXX + SG_ AMS_Slave9_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 0|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 0|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 0|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 0|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 0|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 0|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 0|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 0|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 0|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_Slave11_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ PG_percent : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PG_state : 0|8@1+ (1,0) [0|3] "" Vector__XXX + SG_ ABX_Accel_Z : 0|16@1- (0.001,0) [-32.768|32.767] "" Vector__XXX + SG_ ABX_Accel_Y : 0|16@1- (0.001,0) [-32.768|32.767] "" Vector__XXX + SG_ ABX_Accel_X : 0|16@1- (0.001,0) [-32.768|32.767] "" Vector__XXX + SG_ ABX_Hyd_PB : 0|12@1+ (0.1,0) [0|409.5] "" Vector__XXX + SG_ ABX_Hyd_PA : 0|12@1+ (0.1,0) [0|409.5] "" Vector__XXX + SG_ ABX_ParamConfirm : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PG_inverter_voltage : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PG_temperature : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PG_State : 0|3@1+ (1,0) [0|7] "" Vector__XXX + SG_ PG_Powerground_Status : 0|8@1+ (1,0) [0|100] "" Vector__XXX + SG_ PG_SOC : 0|12@1+ (1,0) [0|0] "" Vector__XXX + SG_ PG_Error : 0|8@1+ (1,0) [0|100] "" Vector__XXX + SG_ PG_current_measurement : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ PG_battery_voltage : 0|8@1+ (1,0) [0|4095] "" Vector__XXX + SG_ ABX_Steering_Angle_Right : 0|8@1- (0.0156862745,0) [-2.007843136|1.9921568615] "" Vector__XXX + SG_ ABX_Steering_Angle_Left : 0|8@1- (0.0156862745,0) [-2.007843136|1.9921568615] "" Vector__XXX + SG_ ABX_Speed_RR : 0|8@1+ (0.2,0) [0|51] "" Vector__XXX + SG_ ABX_Speed_RL : 0|8@1+ (0.2,0) [0|51] "" Vector__XXX + SG_ ABX_Speed_FR : 0|8@1+ (0.2,0) [0|51] "" Vector__XXX + SG_ ABX_Speed_FL : 0|8@1+ (0.2,0) [0|51] "" Vector__XXX + SG_ ACU_Steering_Angle_Left : 0|8@1- (0.0156862745,0) [-2.007843136|1.9921568615] "" Vector__XXX + SG_ ACU_Steering_Angle_Right : 0|8@1- (0.0156862745,0) [-2.007843136|1.9921568615] "" Vector__XXX + SG_ ACU_Speed_Target_right : 0|8@1+ (1.2,0) [0|306] "m/s" Vector__XXX + SG_ ACU_Speed_Target_left : 0|8@1+ (1.2,0) [0|306] "" Vector__XXX + SG_ ACU_PG : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ACU_DRS : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ACU_Cones_Actual : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ ACU_Cones_All : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ ACU_Lap_Count : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ ACU_AS_OK : 0|1@1+ (1,0) [0|1] "Bool" Vector__XXX + SG_ ACU_AS_Mission_Complete : 0|1@1+ (1,0) [0|1] "Bool" Vector__XXX + SG_ AMS_Slave0_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ ABX_ConMon_Error : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ ACU_AllowTorque : 0|1@1+ (1,0) [0|1] "bool" Vector__XXX + SG_ ACU_Reset : 0|1@1+ (1,0) [0|1] "bool" Vector__XXX + SG_ ACU_Power_Off : 0|1@1+ (1,0) [0|1] "bool" Vector__XXX + SG_ ACU_AS_State : 0|3@1+ (1,0) [0|5] "" Vector__XXX + SG_ ACU_AS_Mission : 0|3@1+ (1,0) [0|7] "int" Vector__XXX + SG_ ABX_LV_SoC : 0|8@1+ (1,0) [0|100] "%" Vector__XXX + SG_ ABX_Distance_total : 0|16@1+ (0.01,0) [0|655.35] "km" Vector__XXX + SG_ ABX_Distance_session : 0|16@1+ (1,0) [0|65535] "m" Vector__XXX + SG_ ABX_CS_T_MotR : 0|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_CS_T_MotL : 0|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_CS_T_InvR : 0|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_CS_T_InvL : 0|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_CS_P_MotRIn : 0|8@1+ (0.02,0) [0|4] "bar" Vector__XXX + SG_ ABX_CS_T_MotIn : 0|10@1+ (0.1,0) [0|102.3] "�C" Vector__XXX + SG_ ABX_CS_T_InvIn : 0|10@1+ (0.1,0) [0|102.3] "�C" Vector__XXX + SG_ ABX_CS_P_MotLIn : 0|8@1+ (0.02,0) [0|4] "bar" Vector__XXX + SG_ ABX_CS_P_InvIn : 0|8@1+ (0.02,0) [0|4] "bar" Vector__XXX + SG_ ABX_BrakeT_RR : 0|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_BrakeT_RL : 0|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_BrakeT_FR : 0|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_BrakeT_FL : 0|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_Wheelspeed_RR : 0|16@1- (0.001,0) [-32.768|32.767] "1/s" Vector__XXX + SG_ ABX_Wheelspeed_RL : 0|16@1- (0.001,0) [-32.768|32.767] "1/s" Vector__XXX + SG_ ABX_Wheelspeed_FR : 0|16@1- (0.001,0) [-32.768|32.767] "1/s" Vector__XXX + SG_ ABX_Wheelspeed_FL : 0|16@1- (0.001,0) [-32.768|32.767] "1/s" Vector__XXX + SG_ ABX_Damper_RR : 0|16@1+ (0.01,0) [0|75] "mm" Vector__XXX + SG_ ABX_Damper_FR : 0|16@1+ (0.01,0) [0|75] "mm" Vector__XXX + SG_ ABX_Damper_RL : 0|16@1+ (0.01,0) [0|75] "mm" Vector__XXX + SG_ ABX_Damper_FL : 0|16@1+ (0.01,0) [0|75] "mm" Vector__XXX + SG_ ABX_Sectortime_last : 0|16@1+ (0.01,0) [0|655.35] "s" Vector__XXX + SG_ ABX_Sectortime_best : 0|16@1+ (0.01,0) [0|655.35] "s" Vector__XXX + SG_ ABX_Laptime_last : 0|16@1+ (0.01,0) [0|655.35] "s" Vector__XXX + SG_ ABX_Laptime_best : 0|16@1+ (0.01,0) [0|655.35] "s" Vector__XXX + SG_ ABX_BrakeP_R : 0|12@1+ (0.1,0) [0|160] "bar" Vector__XXX + SG_ ABX_Sectorcounter : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ ABX_Lapcounter : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ ABX_Steering_Angle : 0|8@1- (1,0) [-128|127] "" Vector__XXX + SG_ ABX_Speed : 0|8@1+ (0.2,0) [0|51] "m/s" Vector__XXX + SG_ ABX_BrakeP_F : 0|12@1+ (0.1,0) [0|160] "bar" Vector__XXX + SG_ ABX_APPS_percent : 0|8@1+ (1,0) [0|100] "%" Vector__XXX + SG_ TTS_Status : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ TTS_OutetRight : 0|12@1+ (0.1,0) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_OuterLeft : 0|12@1+ (0.1,0) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_CenterRight : 0|12@1+ (0.1,0) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_CenterLeft : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_Center : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_Status : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ TTS_OuterLeft : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_OuterRight : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_CenterRight : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_CenterLeft : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_Center : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_Status : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ TTS_OuterRight : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_OuterLeft : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_CenterLeft : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_CenterRight : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_Center : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_Status : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ TTS_OuterLeft : 0|12@1+ (0.1,0) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_OuterRight : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_CenterRight : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_CenterLeft : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_Center : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ STW_Param_BBal : 0|32@0+ (0.1,0) [0|0] "" Vector__XXX + SG_ STW_Param_Type : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ STW_Param_SLIPREF : 0|32@0+ (0.01,0) [0|1] "" Vector__XXX + SG_ STW_Param_ASRP : 0|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_ASRON : 0|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_ASRI : 0|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_EnduPowerLimit : 0|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_Test3 : 0|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_Test4 : 0|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_MUMAX : 0|32@0+ (0.1,0) [0|1] "" Vector__XXX + SG_ SSU_AirTemp : 0|16@1- (0.1,0) [-20|80] "�C" Vector__XXX + SG_ SSU_AirPressure : 0|16@1- (1,0) [-1000|1000] "Pa" Vector__XXX + SG_ asms_state : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ sdc_state_1 : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ sdc_state_2 : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ sdc_state_3 : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ heartbeat_ok : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ sdcl_sdc_ready : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ts_start_muxed : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ latch_init_open : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ latch_closed : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ latch_reopened : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ as_mission : 0|3@1+ (1,0) [0|7] "" Vector__XXX + SG_ as_close_sdc : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ sdcl_heartbeat : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ asb_error : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ as_mission : 0|3@1+ (1,0) [0|7] "" Vector__XXX + SG_ PDU_servos_regler_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_lidar_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_ACU_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_PWM_radiator_fans_rx : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_servo_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_misc_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_alwayson_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_shutdown_circuit_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_ebs_valve_2_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_cs_valve_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_inverter_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_steering_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_ebs_valve_1_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_aggregat_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_PWM_TSAC_fans_rx : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_PWM_aggregat_rx : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_PWM_pump_rx : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_checksum_rx : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_ebs_valve_2_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_PWM_TSAC_fans : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_servos_regler_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_ACU_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_lidar_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_servo_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_misc_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_alwayson_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_shutdown_circuit_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_aggregat_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_inverter_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_steering_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_ebs_valve_1_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_cs_valve_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_PWM_radiatot_fans_tx : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_PWM_aggregat : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_PWM_pump : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_checksum_tx : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ pdm_output2_shortcircuit : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_output1_shortcircuit : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_output2_cablebreak : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_output1_cablebreak : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_output2_controllerrange : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_output1_controllerrange : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_temperature_shutdown : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_temperature_warning : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_analoginput_currentoverload : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_analoginput_shortcircuit : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_analoginput_cablebreak : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_analoginput_middleposition : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_canbus_statewarning : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_canbus_startupmissing : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_canbus_timeout : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_powersupply_greater_32v : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_powersupply_less_8v : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ PDM_analoginput : 0|16@1+ (1,0) [0|65535] "%." Vector__XXX + SG_ Mission_selection : 0|3@1+ (1,0) [1|7] "" Vector__XXX + SG_ Mission_selection : 0|3@1+ (1,0) [1|7] "" Vector__XXX + SG_ EPSC_measured_steering_angle : 0|16@0- (7.20721E-005,0) [-13875|13875] "part of full steering" Vector__XXX + SG_ EPSC_measured_rpm : 0|12@0- (0.1,0) [-204.8|204.7] "rpm" Vector__XXX + SG_ EPSC_measured_current : 0|8@0+ (0.1,0) [0|25.5] "A" Vector__XXX + SG_ EPSC_measured_voltage : 0|8@0+ (0.1,0) [0|20] "V" Vector__XXX + SG_ EPSC_measured_temperature : 0|10@0+ (0.1,0) [0|102.3] "°C" Vector__XXX + SG_ EPSC_measured_internal_temp : 0|10@0+ (0.1,0) [0|102.3] "°C" Vector__XXX + SG_ EPSC_desired_steering_angle : 0|16@0- (0.0001,0) [-10000|10000] "" Vector__XXX + SG_ STW_button_PG : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ STW_button_left : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ STW_button_right : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ STW_button_DRS : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ STW_button_Enter : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ InvL_ready : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ iniChk_state : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ InvR_ready : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AS_State_STW : 0|3@1+ (1,0) [0|5] "" Vector__XXX + SG_ SDC_BFL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SDC_BRL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SDC_ACC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SDC_HVB : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Lap_Count : 0|6@1+ (1,0) [0|64] "" Vector__XXX + SG_ ERR_SDC : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_AMS : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_InvL : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_InvR : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_IniChk : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_ConMon : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_SCS : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_sBSPD : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_APPSp : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_AS : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_ROS : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_RES : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_PDU : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ R2D_Progress : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ PDU_alwayson_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_misc_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_inverter_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_shutdown_circuit_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_tsac__fans_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_pump_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_aggregat_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_steering_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_ebs_valve_1_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_ebs_valve_2_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_mode_cs_valve_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_mode_gss_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_radiator_fans_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_ACU_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_servos_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_lidar_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ EPSC_Ki_curr : 0|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_Kp_curr : 0|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_Ki_rpm : 0|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_Kp_rpm : 0|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_Ki_pos : 0|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_Kp_pos : 0|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_should_calibrate : 0|1@0- (1,0) [0|1] "" Vector__XXX + SG_ EPSC_should_change_mode : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_mode : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_flag3 : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_flag4 : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_flag5 : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_flag6 : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_flag7 : 0|1@0+ (1,0) [0|1] "" Vector__XXX + +BO_ 140 AMS_Slave12Status1: 8 Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + +BO_ 1737 AMS_Slave12_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1732 AMS_Slave12_Log4: 8 Vector__XXX + SG_ AMS_Slave12_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave12_V16 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1731 AMS_Slave12_Log3: 8 Vector__XXX + SG_ AMS_Slave12_V15 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V14 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V13 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V12 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1730 AMS_Slave12_Log2: 8 Vector__XXX + SG_ AMS_Slave12_V9 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V8 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V11 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V10 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1738 AMS_Slave12_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1729 AMS_Slave12_Log1: 8 Vector__XXX + SG_ AMS_Slave12_V7 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V6 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V5 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V4 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1728 AMS_Slave12_Log0: 8 Vector__XXX + SG_ AMS_Slave12_V3 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V2 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V1 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V0 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1722 AMS_Slave11_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1706 AMS_Slave10_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1690 AMS_Slave9_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1674 AMS_Slave8_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1658 AMS_Slave7_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1642 AMS_Slave6_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1626 AMS_Slave5_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1610 AMS_Slave4_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1594 AMS_Slave3_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1578 AMS_Slave2_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1562 AMS_Slave1_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1721 AMS_Slave11_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1705 AMS_Slave10_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1689 AMS_Slave9_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1673 AMS_Slave8_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1657 AMS_Slave7_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1641 AMS_Slave6_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1625 AMS_Slave5_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1609 AMS_Slave4_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1593 AMS_Slave3_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1577 AMS_Slave2_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1561 AMS_Slave1_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1546 AMS_Slave0_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1545 AMS_Slave0_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1684 AMS_Slave9_Log4: 8 Vector__XXX + SG_ AMS_Slave9_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave9_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1683 AMS_Slave9_Log3: 8 Vector__XXX + SG_ AMS_Slave9_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1682 AMS_Slave9_Log2: 8 Vector__XXX + SG_ AMS_Slave9_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1681 AMS_Slave9_Log1: 8 Vector__XXX + SG_ AMS_Slave9_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1680 AMS_Slave9_Log0: 8 Vector__XXX + SG_ AMS_Slave9_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 136 AMS_Slave8Status: 8 Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|159.375] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + +BO_ 1668 AMS_Slave8_Log4: 8 Vector__XXX + SG_ AMS_Slave8_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave8_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1667 AMS_Slave8_Log3: 8 Vector__XXX + SG_ AMS_Slave8_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1666 AMS_Slave8_Log2: 8 Vector__XXX + SG_ AMS_Slave8_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1665 AMS_Slave8_Log1: 8 Vector__XXX + SG_ AMS_Slave8_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1664 AMS_Slave8_Log0: 8 Vector__XXX + SG_ AMS_Slave8_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 139 AMS_Slave11Status: 8 Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + +BO_ 138 AMS_Slave10Status: 8 Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + +BO_ 1716 AMS_Slave11_Log4: 8 Vector__XXX + SG_ AMS_Slave12_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave12_V16 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1715 AMS_Slave11_Log3: 8 Vector__XXX + SG_ AMS_Slave12_V15 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V14 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V13 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V12 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1714 AMS_Slave11_Log2: 8 Vector__XXX + SG_ AMS_Slave12_V9 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V8 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V11 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V10 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1713 AMS_Slave11_Log1: 8 Vector__XXX + SG_ AMS_Slave12_V7 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V6 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V5 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V4 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1712 AMS_Slave11_Log0: 8 Vector__XXX + SG_ AMS_Slave12_V3 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V2 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V1 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V0 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1700 AMS_Slave10_Log4: 8 Vector__XXX + SG_ AMS_Slave10_FailedSensors : 16|32@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave10_V16 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1699 AMS_Slave10_Log3: 8 Vector__XXX + SG_ AMS_Slave10_V15 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V14 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V13 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V12 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1698 AMS_Slave10_Log2: 8 Vector__XXX + SG_ AMS_Slave10_V9 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V8 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V11 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V10 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1697 AMS_Slave10_Log1: 8 Vector__XXX + SG_ AMS_Slave10_V7 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V6 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V5 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V4 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1696 AMS_Slave10_Log0: 8 Vector__XXX + SG_ AMS_Slave10_V3 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V2 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V1 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V0 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 137 AMS_Slave9Status: 8 Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [-128|127] "%" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 1536 AMS_Slave0_Log0: 8 AMS + SG_ AMS_Slave0_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V0 : 7|16@0+ (0.001,0) [0|6.5535] "mV" Vector__XXX + +BO_ 1537 AMS_Slave0_Log1: 8 AMS + SG_ AMS_Slave0_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1538 AMS_Slave0_Log2: 8 AMS + SG_ AMS_Slave0_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1539 AMS_Slave0_Log3: 8 AMS + SG_ AMS_Slave0_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1540 AMS_Slave0_Log4: 6 AMS + SG_ AMS_Slave0_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave0_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1552 AMS_Slave1_Log0: 8 AMS + SG_ AMS_Slave1_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1553 AMS_Slave1_Log1: 8 AMS + SG_ AMS_Slave1_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1554 AMS_Slave1_Log2: 8 AMS + SG_ AMS_Slave1_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V8 : 7|16@0+ (0.001,0) [0|65.535] "V" Vector__XXX + +BO_ 1555 AMS_Slave1_Log3: 8 AMS + SG_ AMS_Slave1_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1556 AMS_Slave1_Log4: 6 AMS + SG_ AMS_Slave1_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave1_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1568 AMS_Slave2_Log0: 8 AMS + SG_ AMS_Slave2_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1569 AMS_Slave2_Log1: 8 AMS + SG_ AMS_Slave2_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1570 AMS_Slave2_Log2: 8 AMS + SG_ AMS_Slave2_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1571 AMS_Slave2_Log3: 8 AMS + SG_ AMS_Slave2_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1572 AMS_Slave2_Log4: 6 AMS + SG_ AMS_Slave2_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave2_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1584 AMS_Slave3_Log0: 8 AMS + SG_ AMS_Slave3_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1585 AMS_Slave3_Log1: 8 AMS + SG_ AMS_Slave3_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1586 AMS_Slave3_Log2: 8 AMS + SG_ AMS_Slave3_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1587 AMS_Slave3_Log3: 8 AMS + SG_ AMS_Slave3_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1588 AMS_Slave3_Log4: 6 AMS + SG_ AMS_Slave3_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave3_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1600 AMS_Slave4_Log0: 8 AMS + SG_ AMS_Slave4_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1601 AMS_Slave4_Log1: 8 AMS + SG_ AMS_Slave4_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1602 AMS_Slave4_Log2: 8 AMS + SG_ AMS_Slave4_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1603 AMS_Slave4_Log3: 8 AMS + SG_ AMS_Slave4_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1604 AMS_Slave4_Log4: 6 AMS + SG_ AMS_Slave4_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave4_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1616 AMS_Slave5_Log0: 8 AMS + SG_ AMS_Slave5_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1617 AMS_Slave5_Log1: 8 AMS + SG_ AMS_Slave5_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1618 AMS_Slave5_Log2: 8 AMS + SG_ AMS_Slave5_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1619 AMS_Slave5_Log3: 8 AMS + SG_ AMS_Slave5_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1620 AMS_Slave5_Log4: 6 AMS + SG_ AMS_Slave5_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave5_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1632 AMS_Slave6_Log0: 8 AMS + SG_ AMS_Slave6_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1633 AMS_Slave6_Log1: 8 AMS + SG_ AMS_Slave6_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1634 AMS_Slave6_Log2: 8 AMS + SG_ AMS_Slave6_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1635 AMS_Slave6_Log3: 8 AMS + SG_ AMS_Slave6_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1636 AMS_Slave6_Log4: 6 AMS + SG_ AMS_Slave6_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave6_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1648 AMS_Slave7_Log0: 8 AMS + SG_ AMS_Slave7_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1649 AMS_Slave7_Log1: 8 AMS + SG_ AMS_Slave7_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V6 : 39|16@0+ (0.001,0) [0|65.535] "V" Vector__XXX + SG_ AMS_Slave7_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1650 AMS_Slave7_Log2: 8 AMS + SG_ AMS_Slave7_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1651 AMS_Slave7_Log3: 8 AMS + SG_ AMS_Slave7_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1652 AMS_Slave7_Log4: 6 AMS + SG_ AMS_Slave7_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave7_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 135 AMS_Slave7Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 134 AMS_Slave6Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 133 AMS_Slave5Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 132 AMS_Slave4Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 131 AMS_Slave3Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 130 AMS_Slave2Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 129 AMS_Slave1Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_Sensor : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 12 AMS_Error: 2 AMS + SG_ AMS_Error_Arg : 8|8@1- (1,0) [0|0] "" ABX + SG_ AMS_Error_Kind : 0|8@1- (1,0) [0|0] "" ABX + +BO_ 128 AMS_Slave0Status: 8 AMS + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [-128|127] "%" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 10 AMS_Status: 6 AMS + SG_ AMS_State : 0|7@1+ (1,0) [0|1] "" ABX + SG_ SDC_Closed : 7|1@1+ (1,0) [0|1] "" ABX + SG_ SOC : 8|8@1+ (1,0) [0|100] "%" ABX + SG_ Min_cell_volt : 23|16@0+ (0.001,0) [0|65.535] "V" ABX + SG_ Max_cell_temp : 39|16@0+ (0.0625,0) [0|4095.94] "°C" ABX + +BO_ 9 AMS_SlavePanic: 8 AMS + SG_ AMS_SlavePanic_Kind : 15|8@0+ (1,0) [0|7.20576E+016] "" ABX + SG_ AMS_SlavePanic_SlaveID : 0|8@1+ (1,0) [0|255] "" ABX + SG_ AMS_SlavePanic_Arg : 23|32@0+ (1,0) [0|7.20576E+016] "" ABX + +BO_ 11 AMS_In: 1 ABX + SG_ TS_activate : 0|1@1+ (1,0) [0|1] "" AMS + SG_ Lap_Number : 2|6@1+ (1,0) [0|64] "Laps" AMS + SG_ Inverters_discharged : 1|1@1+ (1,0) [0|1] "" AMS + +BO_ 1313 Shunt_Current: 6 Shunt + SG_ Shunt_Current : 23|32@0- (0.001,0) [-2000000|2000000] "A" AMS + +BO_ 1314 Shunt_Voltage1: 6 Shunt + SG_ Shunt_Voltage1 : 23|32@0- (0.001,0) [-2000000|2000000] "V" AMS + +BO_ 1315 Shunt_Voltage2: 6 Shunt + SG_ Shunt_Voltage2 : 23|32@0- (0.001,0) [-2000000|2000000] "V" AMS + +BO_ 1316 Shunt_Voltage3: 6 Shunt + SG_ Shunt_Voltage3 : 23|32@0- (0.001,0) [-2000000|2000000] "V" AMS + +BO_ 1317 Shunt_Temperature: 6 Shunt + SG_ Shunt_Temperature : 23|32@0+ (0.1,0) [0|1000] "°C" ABX + + + +CM_ BO_ 3221225472 "This is a message for not used signals, created by Vector CANdb++ DBC OLE DB Provider."; +CM_ SG_ 3221225472 ACU_AS_Mission "AS Mission Selection"; +CM_ SG_ 3221225472 EPSC_measured_steering_angle "+-13875 equals to +-1.0, so the factor is 1/13875"; +BA_DEF_ "BusType" STRING ; +BA_DEF_DEF_ "BusType" ""; +BA_ "BusType" "CAN"; +VAL_ 3221225472 STW_Param_Type 0 "BrakeBalance" 1 "TractionControl1" 2 "TractionControl2" 3 "TorqueMap" 4 "Test1" 5 "Test2" 6 "Test3" 7 "Test4" ; +VAL_ 3221225472 STW_Param_ASRON 0 "OFF" 1 "ON" ; +VAL_ 3221225472 Mission_selection 1 "MissionSelection_acceleration" 2 "MissionSelection_skidpad" 3 "MissionSelection_trackdrive" 4 "MissionSelection_braketest" 5 "MissionSelection_inspection" 6 "MissionSelection_autocross" 7 "MissionSelection_manual" ; +VAL_ 3221225472 iniChk_state 0 "Start" 1 "WD_Check" 2 "WD_OK" 3 "ASB_Check_1" 4 "ASB_Check_2" 5 "Wait_TS" 6 "EBS_Check_A" 7 "EBS_Check_B" 8 "Done" 9 "Error" ; +VAL_ 3221225472 AS_State_STW 0 "AS_Off" 1 "AS_Manual" 2 "AS_Ready" 3 "AS_Driving" 4 "AS_Finished" 5 "AS_Emergency" ; +VAL_ 3221225472 R2D_Progress 0 "R2D_None" 1 "R2D_TSMS" 2 "R2D_TSActive" 3 "R2D_Resetting_Nodes" 4 "R2D_Resetting_Comms" 5 "R2D_Waiting_Init" 6 "R2D_Init_Stage1" 7 "R2D_Init_Stage2" 15 "R2D_Init_Success" ; +VAL_ 12 AMS_Error_Kind 5 "Shunt Overtemperature" 4 "Shunt Overcurrent" 3 "Shunt Timeout" 2 "Slave Panic" 1 "Slave Timeout" 0 "None" ; +VAL_ 10 AMS_State 0 "TS_INACTIVE" 1 "TS_ACTIVE" 2 "TS_PRECHARGE" 3 "TS_DISCHARGE" 4 "TS_ERROR" ; +VAL_ 9 AMS_SlavePanic_Kind 0 "Overtemperature" 1 "Undertemperature" 2 "Overvoltage" 3 "Undervoltage" 4 "Too_few_working_temperature_sensors" 5 "Open_cell_connection" ; + diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT24/CAN2_FS_DVLogger.dbc b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT24/CAN2_FS_DVLogger.dbc new file mode 100644 index 0000000..2be12b1 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT24/CAN2_FS_DVLogger.dbc @@ -0,0 +1,99 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: ABX RES FS_Datalogger + + +BO_ 1347 RES_Czech: 8 Vector__XXX + SG_ RES_Switch : 2|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ RES_Signal_Quality : 8|8@1+ (1,0) [0|100] "" Vector__XXX + SG_ RES_Go : 1|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ RES_EStop : 0|1@1+ (1,0) [0|1] "" Vector__XXX + +BO_ 1072 FS_Datalogger_Status: 6 FS_Datalogger + SG_ Current : 32|16@1+ (64,0) [0|4194240] "mA" ABX + SG_ Voltage : 16|16@1+ (16,0) [0|1048560] "mV" ABX + SG_ Status_Triggered_Current : 11|1@1- (1,0) [0|0] "" ABX + SG_ Status_Triggered_Voltage : 10|1@1- (1,0) [0|0] "" ABX + SG_ Status_Logging : 9|1@1- (1,0) [0|0] "" ABX + SG_ Status_Ready : 8|1@1- (1,0) [0|0] "" ABX + SG_ MsgCnt : 0|8@1+ (1,0) [0|255] "" ABX + +BO_ 1298 DV_ContinuousMonitoring: 1 ABX + SG_ Pressure_charged : 5|1@1+ (1,0) [0|1] "bool" FS_Datalogger + SG_ PDU_comm_alive : 2|1@1+ (1,0) [0|1] "bool" FS_Datalogger + SG_ Position_sensors_closed : 4|1@1+ (1,0) [0|1] "bool" FS_Datalogger + SG_ AS_error : 3|1@1+ (1,0) [0|1] "bool" FS_Datalogger + SG_ AS_comm_alive : 1|1@1+ (1,0) [0|1] "bool" FS_Datalogger + SG_ SDC_opened : 0|1@1+ (1,0) [0|1] "bool" FS_Datalogger + +BO_ 1280 DV_driving_dynamics_1: 8 ABX + SG_ Speed_actual : 0|8@1+ (1,0) [0|250] "km/h" FS_Datalogger + SG_ Speed_target : 8|8@1+ (1,0) [0|250] "km/h" FS_Datalogger + SG_ Steering_angle_actual : 16|8@1- (0.5,0) [-60|60] "°" FS_Datalogger + SG_ Steering_angle_target : 24|8@1- (0.5,0) [-60|60] "°" FS_Datalogger + SG_ Brake_hydr_actual : 32|8@1+ (1,0) [0|100] "%" FS_Datalogger + SG_ Brake_hydr_target : 40|8@1+ (1,0) [0|100] "%" FS_Datalogger + SG_ Motor_moment_actual : 48|8@1- (1,0) [-100|100] "%" FS_Datalogger + SG_ Motor_moment_target : 56|8@1- (1,0) [-100|100] "%" FS_Datalogger + +BO_ 1281 DV_driving_dynamics_2: 6 ABX + SG_ Acceleration_longitudinal : 0|16@1- (0.00195313,0) [-50|50] "m/s^2" FS_Datalogger + SG_ Acceleration_lateral : 16|16@1- (0.00195313,0) [-50|50] "m/s^2" FS_Datalogger + SG_ Yaw_rate : 32|16@1- (0.0078125,0) [-200|200] "°/s" FS_Datalogger + +BO_ 1282 DV_system_status: 5 ABX + SG_ AS_state : 0|3@1+ (1,0) [1|5] "" FS_Datalogger + SG_ EBS_state : 3|2@1+ (1,0) [1|3] "" FS_Datalogger + SG_ AMI_state : 5|3@1+ (1,0) [1|6] "" FS_Datalogger + SG_ Steering_state : 8|1@1+ (1,0) [0|1] "" FS_Datalogger + SG_ Service_brake_state : 9|2@1+ (1,0) [1|3] "" FS_Datalogger + SG_ Lap_counter : 11|4@1+ (1,0) [0|10] "" FS_Datalogger + SG_ Cones_count_actual : 15|8@1+ (1,0) [0|250] "" FS_Datalogger + SG_ Cones_count_all : 23|17@1+ (1,0) [0|131000] "" FS_Datalogger + +BO_ 1297 DV_SEBSS_Pressures: 8 ABX + SG_ EBS_Pressure_tank_A : 0|16@1+ (0.1,0) [0|50] "Bar" FS_Datalogger + SG_ EBS_Pressure_tank_B : 16|16@1+ (0.1,0) [0|50] "Bar" FS_Datalogger + SG_ Brake_Pressure_front : 32|16@1+ (0.1,0) [0|200] "Bar" FS_Datalogger + SG_ Brake_Pressure_rear : 48|16@1+ (0.1,0) [0|200] "Bar" FS_Datalogger + + + +VAL_ 1282 AS_state 1 "AS_state_off" 2 "AS_state_ready" 3 "AS_state_driving" 4 "AS_state_emergency_brake" 5 "AS_state_finish" ; +VAL_ 1282 EBS_state 1 "EBS_state_unavailable" 2 "EBS_state_armed" 3 "EBS_state_activated" ; +VAL_ 1282 AMI_state 1 "AMI_state_acceleration" 2 "AMI_state_skidpad" 3 "AMI_state_trackdrive" 4 "AMI_state_braketest" 5 "AMI_state_inspection" 6 "AMI_state_autocross" ; +VAL_ 1282 Service_brake_state 1 "Service_brake_state_disengaged" 2 "Service_brake_state_engaged" 3 "Service_brake_state_available" ; + diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT24/CAN4_FS_DVLogger_RES.dbc b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT24/CAN4_FS_DVLogger_RES.dbc new file mode 100644 index 0000000..5253538 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT24/CAN4_FS_DVLogger_RES.dbc @@ -0,0 +1,96 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: ABX RES FS_Datalogger + + +BO_ 401 RES_PDO: 7 RES + SG_ RES_Signal_Strength : 48|8@1+ (1,0) [0|100] "%" Vector__XXX + SG_ RES_Switch : 1|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ RES_Go_Signal : 2|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ RES_EStop : 0|1@1+ (1,0) [0|1] "" Vector__XXX + +BO_ 0 NMT_Operational: 2 Vector__XXX + SG_ NMT_Node_ID : 8|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ NMT_Command : 0|1@1+ (1,0) [0|1] "" Vector__XXX + +BO_ 1072 FS_Datalogger_Status: 6 FS_Datalogger + SG_ Current : 32|16@1+ (64,0) [0|4194240] "mA" ABX + SG_ Voltage : 16|16@1+ (16,0) [0|1048560] "mV" ABX + SG_ Status_Triggered_Current : 11|1@1- (1,0) [0|0] "" ABX + SG_ Status_Triggered_Voltage : 10|1@1- (1,0) [0|0] "" ABX + SG_ Status_Logging : 9|1@1- (1,0) [0|0] "" ABX + SG_ Status_Ready : 8|1@1- (1,0) [0|0] "" ABX + SG_ MsgCnt : 0|8@1+ (1,0) [0|255] "" ABX + +BO_ 1280 DV_driving_dynamics_1: 8 ABX + SG_ Speed_actual : 0|8@1+ (1,0) [0|250] "km/h" FS_Datalogger + SG_ Speed_target : 8|8@1+ (1,0) [0|250] "km/h" FS_Datalogger + SG_ Steering_angle_actual : 16|8@1- (0.5,0) [-30|30] "°" FS_Datalogger + SG_ Steering_angle_target : 24|8@1- (0.5,0) [-30|30] "°" FS_Datalogger + SG_ Brake_hydr_actual : 32|8@1+ (1,0) [0|100] "%" FS_Datalogger + SG_ Brake_hydr_target : 40|8@1+ (1,0) [0|100] "%" FS_Datalogger + SG_ Motor_moment_actual : 48|8@1- (1,0) [-100|100] "%" FS_Datalogger + SG_ Motor_moment_target : 56|8@1- (1,0) [-128|127] "%" FS_Datalogger + +BO_ 1281 DV_driving_dynamics_2: 6 ABX + SG_ Yaw_rate : 32|16@1- (0.0078125,0) [0|0] "°/s" FS_Datalogger + SG_ Acceleration_longitudinal : 0|16@1- (0.00195313,0) [-50|50] "m/s^2" FS_Datalogger + SG_ Acceleration_lateral : 16|16@1- (0.00195313,0) [-50|50] "m/s^2" FS_Datalogger + +BO_ 1282 DV_system_status: 5 ABX + SG_ AS_state : 0|3@1+ (1,0) [1|5] "" FS_Datalogger + SG_ EBS_state : 3|2@1+ (1,0) [1|3] "" FS_Datalogger + SG_ AMI_state : 5|3@1+ (1,0) [1|6] "" FS_Datalogger + SG_ Steering_state : 8|1@1+ (1,0) [0|1] "" FS_Datalogger + SG_ Service_brake_state : 9|2@1+ (1,0) [1|3] "" FS_Datalogger + SG_ Lap_counter : 11|4@1+ (1,0) [0|10] "" FS_Datalogger + SG_ Cones_count_actual : 15|8@1+ (1,0) [0|250] "" FS_Datalogger + SG_ Cones_count_all : 23|17@1+ (1,0) [0|131000] "" FS_Datalogger + +BO_ 1297 DV_SEBSS_Pressures: 8 ABX + SG_ EBS_Pressure_tank_A : 0|16@1+ (0.1,0) [0|50] "Bar" FS_Datalogger + SG_ EBS_Pressure_tank_B : 16|16@1+ (0.1,0) [0|50] "Bar" FS_Datalogger + SG_ Brake_Pressure_front : 32|16@1+ (0.1,0) [0|200] "Bar" FS_Datalogger + SG_ Brake_Pressure_rear : 48|16@1+ (0.1,0) [0|200] "Bar" FS_Datalogger + + + +CM_ SG_ 0 NMT_Node_ID "Needs to be 17 for RES"; +VAL_ 1282 AS_state 1 "AS_state_off" 2 "AS_state_ready" 3 "AS_state_driving" 4 "AS_state_emergency_brake" 5 "AS_state_finish" ; +VAL_ 1282 EBS_state 1 "EBS_state_unavailable" 2 "EBS_state_armed" 3 "EBS_state_activated" ; +VAL_ 1282 AMI_state 1 "AMI_state_acceleration" 2 "AMI_state_skidpad" 3 "AMI_state_trackdrive" 4 "AMI_state_braketest" 5 "AMI_state_inspection" 6 "AMI_state_autocross" ; +VAL_ 1282 Service_brake_state 1 "Service_brake_state_disengaged" 2 "Service_brake_state_engaged" 3 "Service_brake_state_available" ; + diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/CAN1MainFT25.dbc b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/CAN1MainFT25.dbc new file mode 100644 index 0000000..eac547d --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/CAN1MainFT25.dbc @@ -0,0 +1,856 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: Dashboard Sensornode_R Sensornode_F VN200 ACU SSU TTS_RL TTS_RR TTS_FR TTS_FL Shunt AMS FTCU PDU PDMV STW EPSC + + +BO_ 3221225472 VECTOR__INDEPENDENT_SIG_MSG: 0 Vector__XXX + SG_ New_Signal_547 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ New_Signal_546 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ New_Signal_545 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ New_Signal_544 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ New_Signal_543 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ New_Signal_542 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ New_Signal_541 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ New_Signal_540 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ New_Signal_539 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ SDO_Read_Write : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ New_Signal_542 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + +BO_ 1910 Inverter_Velocity: 8 Vector__XXX + SG_ Inverter_2_Velocity : 32|32@1- (0.001,0) [-2147483.648|2147483.647] "" Vector__XXX + SG_ Inverter_1_Velocity : 0|32@1- (0.001,0) [-2147483.648|2147483.647] "" Vector__XXX + +BO_ 1920 Inverter_Errors_Warnings: 8 Vector__XXX + SG_ Inverter_2_Warnings : 48|16@1+ (1,0) [0|65535] "" Vector__XXX + SG_ Inverter_2_Errors : 32|16@1+ (1,0) [0|65535] "" Vector__XXX + SG_ Inverter_1_Warnings : 16|16@1+ (1,0) [0|65535] "" Vector__XXX + SG_ Inverter_1_Errors : 0|16@1+ (1,0) [0|65535] "" Vector__XXX + +BO_ 1913 Inverter_Torque_Actual_CW: 8 Vector__XXX + SG_ Inverter_2_Torque_Actual : 48|16@1- (1,0) [-32768|32767] "" Vector__XXX + SG_ Inverter_2_ControlWord : 32|16@1+ (1,0) [0|65535] "" Vector__XXX + SG_ Inverter_1_Torque_Actual : 16|16@1- (1,0) [-32768|32767] "" Vector__XXX + SG_ Inverter_1_ControlWord : 0|16@1+ (1,0) [0|65535] "" Vector__XXX + +BO_ 1912 Inverter_Temperatur: 8 Vector__XXX + SG_ Inverter_2_Temp_Mot : 48|16@1- (1,0) [-128|127] "" Vector__XXX + SG_ Inverter_2_Temp_Inv : 32|16@1- (1,0) [-32768|32767] "" Vector__XXX + SG_ Inverter_1_Temp_Mot : 16|16@1- (1,0) [-128|127] "" Vector__XXX + SG_ Inverter_1_Temp_Inv : 0|16@1- (1,0) [-128|127] "" Vector__XXX + +BO_ 1911 Inverter_Torque_wanted: 8 Vector__XXX + SG_ Inverter_2_Torque_Desired : 48|16@1- (1,0) [-32768|32767] "" Vector__XXX + SG_ Inverter_1_Torque_Desired : 32|16@1- (1,0) [-32768|32767] "" Vector__XXX + SG_ Inverter_2_Torque_Demanded : 16|16@1- (1,0) [-32768|32767] "" Vector__XXX + SG_ Inverter_1_Torque_Demanded : 0|16@1- (1,0) [-32768|32767] "" Vector__XXX + +BO_ 1843 SDO_Telemetrie_Rx_Node1: 8 Vector__XXX + SG_ SDO_data : 32|32@1+ (1,0) [0|4294967295] "" Vector__XXX + SG_ SDO_OD_subindex : 24|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ SDO_OD_index : 8|16@1+ (1,0) [0|65535] "" Vector__XXX + SG_ SDO_command_byte : 0|8@1+ (1,0) [0|255] "" Vector__XXX + +BO_ 1841 SDO_Telemetrie_Rx_Node2: 8 Vector__XXX + SG_ SDO_data : 32|32@1+ (1,0) [0|4294967295] "" Vector__XXX + SG_ SDO_OD_subindex : 24|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ SDO_OD_index : 8|16@1+ (1,0) [0|65535] "" Vector__XXX + SG_ SDO_command_byte : 0|8@1+ (1,0) [0|255] "" Vector__XXX + +BO_ 1842 SDO_Telemetrie_Tx: 8 Vector__XXX + SG_ SDO_data : 32|32@1+ (1,0) [0|4294967295] "" Vector__XXX + SG_ SDO_OD_subindex : 24|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ SDO_OD_index : 8|16@1+ (1,0) [0|65535] "" Vector__XXX + SG_ SDO_command_byte : 0|8@1+ (1,0) [0|255] "" Vector__XXX + +BO_ 1840 Laptop_SDO_Node: 1 Vector__XXX + SG_ Node_ID_SDO : 0|2@1+ (1,0) [0|3] "" Vector__XXX + +BO_ 1811 XSens_LongLat: 8 Vector__XXX + SG_ XSens_longitude : 32|32@1- (1.19209E-07,0) [-255.999378194432|255.999378075223] "deg" Vector__XXX + SG_ XSens_latitude : 0|32@1- (5.96046E-08,0) [-127.999903845581|127.999903785976] "deg" Vector__XXX + +BO_ 1810 XSens_rateofturn: 6 Vector__XXX + SG_ XSens_gyZ : 32|16@1- (0.00195313,0) [-64.00016384|63.99821071] "rad/s" Vector__XXX + SG_ XSens_gyY : 16|16@1- (0.00195313,0) [-64.00016384|63.99821071] "rad/s" Vector__XXX + SG_ XSens_gyrX : 0|16@1- (0.00195313,0) [-64.00016384|63.99821071] "rad/s" Vector__XXX + +BO_ 1809 XSens_Acceleration: 6 Vector__XXX + SG_ XSens_accZ : 32|16@1- (0.00390625,0) [-128|127.99609375] "m/s^2" Vector__XXX + SG_ XSens_accY : 16|16@1- (0.00390625,0) [-128|127.99609375] "m/s^2" Vector__XXX + SG_ XSens_accX : 0|16@1- (0.00390625,0) [-128|127.99609375] "m/s^2" Vector__XXX + +BO_ 1812 XSens_Velocity: 6 Vector__XXX + SG_ XSens_velZ : 32|16@1- (0.015625,0) [-512|511.984375] "m/s" Vector__XXX + SG_ XSens_velY : 16|16@1- (0.015625,0) [-512|511.984375] "m/s" Vector__XXX + SG_ XSens_velX : 0|16@1- (0.015625,0) [-512|511.984375] "m/s" Vector__XXX + +BO_ 1824 Telemetrie: 7 Vector__XXX + SG_ TS_deactivate : 15|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ Traction_Control_on : 14|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ Reku_on : 13|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Torque_Vectoring_on : 12|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Torque_ohne_Limit_R : 48|8@1+ (10,0) [0|2550] "" Vector__XXX + SG_ Torque_ohne_Limit_L : 40|8@1+ (10,0) [0|2550] "" Vector__XXX + SG_ Torque_Limit_dynamisch : 32|8@1+ (10,0) [0|2550] "" Vector__XXX + SG_ Powermap : 4|3@1+ (1,0) [0|7] "" Vector__XXX + SG_ Power_Limit : 24|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ Pressure_Sensor_ok : 11|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ASP_ok : 10|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Torque_Limit : 16|8@1+ (10,0) [0|2550] "" Vector__XXX + SG_ Allow_Torque : 9|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Brake_ok : 8|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ APPS_ok : 7|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ Ini_Check_error_State : 0|4@1+ (1,0) [0|15] "" Vector__XXX + +BO_ 1829 Override_Powermap: 8 Vector__XXX + SG_ Laptopp_Power_Map : 0|3@1+ (1,0) [0|7] "" Vector__XXX + SG_ Laptop_TV : 5|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ Laptop_TC_P : 32|16@1+ (0.1,0) [0|65535] "" Vector__XXX + SG_ Laptop_TC_Mumax : 48|8@1+ (0.01,1) [1|3.55] "" Vector__XXX + SG_ Laptop_TC_I : 16|16@1+ (0.1,0) [0|6553.5] "" Vector__XXX + SG_ Laptop_TC : 4|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Laptop_slipref : 8|8@1+ (0.01,0) [0|2.55] "" Vector__XXX + SG_ Laptop_Reku : 3|1@1+ (1,0) [0|0] "" Vector__XXX + +BO_ 1828 Override_Laptop_2: 5 Vector__XXX + SG_ Laptop_Torque_Lim : 32|8@1+ (10,0) [0|1500] "" Vector__XXX + SG_ Laptop_Powerlimit : 24|8@1+ (1,0) [0|80] "" Vector__XXX + SG_ manual_input_torque : 8|12@1+ (1,0) [0|4095] "" Vector__XXX + SG_ AS_State : 3|3@1+ (1,0) [0|7] "" Vector__XXX + SG_ AS_Mission : 0|3@1+ (1,0) [0|7] "" Vector__XXX + +BO_ 1827 Override_EPSC_Cooling: 8 Vector__XXX + SG_ TS_cooling_PWM : 24|8@1+ (0.005,0) [0|1.275] "" Vector__XXX + SG_ TS_cooling_enable : 13|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ AC_cooling_PWM : 16|8@1+ (0.005,0) [0|1.275] "" Vector__XXX + SG_ AC_Cooling_enable : 12|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_mode : 10|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ EPSC_manual_angle : 0|10@1- (1,0) [-512|511] "" Vector__XXX + +BO_ 1825 Override_Laptop: 3 Vector__XXX + SG_ override_torque_input : 19|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ override_TC_parameter : 18|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ override_Power_Map : 17|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ override_PDU_TS_Cooling_enable : 16|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ override_PDU_PN_V2_enable : 15|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ override_PDU_PN_V1_enable : 14|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ override_PDU_Lidar_enable : 13|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ override_PDU_Heartbeat : 12|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ override_PDU_EPSC_enable : 11|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ override_PDU_DRS_enable : 10|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ override_PDU_ACU_enable : 9|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ override_PDU_AC_Cooling_enable : 8|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ override_EPSC_mode : 7|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ override_AS_State : 6|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ override_AS_Mission : 5|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ override_APPS : 4|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ Fake_TS_Active : 3|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Fake_Soundbox_R2D : 2|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Fake_Soundbox_Emergency : 1|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Fake_R2D : 0|1@1+ (1,0) [0|0] "" Vector__XXX + +BO_ 1826 APPS_Override: 5 Vector__XXX + SG_ APPS_1_min : 30|10@1+ (0.01,0) [0|10.23] "" Vector__XXX + SG_ APPS_1_max : 20|10@1+ (0.01,0) [0|10.23] "" Vector__XXX + SG_ APPS_0_min : 10|10@1+ (0.01,0) [0|10.23] "" Vector__XXX + SG_ APPS_0_max : 0|10@1+ (0.01,0) [0|10.23] "" Vector__XXX + +BO_ 259 FTCU_Damper: 8 Vector__XXX + SG_ FTCU_Damper_RR : 48|16@1+ (0.01,0) [0|75] "mm" Vector__XXX + SG_ FTCU_Damper_RL : 32|16@1+ (0.01,0) [0|75] "mm" Vector__XXX + SG_ FTCU_Damper_FR : 16|16@1+ (0.01,0) [0|75] "mm" Vector__XXX + SG_ FTCU_Damper_FL : 0|16@1+ (0.01,0) [0|75] "mm" Vector__XXX + +BO_ 1043 FTCU_ParamConfirm: 1 Vector__XXX + SG_ FTCU_Param_Confirm : 0|8@1+ (1,0) [0|255] "" Vector__XXX + +BO_ 209 Sensornode_F_10Hz: 3 Sensornode_F + SG_ BDTS_FL : 8|8@1+ (2,0) [0|510] "degC" FTCU + SG_ BDTS_FR : 16|8@1+ (2,0) [0|510] "degC" FTCU + SG_ LS_L : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ LS_R : 1|1@1+ (1,0) [0|1] "" FTCU + SG_ SDC_M_pre_BOTS : 2|1@1+ (1,0) [0|1] "" FTCU + SG_ SDC_M_post_INS : 3|1@1+ (1,0) [0|1] "" FTCU + SG_ SDC_M_post_BSPD : 4|1@1+ (1,0) [0|1] "" FTCU + +BO_ 211 Sensornode_F_100Hz_1: 7 Sensornode_F + SG_ APPS_1 : 0|8@1+ (0.00392157,0) [0|1] "" FTCU + SG_ APPS_2 : 8|8@1+ (0.00392157,0) [0|1] "" FTCU + SG_ BP_F : 16|8@1+ (2,0) [0|510] "" FTCU + SG_ WSS_FL : 40|8@1+ (1,0) [0|255] "notches" FTCU + SG_ WSS_FR : 48|8@1+ (1,0) [0|255] "notches" FTCU + SG_ SAS : 24|12@1+ (1,0) [0|4095] "" FTCU + +BO_ 213 Sensornode_F_100Hz_2: 3 Sensornode_F + SG_ DS_FL : 0|12@1+ (1,0) [0|4095] "" FTCU + SG_ DS_FR : 12|12@1+ (1,0) [0|4095] "" FTCU + +BO_ 215 Sensornode_F_1kHz: 3 Sensornode_F + SG_ SLS_FL : 0|12@1+ (1,0) [0|4095] "" FTCU + SG_ SLS_FR : 12|12@1+ (1,0) [0|4095] "" FTCU + +BO_ 210 Sensornode_R_10Hz: 7 Sensornode_R + SG_ BDTS_RL : 8|8@1+ (2,0) [0|510] "degC" FTCU + SG_ BDTS_RR : 16|8@1+ (2,0) [0|510] "degC" FTCU + SG_ ExtTSOn : 0|1@1+ (1,0) [0|1] "" FTCU + SG_ SDC_M_pre_TSMS : 1|1@1+ (1,0) [0|1] "" FTCU + SG_ SDC_M_post_TSMS : 2|1@1+ (1,0) [0|1] "" FTCU + SG_ WT_BAT : 24|8@1+ (1,0) [0|255] "degC" FTCU + SG_ WT_DT : 32|8@1+ (1,0) [0|255] "degC" FTCU + SG_ WP_BAT : 40|8@1+ (1,0) [0|255] "" FTCU + SG_ WP_DT : 48|8@1+ (1,0) [0|255] "" FTCU + +BO_ 212 Sensornode_R_100Hz: 8 Sensornode_R + SG_ EBS_APS_1 : 0|8@1+ (0.1,0) [0|25.5] "" FTCU + SG_ EBS_APS_2 : 8|8@1+ (0.1,0) [0|25.5] "" FTCU + SG_ BP_R : 16|8@1+ (2,0) [0|510] "" FTCU + SG_ DS_RL : 40|12@1+ (1,0) [0|4095] "" FTCU + SG_ DS_RR : 52|12@1+ (1,0) [0|4095] "" FTCU + SG_ WSS_RL : 24|8@1+ (1,0) [0|255] "notches" FTCU + SG_ WSS_RR : 32|8@1+ (1,0) [0|255] "notches" FTCU + +BO_ 216 Sensornode_R_1kHz: 3 Sensornode_R + SG_ SLS_RL : 0|12@1+ (1,0) [0|4095] "" FTCU + SG_ SLS_RR : 12|12@1+ (1,0) [0|4095] "" FTCU + +BO_ 220 PWM_DutyCycle: 7 FTCU + SG_ DC_DRS : 0|8@1+ (1,0) [0|255] "/255" Sensornode_R + SG_ DC_ASSI_Y : 8|8@1+ (1,0) [0|255] "/255" Sensornode_R + SG_ DC_ASSI_B : 16|8@1+ (1,0) [0|255] "/255" Sensornode_R + SG_ DC_BL : 24|8@1+ (1,0) [0|255] "/255" Sensornode_R + SG_ DC_Fans_DT : 32|8@1+ (1,0) [0|255] "/255" Sensornode_R + SG_ DC_Fans_BAT : 40|8@1+ (1,0) [0|255] "/255" Sensornode_R + SG_ DC_SBX : 48|8@1+ (1,0) [0|255] "/255" Sensornode_R + +BO_ 221 PWM_Config: 6 FTCU + SG_ Freq_PWM1_DRS_Lighting : 0|16@1+ (1,0) [0|65535] "Hz" Sensornode_R + SG_ Freq_PWM3_Fans : 16|16@1+ (1,0) [0|65535] "Hz" Sensornode_R + SG_ Freq_PWM2_SBX : 32|16@1+ (1,0) [0|65535] "Hz" Sensornode_R + +BO_ 1056 Dashboard_In: 1 FTCU + SG_ Dashboard_SDC_out : 4|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Dashboard_SDC_in : 3|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Dashboard_Race_Key : 2|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Dashboard_TS_Activate_Button : 1|1@1+ (1,0) [0|1] "" Dashboard + SG_ Dashboard_R2D_Button : 0|1@1+ (1,0) [0|1] "" Dashboard + +BO_ 129 AMS_Slave1Status: 8 AMS + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" FTCU + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveStatus_Temp_Sensor : 15|8@0+ (1,0) [0|1] "%" FTCU + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" FTCU + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" FTCU + +BO_ 1568 AMS_Slave2_Log0: 8 AMS + SG_ AMS_SlaveID_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1569 AMS_Slave2_Log1: 8 AMS + SG_ AMS_SlaveID_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1570 AMS_Slave2_Log2: 8 AMS + SG_ AMS_SlaveID_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1571 AMS_Slave2_Log3: 8 AMS + SG_ AMS_SlaveID_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1572 AMS_Slave2_Log4: 6 AMS + SG_ AMS_SlaveID_FailedSensors : 23|32@0+ (1,0) [0|0] "" FTCU + +BO_ 1573 AMS_Slave2_Log5: 8 AMS + SG_ AMS_SlaveID_T0 : 0|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T1 : 8|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T2 : 16|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T3 : 24|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T5 : 40|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T6 : 48|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T7 : 56|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T4 : 32|8@1- (1,0) [0|0] "" FTCU + +BO_ 1622 AMS_Slave5_Log6: 8 AMS + SG_ AMS_SlaveID_T9 : 8|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T8 : 0|8@1- (1,0) [0|0] "" FTCU + +BO_ 1606 AMS_Slave4_Log6: 8 AMS + SG_ AMS_SlaveID_T9 : 8|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T8 : 0|8@1- (1,0) [0|0] "" FTCU + +BO_ 1590 AMS_Slave3_Log6: 8 AMS + SG_ AMS_SlaveID_T9 : 8|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T8 : 0|8@1- (1,0) [0|0] "" FTCU + +BO_ 1574 AMS_Slave2_Log6: 8 AMS + SG_ AMS_SlaveID_T9 : 8|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T8 : 0|8@1- (1,0) [0|0] "" FTCU + +BO_ 1558 AMS_Slave1_Log6: 8 AMS + SG_ AMS_SlaveID_T9 : 8|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T8 : 0|8@1- (1,0) [0|0] "" FTCU + +BO_ 1621 AMS_Slave5_Log5: 8 AMS + SG_ AMS_SlaveID_T4 : 32|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T7 : 56|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T6 : 48|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T5 : 40|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T3 : 24|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T2 : 16|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T1 : 8|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T0 : 0|8@1- (1,0) [0|0] "" FTCU + +BO_ 1605 AMS_Slave4_Log5: 8 AMS + SG_ AMS_SlaveID_T4 : 32|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T7 : 56|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T6 : 48|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T5 : 40|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T3 : 24|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T2 : 16|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T1 : 8|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T0 : 0|8@1- (1,0) [0|0] "" FTCU + +BO_ 1589 AMS_Slave3_Log5: 8 AMS + SG_ AMS_SlaveID_T4 : 32|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T7 : 56|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T6 : 48|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T5 : 40|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T3 : 24|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T2 : 16|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T1 : 8|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T0 : 0|8@1- (1,0) [0|0] "" FTCU + +BO_ 1557 AMS_Slave1_Log5: 8 AMS + SG_ AMS_SlaveID_T4 : 32|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T7 : 56|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T6 : 48|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T5 : 40|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T3 : 24|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T2 : 16|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T1 : 8|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T0 : 0|8@1- (1,0) [0|0] "" FTCU + +BO_ 1620 AMS_Slave5_Log4: 6 AMS + SG_ AMS_SlaveID_FailedSensors : 23|32@0+ (1,0) [0|0] "" FTCU + +BO_ 1604 AMS_Slave4_Log4: 6 AMS + SG_ AMS_SlaveID_FailedSensors : 23|32@0+ (1,0) [0|0] "" FTCU + +BO_ 1588 AMS_Slave3_Log4: 6 AMS + SG_ AMS_SlaveID_FailedSensors : 23|32@0+ (1,0) [0|0] "" FTCU + +BO_ 1556 AMS_Slave1_Log4: 6 AMS + SG_ AMS_SlaveID_FailedSensors : 23|32@0+ (1,0) [0|0] "" FTCU + +BO_ 1619 AMS_Slave5_Log3: 8 AMS + SG_ AMS_SlaveID_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1603 AMS_Slave4_Log3: 8 AMS + SG_ AMS_SlaveID_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1587 AMS_Slave3_Log3: 8 AMS + SG_ AMS_SlaveID_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1555 AMS_Slave1_Log3: 8 AMS + SG_ AMS_SlaveID_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1618 AMS_Slave5_Log2: 8 AMS + SG_ AMS_SlaveID_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1602 AMS_Slave4_Log2: 8 AMS + SG_ AMS_SlaveID_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1586 AMS_Slave3_Log2: 8 AMS + SG_ AMS_SlaveID_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1554 AMS_Slave1_Log2: 8 AMS + SG_ AMS_SlaveID_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1617 AMS_Slave5_Log1: 8 AMS + SG_ AMS_SlaveID_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1601 AMS_Slave4_Log1: 8 AMS + SG_ AMS_SlaveID_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1585 AMS_Slave3_Log1: 8 AMS + SG_ AMS_SlaveID_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1553 AMS_Slave1_Log1: 8 AMS + SG_ AMS_SlaveID_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1616 AMS_Slave5_Log0: 8 AMS + SG_ AMS_SlaveID_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1600 AMS_Slave4_Log0: 8 AMS + SG_ AMS_SlaveID_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1584 AMS_Slave3_Log0: 8 AMS + SG_ AMS_SlaveID_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1552 AMS_Slave1_Log0: 8 AMS + SG_ AMS_SlaveID_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 206 PDU_Heartbeat: 1 FTCU + SG_ PDU_Heartbeat : 0|1@1- (1,0) [0|0] "" Vector__XXX + +BO_ 272 FTCU_Pneumatik: 8 FTCU + SG_ FTCU_Tank_Pressure_2 : 16|12@1+ (0.01,0) [0|409.5] "" Vector__XXX + SG_ FTCU_Tank_Pressure_1 : 0|12@1+ (0.01,0) [0|40.95] "" Vector__XXX + +BO_ 227 ACU_TX_Commands: 6 FTCU + SG_ ABX_Speed_FR : 8|8@1+ (0.2,0) [0|51] "" Vector__XXX + SG_ ABX_Steering_Angle_Right : 40|8@1- (0.0156863,0) [-2.00784|1.99216] "" ACU + SG_ ABX_Steering_Angle_Left : 32|8@1- (0.0156863,0) [-2.00784|1.99216] "" ACU + SG_ ABX_Speed_RR : 24|8@1+ (0.2,0) [0|51] "" ACU + SG_ ABX_Speed_RL : 16|8@1+ (0.2,0) [0|51] "" ACU + SG_ ABX_Speed_FL : 0|8@1+ (0.2,0) [0|51] "" ACU + +BO_ 226 ACU_RX_Commands: 4 ACU + SG_ ACU_Steering_Angle_Left : 24|8@1- (0.016,0) [-2.048|2.032] "" Vector__XXX + SG_ ACU_Steering_Angle_Right : 16|8@1- (0.016,0) [-2.048|2.032] "" Vector__XXX + SG_ ACU_Speed_Target_right : 8|8@1+ (1.2,0) [0|306] "m/s" Vector__XXX + SG_ ACU_Speed_Target_left : 0|8@1+ (1.2,0) [0|306] "" Vector__XXX + +BO_ 225 ACU_RX: 3 ACU + SG_ ACU_DRS : 2|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ACU_Cones_Actual : 16|8@1+ (1,0) [0|255] "" FTCU + SG_ ACU_Cones_All : 8|8@1+ (1,0) [0|255] "" FTCU + SG_ ACU_Lap_Count : 3|4@1+ (1,0) [0|15] "" FTCU + SG_ ACU_AS_OK : 1|1@1+ (1,0) [0|1] "Bool" FTCU + SG_ ACU_AS_Mission_Complete : 0|1@1+ (1,0) [0|1] "Bool" FTCU + +BO_ 1536 AMS_Slave0_Log0: 8 AMS + SG_ AMS_SlaveID_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1537 AMS_Slave0_Log1: 8 AMS + SG_ AMS_SlaveID_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1539 AMS_Slave0_Log3: 8 AMS + SG_ AMS_SlaveID_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveID_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" FTCU + +BO_ 1540 AMS_Slave0_Log4: 6 AMS + SG_ AMS_SlaveID_FailedSensors : 23|32@0+ (1,0) [0|0] "" FTCU + +BO_ 1541 AMS_Slave0_Log5: 8 AMS + SG_ AMS_SlaveID_T4 : 32|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T7 : 56|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T6 : 48|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T5 : 40|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T3 : 24|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T2 : 16|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T1 : 8|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T0 : 0|8@1- (1,0) [0|0] "" FTCU + +BO_ 1542 AMS_Slave0_Log6: 8 AMS + SG_ AMS_SlaveID_T9 : 8|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_SlaveID_T8 : 0|8@1- (1,0) [0|0] "" FTCU + +BO_ 224 ACU_TX: 2 FTCU + SG_ ABX_ConMon_Error : 9|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ ACU_AllowTorque : 8|1@1+ (1,0) [0|1] "bool" Vector__XXX + SG_ ACU_Reset : 7|1@1+ (1,0) [0|1] "bool" Vector__XXX + SG_ ACU_Power_Off : 6|1@1+ (1,0) [0|1] "bool" Vector__XXX + SG_ ACU_AS_State : 3|3@1+ (1,0) [0|5] "" ACU + SG_ ACU_AS_Mission : 0|3@1+ (1,0) [0|7] "int" ACU + +BO_ 133 AMS_Slave5Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" FTCU + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" FTCU + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|1] "%" FTCU + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" FTCU + +BO_ 132 AMS_Slave4Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" FTCU + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" FTCU + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|1] "%" FTCU + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|1] "V" FTCU + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|1] "V" FTCU + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" FTCU + +BO_ 131 AMS_Slave3Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" FTCU + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" FTCU + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|1] "%" FTCU + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" FTCU + +BO_ 130 AMS_Slave2Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" FTCU + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" FTCU + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|1] "%" FTCU + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" FTCU + +BO_ 12 AMS_Error: 2 AMS + SG_ AMS_Error_Arg : 8|8@1- (1,0) [0|0] "" FTCU + SG_ AMS_Error_Kind : 0|8@1- (1,0) [0|0] "" FTCU + +BO_ 263 FTCU_Cooling: 8 FTCU + SG_ FTCU_Water_Pressure_1 : 8|8@1+ (0.01,0) [0|2.55] "bar" Vector__XXX + SG_ FTCU_Water_Temperature_1 : 16|10@1+ (0.1,0) [0|102.3] "Deg" Vector__XXX + SG_ FTCU_Flow_rate : 36|10@1+ (0.1,0) [0|102.3] "degC" Vector__XXX + SG_ FTCU_Water_Temperature_2 : 26|10@1+ (0.1,0) [0|102.3] "degC" Vector__XXX + SG_ FTCU_Water_Pressure_2 : 0|8@1+ (0.01,0) [0|2.55] "bar" Vector__XXX + +BO_ 261 FTCU_BrakeT: 8 FTCU + SG_ FTCU_BrakeT_RR : 48|16@1+ (0.01,0) [0|655.35] "degC" Vector__XXX + SG_ FTCU_BrakeT_RL : 32|16@1+ (0.01,0) [0|655.35] "degC" Vector__XXX + SG_ FTCU_BrakeT_FR : 16|16@1+ (0.01,0) [0|655.35] "degC" Vector__XXX + SG_ FTCU_BrakeT_FL : 0|16@1+ (0.01,0) [0|655.35] "degC" Vector__XXX + +BO_ 260 FTCU_Wheelspeed: 8 FTCU + SG_ FTCU_Distance_Session : 48|16@1+ (1,0) [0|65535] "m" Vector__XXX + SG_ FTCU_Wheelspeed_RR : 36|12@1- (0.05,0) [-102.4|102.35] "1/s" Vector__XXX + SG_ FTCU_Wheelspeed_RL : 24|12@1- (0.05,0) [-102.4|102.35] "1/s" Vector__XXX + SG_ FTCU_Wheelspeed_FR : 12|12@1- (0.05,0) [-102.4|102.35] "1/s" Vector__XXX + SG_ FTCU_Wheelspeed_FL : 0|12@1- (0.05,0) [-102.4|102.35] "1/s" Vector__XXX + +BO_ 258 FTCU_Timings: 8 FTCU + SG_ FTCU_Sectortime_last : 48|16@1+ (0.01,0) [0|655.35] "s" Vector__XXX + SG_ FTCU_Sectortime_best : 32|16@1+ (0.01,0) [0|655.35] "s" Vector__XXX + SG_ FTCU_Laptime_last : 16|16@1+ (0.01,0) [0|655.35] "s" Vector__XXX + SG_ FTCU_Laptime_best : 0|16@1+ (0.01,0) [0|655.35] "s" Vector__XXX + +BO_ 273 FTCU_Driver: 8 FTCU + SG_ FTCU_Brake_Pressure_R : 20|12@1+ (0.1,0) [0|160] "bar" Vector__XXX + SG_ FTCU_Sectorcounter : 56|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ FTCU_Lapcounter : 48|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ FTCU_Steering_Angle : 32|8@1- (1,0) [-128|127] "Deg" Vector__XXX + SG_ FTCU_Speed : 40|8@1+ (0.2,0) [0|51] "m/s" Vector__XXX + SG_ FTCU_Brake_Pressure_F : 8|12@1+ (0.1,0) [0|160] "bar" Vector__XXX + SG_ FTCU_APPS_Percent : 0|8@1+ (1,0) [0|100] "%" Vector__XXX + +BO_ 1796 TTS_RR: 8 TTS_RR + SG_ TTS_Status : 60|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ TTS_OutetRight : 48|12@1+ (0.1,0) [-54.8|354.7] "degC" Vector__XXX + SG_ TTS_OuterLeft : 0|12@1+ (0.1,0) [-54.8|354.7] "degC" Vector__XXX + SG_ TTS_CenterRight : 36|12@1+ (0.1,0) [-54.8|354.7] "degC" Vector__XXX + SG_ TTS_CenterLeft : 12|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_Center : 24|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + +BO_ 1795 TTS_RL: 8 TTS_RL + SG_ TTS_Status : 60|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ TTS_OuterLeft : 0|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_OuterRight : 48|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_CenterRight : 36|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_CenterLeft : 12|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_Center : 24|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + +BO_ 1794 TTS_FR: 8 TTS_FR + SG_ TTS_Status : 60|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ TTS_OuterRight : 48|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_OuterLeft : 0|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_CenterLeft : 12|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_CenterRight : 36|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_Center : 24|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + +BO_ 1793 TTS_FL: 8 TTS_FL + SG_ TTS_Status : 60|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ TTS_OuterLeft : 0|12@1+ (0.1,0) [-54.8|354.7] "degC" Vector__XXX + SG_ TTS_OuterRight : 48|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_CenterRight : 36|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_CenterLeft : 12|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + SG_ TTS_Center : 24|12@1+ (0.1,0) [0|409.5] "degC" Vector__XXX + +BO_ 1026 STW_Param_Set: 6 STW + SG_ STW_Param_TC_Slipref m10 : 16|32@1+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_TC_Mumax m9 : 16|32@1+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_TC_I m8 : 16|32@1+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_Plim m2 : 16|32@1+ (1,0) [0|0] "" Vector__XXX + SG_ STW_Param_Set M : 0|16@1+ (1,0) [0|0] "" Vector__XXX + SG_ STW_Param_Tlim m1 : 16|32@1+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_TC_P m7 : 16|32@1+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_Reku m6 : 16|32@1+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_TC_on m5 : 16|32@1+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_TV_on m4 : 16|32@1+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_Discipline m3 : 16|32@1+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_Slim m0 : 16|32@1+ (1,0) [0|1] "" Vector__XXX + +BO_ 128 AMS_Slave0Status: 8 AMS + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" FTCU + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" FTCU + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [-128|127] "%" FTCU + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" FTCU + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" FTCU + +BO_ 1280 SSU_Message: 4 SSU + SG_ SSU_Pressure : 0|16@1- (1,0) [-32768|32767] "" Vector__XXX + SG_ SSU_AirTemp : 16|16@1- (0.1,0) [-20|80] "degC" Vector__XXX + +BO_ 10 AMS_Status: 8 AMS + SG_ AMS_IMD_State : 48|7@1+ (1,0) [0|0] "" FTCU + SG_ AMS_IMD_ok : 55|1@1+ (1,0) [0|0] "" FTCU + SG_ AMS_State : 0|7@1+ (1,0) [0|1] "" FTCU + SG_ SDC_Closed : 7|1@1+ (1,0) [0|1] "" FTCU + SG_ SOC : 8|8@1+ (1,0) [0|100] "%" FTCU + SG_ Min_cell_volt : 23|16@0+ (0.001,0) [0|65.535] "V" FTCU + SG_ Max_cell_temp : 39|16@0+ (0.0625,0) [0|4095.94] "degC" FTCU + +BO_ 9 AMS_SlavePanic: 8 AMS + SG_ AMS_SlavePanic_Kind : 15|8@0+ (1,0) [0|7.20576E+16] "" FTCU + SG_ AMS_SlavePanic_SlaveID : 0|8@1+ (1,0) [0|255] "" FTCU + SG_ AMS_SlavePanic_Arg : 23|32@0+ (1,0) [0|7.20576E+16] "" FTCU + +BO_ 11 AMS_In: 1 FTCU + SG_ TS_activate : 0|1@1+ (1,0) [0|1] "" AMS + SG_ Lap_Number : 2|6@1+ (1,0) [0|64] "Laps" AMS + SG_ Inverters_discharged : 1|1@1+ (1,0) [0|1] "" AMS + +BO_ 1313 Shunt_Current: 6 Shunt + SG_ Shunt_Current : 23|32@0- (0.001,0) [-2000000|2000000] "A" AMS + +BO_ 1314 Shunt_Voltage1: 6 Shunt + SG_ Shunt_Voltage1 : 23|32@0- (0.001,0) [-2000000|2000000] "V" AMS + +BO_ 1315 Shunt_Voltage2: 6 Shunt + SG_ Shunt_Voltage2 : 23|32@0- (0.001,0) [-2000000|2000000] "V" AMS + +BO_ 1316 Shunt_Voltage3: 6 Shunt + SG_ Shunt_Voltage3 : 23|32@0- (0.001,0) [-2000000|2000000] "V" AMS + +BO_ 1317 Shunt_Temperature: 6 Shunt + SG_ Shunt_Temperature : 23|32@0+ (0.1,0) [0|1000] "degC" FTCU + +BO_ 200 PDU_Command: 7 FTCU + SG_ PDU_enable_EBS_C : 11|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_enable_TS_Cooling : 3|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_enable_lldar : 5|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ PDU__enable_ACU : 8|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_enable_DRS : 6|1@1+ (1,0) [0|1] "" PDU + SG_ PDU_enable_misc : 0|1@1+ (1,0) [0|1] "" PDU + SG_ PDU_enable_sdc : 1|1@1+ (1,0) [0|1] "" PDU + SG_ PDU_enable_EBS_B : 10|1@1+ (1,0) [0|1] "" PDU + SG_ PDU_enable_inverter : 2|1@1+ (1,0) [0|1] "" PDU + SG_ PDU_enable_EPSC : 7|1@1+ (1,0) [0|1] "" PDU + SG_ PDU_enable_EBS_A : 9|1@1+ (1,0) [0|1] "" PDU + SG_ PDU_enable_ACC_Cooling : 4|1@1+ (1,0) [0|1] "" PDU + +BO_ 201 PDU_Response: 7 PDU + SG_ PDU_ebs_valve_2_tx : 12|1@0+ (1,0) [0|1] "" FTCU + SG_ PDU_PWM_TSAC_fans : 23|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_servos_regler_tx : 2|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_ACU_tx : 3|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_lidar_tx : 5|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_servo_tx : 14|1@0+ (1,0) [0|1] "" FTCU + SG_ PDU_misc_tx : 15|1@0+ (1,0) [0|1] "" FTCU + SG_ PDU_alwayson_tx : 7|1@0+ (1,0) [0|1] "" FTCU + SG_ PDU_shutdown_circuit_tx : 6|1@0+ (1,0) [0|1] "" FTCU + SG_ PDU_aggregat_tx : 9|1@0+ (1,0) [0|1] "" FTCU + SG_ PDU_inverter_tx : 1|1@0+ (1,0) [0|1] "" FTCU + SG_ PDU_steering_tx : 8|1@0+ (1,0) [0|1] "" FTCU + SG_ PDU_ebs_valve_1_tx : 13|1@0+ (1,0) [0|1] "" FTCU + SG_ PDU_cs_valve_tx : 11|1@0+ (1,0) [0|1] "" FTCU + SG_ PDU_PWM_radiatot_fans_tx : 31|8@0+ (1,0) [0|255] "" FTCU + SG_ PDU_PWM_aggregat : 39|8@0+ (1,0) [0|255] "" FTCU + SG_ PDU_PWM_pump : 47|8@0+ (1,0) [0|255] "" FTCU + SG_ PDU_heartbeat_ok_tx : 55|8@0+ (1,0) [0|255] "" FTCU + +BO_ 1040 AS_Mission_fb: 1 FTCU + SG_ Mission_selection : 0|3@1+ (1,0) [1|7] "" STW + +BO_ 1024 STW_mission_selected: 1 STW + SG_ Mission_selection : 0|3@1+ (1,0) [1|7] "" FTCU + +BO_ 293 EPSC_out: 8 EPSC + SG_ EPSC_measured_steering_angle : 16|16@1+ (0.01,0) [0|360] "deg" FTCU + SG_ EPSC_measured_rpm : 0|16@1- (0.1,0) [-3276.8|3276.7] "rpm" FTCU + SG_ EPSC_measured_current : 56|8@1+ (0.1,0) [0|25.5] "A" FTCU + SG_ EPSC_measured_voltage : 42|10@1+ (0.1,0) [0|102.3] "V" FTCU + SG_ EPSC_measured_MOSFET_temperature : 32|10@1+ (0.1,0) [0|102.3] "degC" FTCU + +BO_ 291 EPSC_Steering_In: 2 FTCU + SG_ EPSC_desired_steering_angle : 0|10@1- (1,0) [-0.0512|0.0511] "" EPSC + +BO_ 1025 STW_buttons: 1 STW + SG_ STW_button_DRS : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ STW_button_3 : 3|1@1+ (1,0) [0|1] "" FTCU + SG_ STW_button_2 : 2|1@1+ (1,0) [0|1] "" FTCU + SG_ STW_button_1 : 1|1@1+ (1,0) [0|1] "" FTCU + SG_ STW_button_4 : 4|1@1+ (1,0) [0|1] "" FTCU + +BO_ 1042 STW_status: 7 FTCU + SG_ SDC_Status : 28|4@0+ (1,0) [0|15] "" Vector__XXX + SG_ Energy_per_Lap : 32|16@1+ (0.001,0) [0|65.535] "kWh" STW + SG_ Inv1_ready : 30|1@1+ (1,0) [0|0] "" STW + SG_ iniChk_state : 48|8@1+ (1,0) [0|255] "" STW + SG_ Inv2_ready : 29|1@1+ (1,0) [0|0] "" STW + SG_ AS_State_STW : 12|3@1+ (1,0) [0|5] "" Vector__XXX + SG_ Lap_Count : 0|6@1+ (1,0) [0|64] "" STW + SG_ ERR_SDC : 24|1@1+ (1,0) [0|1] "" STW + SG_ ERR_AMS : 23|1@1+ (1,0) [0|1] "" STW + SG_ ERR_Inv1 : 22|1@1+ (1,0) [0|1] "" STW + SG_ ERR_Inv2 : 21|1@1+ (1,0) [0|1] "" STW + SG_ ERR_IniChk : 20|1@1+ (1,0) [0|1] "" STW + SG_ ERR_ConMon : 19|1@1+ (1,0) [0|1] "" STW + SG_ ERR_SCS : 18|1@1+ (1,0) [0|1] "" STW + SG_ ERR_sBSPD : 17|1@1+ (1,0) [0|1] "" STW + SG_ ERR_APPSp : 16|1@1+ (1,0) [0|1] "" STW + SG_ ERR_AS : 15|1@1+ (1,0) [0|1] "" STW + SG_ ERR_RES : 7|1@1+ (1,0) [0|1] "" STW + SG_ ERR_PDU : 6|1@1+ (1,0) [0|1] "" STW + SG_ R2D_Progress : 8|4@1+ (1,0) [0|15] "" STW + +BO_ 202 PDU_Current_1: 8 PDU + SG_ PDU_always_on_current : 0|16@1+ (1,0) [0|65535] "" FTCU + SG_ PDU_LVMS_current : 16|16@1+ (1,0) [0|65535] "" FTCU + SG_ PDU_ASMS_current : 32|16@1+ (1,0) [0|65535] "" FTCU + SG_ PDU_MISC_current : 48|16@1+ (1,0) [0|65535] "" FTCU + +BO_ 203 PDU_Current_2: 8 PDU + SG_ PDU_SDC_current : 0|16@1+ (1,0) [0|65535] "" FTCU + SG_ PDU_Inverter_current : 16|16@1+ (1,0) [0|65535] "" FTCU + SG_ PDU_TS_Cooling_current : 32|16@1+ (1,0) [0|65535] "" FTCU + SG_ PDU_ACC_Cooling_current : 48|16@1+ (1,0) [0|65535] "" FTCU + +BO_ 204 PDU_Current_3: 8 PDU + SG_ PDU_Lidar_current : 0|16@1+ (1,0) [0|65535] "" FTCU + SG_ PDU_DRS_current : 16|16@1+ (1,0) [0|65535] "" FTCU + SG_ PDU_EPSC_current : 32|16@1+ (1,0) [0|65535] "" FTCU + SG_ PDU_ACU_current : 48|16@1+ (1,0) [0|65535] "" FTCU + +BO_ 205 PDU_Current_4: 8 PDU + SG_ PDU_EBS_A_current : 0|16@1+ (1,0) [0|65535] "" FTCU + SG_ PDU_EBS_B_current : 16|16@1+ (1,0) [0|65535] "" FTCU + +BO_ 292 EPSC_Config_In: 6 FTCU + SG_ EPSC_Config_P_Gain : 0|16@1+ (0.01,0) [0|655.35] "" Vector__XXX + SG_ EPSC_Config_D_Gain : 32|16@1+ (0.01,0) [0|655.35] "" Vector__XXX + SG_ EPSC_Config_I_Gain : 16|16@1+ (0.01,0) [0|655.35] "" Vector__XXX + + + +CM_ BO_ 3221225472 "This is a message for not used signals, created by Vector CANdb++ DBC OLE DB Provider."; +CM_ SG_ 3221225472 SDO_Read_Write "0: Read +1: Write +"; +CM_ SG_ 1840 Node_ID_SDO "0: beide Nodes +1: Node 1 +2: Node 2"; +CM_ SG_ 221 Freq_PWM1_DRS_Lighting "DRS+Lighting,Default=500Hz"; +CM_ SG_ 221 Freq_PWM3_Fans "Fans,Default=20kHz"; +CM_ SG_ 221 Freq_PWM2_SBX "SBX,Default=313Hz"; +CM_ BO_ 225 "Cycle Time: 100ms"; +CM_ BO_ 224 "Cycle Time: 50ms"; +CM_ SG_ 224 ACU_AS_Mission "AS Mission Selection"; +CM_ BO_ 263 "Cycle time: 100ms"; +CM_ BO_ 261 "Cycle time: 100ms"; +CM_ BO_ 260 "Cycle time: 10ms"; +CM_ BO_ 258 "Cycle time: 1s"; +BA_DEF_ "BusType" STRING ; +BA_DEF_ "MultiplexExtEnabled" ENUM "No","Yes"; +BA_DEF_DEF_ "BusType" "CAN"; +BA_DEF_DEF_ "MultiplexExtEnabled" "No"; +VAL_ 12 AMS_Error_Kind 5 "Shunt Overtemperature" 4 "Shunt Overcurrent" 3 "Shunt Timeout" 2 "Slave Panic" 1 "Slave Timeout" 0 "None" ; +VAL_ 1026 STW_Param_Set 10 "TC_Slipref" 9 "TC_Mumax" 8 "TC_I" 0 "SpeedLimit" 1 "Torque Limit" 2 "PowerLimit" 3 "Discipline" 4 "TV_on" 5 "TC_on" 6 "Reku_on" 7 "TC_P" ; +VAL_ 10 AMS_State 0 "TS_INACTIVE" 1 "TS_ACTIVE" 2 "TS_PRECHARGE" 3 "TS_DISCHARGE" 4 "TS_ERROR" ; +VAL_ 9 AMS_SlavePanic_Kind 0 "Overtemperature" 1 "Undertemperature" 2 "Overvoltage" 3 "Undervoltage" 4 "Too_few_temp_sensors" 5 "Open_cell_connection" ; +VAL_ 1040 Mission_selection 1 "MissionSelection_acceleration" 2 "MissionSelection_skidpad" 3 "MissionSelection_trackdrive" 4 "MissionSelection_braketest" 5 "MissionSelection_inspection" 6 "MissionSelection_autocross" 7 "MissionSelection_manual" ; +VAL_ 1024 Mission_selection 1 "MissionSelection_acceleration" 2 "MissionSelection_skidpad" 3 "MissionSelection_trackdrive" 4 "MissionSelection_braketest" 5 "MissionSelection_inspection" 6 "MissionSelection_autocross" 7 "MissionSelection_manual" ; +VAL_ 1042 iniChk_state 0 "Start" 1 "WD_Check" 2 "WD_OK" 3 "ASB_Check_1" 4 "ASB_Check_2" 5 "Wait_TS" 6 "EBS_Check_A" 7 "EBS_Check_B" 8 "Done" 9 "Error" ; +VAL_ 1042 AS_State_STW 0 "AS_Off" 1 "AS_Manual" 2 "AS_Ready" 3 "AS_Driving" 4 "AS_Finished" 5 "AS_Emergency" ; +VAL_ 1042 R2D_Progress 0 "R2D_None" 1 "R2D_TSMS" 2 "R2D_TSActive" 3 "R2D_Resetting_Nodes" 4 "R2D_Resetting_Comms" 5 "R2D_Waiting_Init" 6 "R2D_Init_Stage1" 7 "R2D_Init_Stage2" 15 "R2D_Init_Success" ; + diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/CAN1_Charger.dbc b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/CAN1_Charger.dbc new file mode 100644 index 0000000..19bad03 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/CAN1_Charger.dbc @@ -0,0 +1,1434 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: VN200 PG ACU SSU TTS_RL TTS_RR TTS_FR TTS_FL Shunt AMS ABX SDCL PDU PDMV STW EPSC + + +BO_ 3221225472 VECTOR__INDEPENDENT_SIG_MSG: 0 Vector__XXX + SG_ AMS_Slave_T32 : 0|8@1- (1,0) [-128|127] "" Vector__XXX + SG_ New_Signal_712 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ New_Signal_711 : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ PDU_mode_valve_1_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_sensorbox_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_led3_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_led2_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_led1_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_mode_valve_1_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_sensorbox_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 0|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 0|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 0|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PG_Errorbit : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ TTS_NewID : 0|2@1+ (1,0) [0|3] "" Vector__XXX + SG_ PG_ready : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ PG_active : 0|1@1+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_Heartbeat : 0|1@1- (1,0) [0|0] "" Vector__XXX + SG_ Latitude : 0|16@1- (0.005,0) [-163.84|163.835] "" Vector__XXX + SG_ Longitude : 0|16@1- (0.05,0) [-1638.4|1638.35] "" Vector__XXX + SG_ UncertaintyN : 0|16@1+ (0.0001,0) [0|6.5535] "" Vector__XXX + SG_ UncertaintyE : 0|16@1+ (0.0001,0) [0|6.5535] "" Vector__XXX + SG_ AccAngZ : 0|20@1- (0.0001,0) [-52.4288|52.4287] "" Vector__XXX + SG_ AccAngY : 0|20@1- (0.0001,0) [-52.4288|52.4287] "" Vector__XXX + SG_ AccAngX : 0|20@1- (0.0001,0) [0|0] "" Vector__XXX + SG_ AccLinZ : 0|20@1- (0.0001,0) [-52.4288|52.4287] "" Vector__XXX + SG_ AccLinY : 0|20@1- (0.0001,0) [-52.4288|52.4287] "" Vector__XXX + SG_ AccLinX : 0|20@1- (0.0001,0) [-52.4288|52.4287] "" Vector__XXX + SG_ UncertaintyN : 0|16@1+ (0.0001,0) [0|6.5535] "" Vector__XXX + SG_ UncertaintyE : 0|16@1+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ Longitude : 0|16@1- (0.05,0) [-1638.4|1638.35] "" Vector__XXX + SG_ Latitude : 0|16@1- (0.005,0) [-163.84|163.835] "" Vector__XXX + SG_ VelLinZ : 0|16@1+ (0.001,0) [0|0] "" Vector__XXX + SG_ VelLinY : 0|16@1+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ VelLinX : 0|16@1+ (0.001,0) [0|0] "" Vector__XXX + SG_ Uncertainity : 0|16@1+ (0.0001,0) [0|6.5535] "" Vector__XXX + SG_ Yaw : 0|16@1- (0.001,0) [-32.768|32.767] "" Vector__XXX + SG_ Pitch : 0|16@1- (0.001,0) [-32.768|32.767] "" Vector__XXX + SG_ Roll : 0|16@1- (0.001,0) [-32.768|32.767] "" Vector__XXX + SG_ Uncertainty : 0|16@1+ (0.0001,0) [0|6.5535] "" Vector__XXX + SG_ AMS_Slave9_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave9_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave8_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 0|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 0|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 0|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 0|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 0|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 0|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 0|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 0|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 0|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 0|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_Slave11_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave11_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave10_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ PG_percent : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PG_state : 0|8@1+ (1,0) [0|3] "" Vector__XXX + SG_ ABX_Accel_Z : 0|16@1- (0.001,0) [-32.768|32.767] "" Vector__XXX + SG_ ABX_Accel_Y : 0|16@1- (0.001,0) [-32.768|32.767] "" Vector__XXX + SG_ ABX_Accel_X : 0|16@1- (0.001,0) [-32.768|32.767] "" Vector__XXX + SG_ ABX_Hyd_PB : 0|12@1+ (0.1,0) [0|409.5] "" Vector__XXX + SG_ ABX_Hyd_PA : 0|12@1+ (0.1,0) [0|409.5] "" Vector__XXX + SG_ ABX_ParamConfirm : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PG_inverter_voltage : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PG_temperature : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ PG_State : 0|3@1+ (1,0) [0|7] "" Vector__XXX + SG_ PG_Powerground_Status : 0|8@1+ (1,0) [0|100] "" Vector__XXX + SG_ PG_SOC : 0|12@1+ (1,0) [0|0] "" Vector__XXX + SG_ PG_Error : 0|8@1+ (1,0) [0|100] "" Vector__XXX + SG_ PG_current_measurement : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ PG_battery_voltage : 0|8@1+ (1,0) [0|4095] "" Vector__XXX + SG_ ABX_Steering_Angle_Right : 0|8@1- (0.0156862745,0) [-2.007843136|1.9921568615] "" Vector__XXX + SG_ ABX_Steering_Angle_Left : 0|8@1- (0.0156862745,0) [-2.007843136|1.9921568615] "" Vector__XXX + SG_ ABX_Speed_RR : 0|8@1+ (0.2,0) [0|51] "" Vector__XXX + SG_ ABX_Speed_RL : 0|8@1+ (0.2,0) [0|51] "" Vector__XXX + SG_ ABX_Speed_FR : 0|8@1+ (0.2,0) [0|51] "" Vector__XXX + SG_ ABX_Speed_FL : 0|8@1+ (0.2,0) [0|51] "" Vector__XXX + SG_ ACU_Steering_Angle_Left : 0|8@1- (0.0156862745,0) [-2.007843136|1.9921568615] "" Vector__XXX + SG_ ACU_Steering_Angle_Right : 0|8@1- (0.0156862745,0) [-2.007843136|1.9921568615] "" Vector__XXX + SG_ ACU_Speed_Target_right : 0|8@1+ (1.2,0) [0|306] "m/s" Vector__XXX + SG_ ACU_Speed_Target_left : 0|8@1+ (1.2,0) [0|306] "" Vector__XXX + SG_ ACU_PG : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ACU_DRS : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ACU_Cones_Actual : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ ACU_Cones_All : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ ACU_Lap_Count : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ ACU_AS_OK : 0|1@1+ (1,0) [0|1] "Bool" Vector__XXX + SG_ ACU_AS_Mission_Complete : 0|1@1+ (1,0) [0|1] "Bool" Vector__XXX + SG_ AMS_Slave0_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave0_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave1_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave2_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave3_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave4_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave5_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave6_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T7 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T6 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T5 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T4 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T3 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T2 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T1 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T0 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T15 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T14 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T13 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T12 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T11 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T10 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T9 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T8 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T23 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T22 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T21 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T20 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T19 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T18 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T17 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T16 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T31 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T30 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T29 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T28 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T27 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T26 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T25 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ AMS_Slave7_T24 : 0|8@1- (1,0) [-128|127] "degC" Vector__XXX + SG_ ABX_ConMon_Error : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ ACU_AllowTorque : 0|1@1+ (1,0) [0|1] "bool" Vector__XXX + SG_ ACU_Reset : 0|1@1+ (1,0) [0|1] "bool" Vector__XXX + SG_ ACU_Power_Off : 0|1@1+ (1,0) [0|1] "bool" Vector__XXX + SG_ ACU_AS_State : 0|3@1+ (1,0) [0|5] "" Vector__XXX + SG_ ACU_AS_Mission : 0|3@1+ (1,0) [0|7] "int" Vector__XXX + SG_ ABX_LV_SoC : 0|8@1+ (1,0) [0|100] "%" Vector__XXX + SG_ ABX_Distance_total : 0|16@1+ (0.01,0) [0|655.35] "km" Vector__XXX + SG_ ABX_Distance_session : 0|16@1+ (1,0) [0|65535] "m" Vector__XXX + SG_ ABX_CS_T_MotR : 0|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_CS_T_MotL : 0|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_CS_T_InvR : 0|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_CS_T_InvL : 0|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_CS_P_MotRIn : 0|8@1+ (0.02,0) [0|4] "bar" Vector__XXX + SG_ ABX_CS_T_MotIn : 0|10@1+ (0.1,0) [0|102.3] "�C" Vector__XXX + SG_ ABX_CS_T_InvIn : 0|10@1+ (0.1,0) [0|102.3] "�C" Vector__XXX + SG_ ABX_CS_P_MotLIn : 0|8@1+ (0.02,0) [0|4] "bar" Vector__XXX + SG_ ABX_CS_P_InvIn : 0|8@1+ (0.02,0) [0|4] "bar" Vector__XXX + SG_ ABX_BrakeT_RR : 0|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_BrakeT_RL : 0|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_BrakeT_FR : 0|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_BrakeT_FL : 0|16@1+ (0.01,0) [0|655.35] "�C" Vector__XXX + SG_ ABX_Wheelspeed_RR : 0|16@1- (0.001,0) [-32.768|32.767] "1/s" Vector__XXX + SG_ ABX_Wheelspeed_RL : 0|16@1- (0.001,0) [-32.768|32.767] "1/s" Vector__XXX + SG_ ABX_Wheelspeed_FR : 0|16@1- (0.001,0) [-32.768|32.767] "1/s" Vector__XXX + SG_ ABX_Wheelspeed_FL : 0|16@1- (0.001,0) [-32.768|32.767] "1/s" Vector__XXX + SG_ ABX_Damper_RR : 0|16@1+ (0.01,0) [0|75] "mm" Vector__XXX + SG_ ABX_Damper_FR : 0|16@1+ (0.01,0) [0|75] "mm" Vector__XXX + SG_ ABX_Damper_RL : 0|16@1+ (0.01,0) [0|75] "mm" Vector__XXX + SG_ ABX_Damper_FL : 0|16@1+ (0.01,0) [0|75] "mm" Vector__XXX + SG_ ABX_Sectortime_last : 0|16@1+ (0.01,0) [0|655.35] "s" Vector__XXX + SG_ ABX_Sectortime_best : 0|16@1+ (0.01,0) [0|655.35] "s" Vector__XXX + SG_ ABX_Laptime_last : 0|16@1+ (0.01,0) [0|655.35] "s" Vector__XXX + SG_ ABX_Laptime_best : 0|16@1+ (0.01,0) [0|655.35] "s" Vector__XXX + SG_ ABX_BrakeP_R : 0|12@1+ (0.1,0) [0|160] "bar" Vector__XXX + SG_ ABX_Sectorcounter : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ ABX_Lapcounter : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ ABX_Steering_Angle : 0|8@1- (1,0) [-128|127] "" Vector__XXX + SG_ ABX_Speed : 0|8@1+ (0.2,0) [0|51] "m/s" Vector__XXX + SG_ ABX_BrakeP_F : 0|12@1+ (0.1,0) [0|160] "bar" Vector__XXX + SG_ ABX_APPS_percent : 0|8@1+ (1,0) [0|100] "%" Vector__XXX + SG_ TTS_Status : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ TTS_OutetRight : 0|12@1+ (0.1,0) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_OuterLeft : 0|12@1+ (0.1,0) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_CenterRight : 0|12@1+ (0.1,0) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_CenterLeft : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_Center : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_Status : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ TTS_OuterLeft : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_OuterRight : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_CenterRight : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_CenterLeft : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_Center : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_Status : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ TTS_OuterRight : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_OuterLeft : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_CenterLeft : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_CenterRight : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_Center : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_Status : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ TTS_OuterLeft : 0|12@1+ (0.1,0) [-54.8|354.7] "�C" Vector__XXX + SG_ TTS_OuterRight : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_CenterRight : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_CenterLeft : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ TTS_Center : 0|12@1+ (0.1,0) [0|409.5] "�C" Vector__XXX + SG_ STW_Param_BBal : 0|32@0+ (0.1,0) [0|0] "" Vector__XXX + SG_ STW_Param_Type : 0|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ STW_Param_SLIPREF : 0|32@0+ (0.01,0) [0|1] "" Vector__XXX + SG_ STW_Param_ASRP : 0|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_ASRON : 0|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_ASRI : 0|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_EnduPowerLimit : 0|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_Test3 : 0|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_Test4 : 0|32@0+ (1,0) [0|1] "" Vector__XXX + SG_ STW_Param_MUMAX : 0|32@0+ (0.1,0) [0|1] "" Vector__XXX + SG_ SSU_AirTemp : 0|16@1- (0.1,0) [-20|80] "�C" Vector__XXX + SG_ SSU_AirPressure : 0|16@1- (1,0) [-1000|1000] "Pa" Vector__XXX + SG_ asms_state : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ sdc_state_1 : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ sdc_state_2 : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ sdc_state_3 : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ heartbeat_ok : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ sdcl_sdc_ready : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ts_start_muxed : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ latch_init_open : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ latch_closed : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ latch_reopened : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ as_mission : 0|3@1+ (1,0) [0|7] "" Vector__XXX + SG_ as_close_sdc : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ sdcl_heartbeat : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ asb_error : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ as_mission : 0|3@1+ (1,0) [0|7] "" Vector__XXX + SG_ PDU_servos_regler_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_lidar_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_ACU_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_PWM_radiator_fans_rx : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_servo_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_misc_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_alwayson_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_shutdown_circuit_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_ebs_valve_2_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_cs_valve_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_inverter_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_steering_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_ebs_valve_1_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_aggregat_rx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_PWM_TSAC_fans_rx : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_PWM_aggregat_rx : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_PWM_pump_rx : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_checksum_rx : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_ebs_valve_2_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_PWM_TSAC_fans : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_servos_regler_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_ACU_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_lidar_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_servo_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_misc_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_alwayson_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_shutdown_circuit_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_aggregat_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_inverter_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_steering_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_ebs_valve_1_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_cs_valve_tx : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ PDU_PWM_radiatot_fans_tx : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_PWM_aggregat : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_PWM_pump : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ PDU_checksum_tx : 0|8@0+ (1,0) [0|255] "" Vector__XXX + SG_ pdm_output2_shortcircuit : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_output1_shortcircuit : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_output2_cablebreak : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_output1_cablebreak : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_output2_controllerrange : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_output1_controllerrange : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_temperature_shutdown : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_temperature_warning : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_analoginput_currentoverload : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_analoginput_shortcircuit : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_analoginput_cablebreak : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_analoginput_middleposition : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_canbus_statewarning : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_canbus_startupmissing : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_canbus_timeout : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_powersupply_greater_32v : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ pdm_powersupply_less_8v : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ PDM_analoginput : 0|16@1+ (1,0) [0|65535] "%." Vector__XXX + SG_ Mission_selection : 0|3@1+ (1,0) [1|7] "" Vector__XXX + SG_ Mission_selection : 0|3@1+ (1,0) [1|7] "" Vector__XXX + SG_ EPSC_measured_steering_angle : 0|16@0- (7.20721E-005,0) [-13875|13875] "part of full steering" Vector__XXX + SG_ EPSC_measured_rpm : 0|12@0- (0.1,0) [-204.8|204.7] "rpm" Vector__XXX + SG_ EPSC_measured_current : 0|8@0+ (0.1,0) [0|25.5] "A" Vector__XXX + SG_ EPSC_measured_voltage : 0|8@0+ (0.1,0) [0|20] "V" Vector__XXX + SG_ EPSC_measured_temperature : 0|10@0+ (0.1,0) [0|102.3] "°C" Vector__XXX + SG_ EPSC_measured_internal_temp : 0|10@0+ (0.1,0) [0|102.3] "°C" Vector__XXX + SG_ EPSC_desired_steering_angle : 0|16@0- (0.0001,0) [-10000|10000] "" Vector__XXX + SG_ STW_button_PG : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ STW_button_left : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ STW_button_right : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ STW_button_DRS : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ STW_button_Enter : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ InvL_ready : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ iniChk_state : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ InvR_ready : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ AS_State_STW : 0|3@1+ (1,0) [0|5] "" Vector__XXX + SG_ SDC_BFL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SDC_BRL : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SDC_ACC : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ SDC_HVB : 0|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Lap_Count : 0|6@1+ (1,0) [0|64] "" Vector__XXX + SG_ ERR_SDC : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_AMS : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_InvL : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_InvR : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_IniChk : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_ConMon : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_SCS : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_sBSPD : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_APPSp : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_AS : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_ROS : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_RES : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ ERR_PDU : 0|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ R2D_Progress : 0|4@1+ (1,0) [0|15] "" Vector__XXX + SG_ PDU_alwayson_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_misc_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_inverter_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_shutdown_circuit_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_tsac__fans_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_pump_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_aggregat_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_steering_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_ebs_valve_1_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_ebs_valve_2_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_mode_cs_valve_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_mode_gss_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_radiator_fans_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_ACU_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_servos_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ PDU_lidar_curr : 0|16@0+ (1,0) [0|65535] "" Vector__XXX + SG_ EPSC_Ki_curr : 0|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_Kp_curr : 0|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_Ki_rpm : 0|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_Kp_rpm : 0|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_Ki_pos : 0|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_Kp_pos : 0|8@0+ (0.1,0) [0|25.6] "" Vector__XXX + SG_ EPSC_should_calibrate : 0|1@0- (1,0) [0|1] "" Vector__XXX + SG_ EPSC_should_change_mode : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_mode : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_flag3 : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_flag4 : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_flag5 : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_flag6 : 0|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ EPSC_flag7 : 0|1@0+ (1,0) [0|1] "" Vector__XXX + +BO_ 140 AMS_Slave12Status1: 8 Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + +BO_ 1737 AMS_Slave12_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1732 AMS_Slave12_Log4: 8 Vector__XXX + SG_ AMS_Slave12_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave12_V16 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1731 AMS_Slave12_Log3: 8 Vector__XXX + SG_ AMS_Slave12_V15 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V14 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V13 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V12 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1730 AMS_Slave12_Log2: 8 Vector__XXX + SG_ AMS_Slave12_V9 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V8 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V11 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V10 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1738 AMS_Slave12_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1729 AMS_Slave12_Log1: 8 Vector__XXX + SG_ AMS_Slave12_V7 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V6 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V5 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V4 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1728 AMS_Slave12_Log0: 8 Vector__XXX + SG_ AMS_Slave12_V3 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V2 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V1 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V0 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1722 AMS_Slave11_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1706 AMS_Slave10_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1690 AMS_Slave9_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1674 AMS_Slave8_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1658 AMS_Slave7_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1642 AMS_Slave6_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1626 AMS_Slave5_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1610 AMS_Slave4_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1594 AMS_Slave3_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1578 AMS_Slave2_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1562 AMS_Slave1_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1721 AMS_Slave11_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1705 AMS_Slave10_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1689 AMS_Slave9_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1673 AMS_Slave8_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1657 AMS_Slave7_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1641 AMS_Slave6_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1625 AMS_Slave5_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1609 AMS_Slave4_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1593 AMS_Slave3_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1577 AMS_Slave2_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1561 AMS_Slave1_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1546 AMS_Slave0_Log10: 8 Vector__XXX + SG_ AMS_SlaveID_T41 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T40 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1545 AMS_Slave0_Log9: 8 Vector__XXX + SG_ AMS_SlaveID_T39 : 56|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T38 : 48|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T37 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T36 : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T35 : 24|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T34 : 16|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T33 : 8|8@1- (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveID_T32 : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 1684 AMS_Slave9_Log4: 8 Vector__XXX + SG_ AMS_Slave9_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave9_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1683 AMS_Slave9_Log3: 8 Vector__XXX + SG_ AMS_Slave9_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1682 AMS_Slave9_Log2: 8 Vector__XXX + SG_ AMS_Slave9_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1681 AMS_Slave9_Log1: 8 Vector__XXX + SG_ AMS_Slave9_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1680 AMS_Slave9_Log0: 8 Vector__XXX + SG_ AMS_Slave9_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave9_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 136 AMS_Slave8Status: 8 Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|159.375] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + +BO_ 1668 AMS_Slave8_Log4: 8 Vector__XXX + SG_ AMS_Slave8_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave8_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1667 AMS_Slave8_Log3: 8 Vector__XXX + SG_ AMS_Slave8_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1666 AMS_Slave8_Log2: 8 Vector__XXX + SG_ AMS_Slave8_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1665 AMS_Slave8_Log1: 8 Vector__XXX + SG_ AMS_Slave8_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1664 AMS_Slave8_Log0: 8 Vector__XXX + SG_ AMS_Slave8_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave8_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 139 AMS_Slave11Status: 8 Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + +BO_ 138 AMS_Slave10Status: 8 Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + +BO_ 1716 AMS_Slave11_Log4: 8 Vector__XXX + SG_ AMS_Slave12_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave12_V16 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1715 AMS_Slave11_Log3: 8 Vector__XXX + SG_ AMS_Slave12_V15 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V14 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V13 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V12 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1714 AMS_Slave11_Log2: 8 Vector__XXX + SG_ AMS_Slave12_V9 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V8 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V11 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V10 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1713 AMS_Slave11_Log1: 8 Vector__XXX + SG_ AMS_Slave12_V7 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V6 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V5 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V4 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1712 AMS_Slave11_Log0: 8 Vector__XXX + SG_ AMS_Slave12_V3 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V2 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V1 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave12_V0 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1700 AMS_Slave10_Log4: 8 Vector__XXX + SG_ AMS_Slave10_FailedSensors : 16|32@1+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave10_V16 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1699 AMS_Slave10_Log3: 8 Vector__XXX + SG_ AMS_Slave10_V15 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V14 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V13 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V12 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1698 AMS_Slave10_Log2: 8 Vector__XXX + SG_ AMS_Slave10_V9 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V8 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V11 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V10 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1697 AMS_Slave10_Log1: 8 Vector__XXX + SG_ AMS_Slave10_V7 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V6 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V5 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V4 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 1696 AMS_Slave10_Log0: 8 Vector__XXX + SG_ AMS_Slave10_V3 : 55|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V2 : 39|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V1 : 23|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + SG_ AMS_Slave10_V0 : 7|16@0+ (0.001,0) [0|65.535] "" Vector__XXX + +BO_ 137 AMS_Slave9Status: 8 Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [-128|127] "%" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 1536 AMS_Slave0_Log0: 8 AMS + SG_ AMS_Slave0_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V0 : 7|16@0+ (0.001,0) [0|6.5535] "mV" Vector__XXX + +BO_ 1537 AMS_Slave0_Log1: 8 AMS + SG_ AMS_Slave0_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1538 AMS_Slave0_Log2: 8 AMS + SG_ AMS_Slave0_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1539 AMS_Slave0_Log3: 8 AMS + SG_ AMS_Slave0_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave0_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1540 AMS_Slave0_Log4: 6 AMS + SG_ AMS_Slave0_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave0_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1552 AMS_Slave1_Log0: 8 AMS + SG_ AMS_Slave1_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1553 AMS_Slave1_Log1: 8 AMS + SG_ AMS_Slave1_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1554 AMS_Slave1_Log2: 8 AMS + SG_ AMS_Slave1_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V8 : 7|16@0+ (0.001,0) [0|65.535] "V" Vector__XXX + +BO_ 1555 AMS_Slave1_Log3: 8 AMS + SG_ AMS_Slave1_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave1_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1556 AMS_Slave1_Log4: 6 AMS + SG_ AMS_Slave1_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave1_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1568 AMS_Slave2_Log0: 8 AMS + SG_ AMS_Slave2_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1569 AMS_Slave2_Log1: 8 AMS + SG_ AMS_Slave2_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1570 AMS_Slave2_Log2: 8 AMS + SG_ AMS_Slave2_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1571 AMS_Slave2_Log3: 8 AMS + SG_ AMS_Slave2_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave2_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1572 AMS_Slave2_Log4: 6 AMS + SG_ AMS_Slave2_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave2_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1584 AMS_Slave3_Log0: 8 AMS + SG_ AMS_Slave3_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1585 AMS_Slave3_Log1: 8 AMS + SG_ AMS_Slave3_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1586 AMS_Slave3_Log2: 8 AMS + SG_ AMS_Slave3_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1587 AMS_Slave3_Log3: 8 AMS + SG_ AMS_Slave3_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave3_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1588 AMS_Slave3_Log4: 6 AMS + SG_ AMS_Slave3_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave3_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1600 AMS_Slave4_Log0: 8 AMS + SG_ AMS_Slave4_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1601 AMS_Slave4_Log1: 8 AMS + SG_ AMS_Slave4_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1602 AMS_Slave4_Log2: 8 AMS + SG_ AMS_Slave4_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1603 AMS_Slave4_Log3: 8 AMS + SG_ AMS_Slave4_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave4_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1604 AMS_Slave4_Log4: 6 AMS + SG_ AMS_Slave4_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave4_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1616 AMS_Slave5_Log0: 8 AMS + SG_ AMS_Slave5_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1617 AMS_Slave5_Log1: 8 AMS + SG_ AMS_Slave5_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1618 AMS_Slave5_Log2: 8 AMS + SG_ AMS_Slave5_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1619 AMS_Slave5_Log3: 8 AMS + SG_ AMS_Slave5_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave5_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1620 AMS_Slave5_Log4: 6 AMS + SG_ AMS_Slave5_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave5_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1632 AMS_Slave6_Log0: 8 AMS + SG_ AMS_Slave6_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1633 AMS_Slave6_Log1: 8 AMS + SG_ AMS_Slave6_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V6 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1634 AMS_Slave6_Log2: 8 AMS + SG_ AMS_Slave6_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1635 AMS_Slave6_Log3: 8 AMS + SG_ AMS_Slave6_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave6_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1636 AMS_Slave6_Log4: 6 AMS + SG_ AMS_Slave6_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave6_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1648 AMS_Slave7_Log0: 8 AMS + SG_ AMS_Slave7_V1 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V3 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V2 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V0 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1649 AMS_Slave7_Log1: 8 AMS + SG_ AMS_Slave7_V7 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V6 : 39|16@0+ (0.001,0) [0|65.535] "V" Vector__XXX + SG_ AMS_Slave7_V5 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V4 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1650 AMS_Slave7_Log2: 8 AMS + SG_ AMS_Slave7_V11 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V10 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V9 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V8 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1651 AMS_Slave7_Log3: 8 AMS + SG_ AMS_Slave7_V15 : 55|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V14 : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V13 : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_Slave7_V12 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 1652 AMS_Slave7_Log4: 6 AMS + SG_ AMS_Slave7_FailedSensors : 23|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_Slave7_V16 : 7|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + +BO_ 135 AMS_Slave7Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|255] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 134 AMS_Slave6Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 133 AMS_Slave5Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 132 AMS_Slave4Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|1] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 131 AMS_Slave3Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 130 AMS_Slave2Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 129 AMS_Slave1Status: 8 AMS + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_Sensor : 15|8@0+ (1,0) [0|1] "%" Vector__XXX + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 12 AMS_Error: 2 AMS + SG_ AMS_Error_Arg : 8|8@1- (1,0) [0|0] "" ABX + SG_ AMS_Error_Kind : 0|8@1- (1,0) [0|0] "" ABX + +BO_ 128 AMS_Slave0Status: 8 AMS + SG_ AMS_SlaveStatus_MinCellVolt : 23|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_ID : 6|7@0+ (1,0) [0|0] "" Vector__XXX + SG_ AMS_SlaveStatus_Error : 7|1@0+ (1,0) [0|1] "" Vector__XXX + SG_ AMS_SlaveStatus_Temp_sensor : 15|8@0+ (1,0) [-128|127] "%" Vector__XXX + SG_ AMS_SlaveStatus_MaxCellVolt : 39|16@0+ (0.001,0) [0|6.5535] "V" Vector__XXX + SG_ AMS_SlaveStatus_MaxTemp : 51|12@0- (0.0625,0) [0|1] "degC" Vector__XXX + +BO_ 10 AMS_Status: 6 AMS + SG_ AMS_State : 0|7@1+ (1,0) [0|1] "" ABX + SG_ SDC_Closed : 7|1@1+ (1,0) [0|1] "" ABX + SG_ SOC : 8|8@1+ (1,0) [0|100] "%" ABX + SG_ Min_cell_volt : 23|16@0+ (0.001,0) [0|65.535] "V" ABX + SG_ Max_cell_temp : 39|16@0+ (0.0625,0) [0|4095.94] "°C" ABX + +BO_ 9 AMS_SlavePanic: 8 AMS + SG_ AMS_SlavePanic_Kind : 15|8@0+ (1,0) [0|7.20576E+016] "" ABX + SG_ AMS_SlavePanic_SlaveID : 0|8@1+ (1,0) [0|255] "" ABX + SG_ AMS_SlavePanic_Arg : 23|32@0+ (1,0) [0|7.20576E+016] "" ABX + +BO_ 11 AMS_In: 1 ABX + SG_ TS_activate : 0|1@1+ (1,0) [0|1] "" AMS + SG_ Lap_Number : 2|6@1+ (1,0) [0|64] "Laps" AMS + SG_ Inverters_discharged : 1|1@1+ (1,0) [0|1] "" AMS + +BO_ 1313 Shunt_Current: 6 Shunt + SG_ Shunt_Current : 23|32@0- (0.001,0) [-2000000|2000000] "A" AMS + +BO_ 1314 Shunt_Voltage1: 6 Shunt + SG_ Shunt_Voltage1 : 23|32@0- (0.001,0) [-2000000|2000000] "V" AMS + +BO_ 1315 Shunt_Voltage2: 6 Shunt + SG_ Shunt_Voltage2 : 23|32@0- (0.001,0) [-2000000|2000000] "V" AMS + +BO_ 1316 Shunt_Voltage3: 6 Shunt + SG_ Shunt_Voltage3 : 23|32@0- (0.001,0) [-2000000|2000000] "V" AMS + +BO_ 1317 Shunt_Temperature: 6 Shunt + SG_ Shunt_Temperature : 23|32@0+ (0.1,0) [0|1000] "°C" ABX + + + +CM_ BO_ 3221225472 "This is a message for not used signals, created by Vector CANdb++ DBC OLE DB Provider."; +CM_ SG_ 3221225472 ACU_AS_Mission "AS Mission Selection"; +CM_ SG_ 3221225472 EPSC_measured_steering_angle "+-13875 equals to +-1.0, so the factor is 1/13875"; +BA_DEF_ "BusType" STRING ; +BA_DEF_DEF_ "BusType" ""; +BA_ "BusType" "CAN"; +VAL_ 3221225472 STW_Param_Type 0 "BrakeBalance" 1 "TractionControl1" 2 "TractionControl2" 3 "TorqueMap" 4 "Test1" 5 "Test2" 6 "Test3" 7 "Test4" ; +VAL_ 3221225472 STW_Param_ASRON 0 "OFF" 1 "ON" ; +VAL_ 3221225472 Mission_selection 1 "MissionSelection_acceleration" 2 "MissionSelection_skidpad" 3 "MissionSelection_trackdrive" 4 "MissionSelection_braketest" 5 "MissionSelection_inspection" 6 "MissionSelection_autocross" 7 "MissionSelection_manual" ; +VAL_ 3221225472 iniChk_state 0 "Start" 1 "WD_Check" 2 "WD_OK" 3 "ASB_Check_1" 4 "ASB_Check_2" 5 "Wait_TS" 6 "EBS_Check_A" 7 "EBS_Check_B" 8 "Done" 9 "Error" ; +VAL_ 3221225472 AS_State_STW 0 "AS_Off" 1 "AS_Manual" 2 "AS_Ready" 3 "AS_Driving" 4 "AS_Finished" 5 "AS_Emergency" ; +VAL_ 3221225472 R2D_Progress 0 "R2D_None" 1 "R2D_TSMS" 2 "R2D_TSActive" 3 "R2D_Resetting_Nodes" 4 "R2D_Resetting_Comms" 5 "R2D_Waiting_Init" 6 "R2D_Init_Stage1" 7 "R2D_Init_Stage2" 15 "R2D_Init_Success" ; +VAL_ 12 AMS_Error_Kind 5 "Shunt Overtemperature" 4 "Shunt Overcurrent" 3 "Shunt Timeout" 2 "Slave Panic" 1 "Slave Timeout" 0 "None" ; +VAL_ 10 AMS_State 0 "TS_INACTIVE" 1 "TS_ACTIVE" 2 "TS_PRECHARGE" 3 "TS_DISCHARGE" 4 "TS_ERROR" ; +VAL_ 9 AMS_SlavePanic_Kind 0 "Overtemperature" 1 "Undertemperature" 2 "Overvoltage" 3 "Undervoltage" 4 "Too_few_working_temperature_sensors" 5 "Open_cell_connection" ; + diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/CAN2_FS_DVLogger.dbc b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/CAN2_FS_DVLogger.dbc new file mode 100644 index 0000000..2be12b1 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/CAN2_FS_DVLogger.dbc @@ -0,0 +1,99 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: ABX RES FS_Datalogger + + +BO_ 1347 RES_Czech: 8 Vector__XXX + SG_ RES_Switch : 2|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ RES_Signal_Quality : 8|8@1+ (1,0) [0|100] "" Vector__XXX + SG_ RES_Go : 1|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ RES_EStop : 0|1@1+ (1,0) [0|1] "" Vector__XXX + +BO_ 1072 FS_Datalogger_Status: 6 FS_Datalogger + SG_ Current : 32|16@1+ (64,0) [0|4194240] "mA" ABX + SG_ Voltage : 16|16@1+ (16,0) [0|1048560] "mV" ABX + SG_ Status_Triggered_Current : 11|1@1- (1,0) [0|0] "" ABX + SG_ Status_Triggered_Voltage : 10|1@1- (1,0) [0|0] "" ABX + SG_ Status_Logging : 9|1@1- (1,0) [0|0] "" ABX + SG_ Status_Ready : 8|1@1- (1,0) [0|0] "" ABX + SG_ MsgCnt : 0|8@1+ (1,0) [0|255] "" ABX + +BO_ 1298 DV_ContinuousMonitoring: 1 ABX + SG_ Pressure_charged : 5|1@1+ (1,0) [0|1] "bool" FS_Datalogger + SG_ PDU_comm_alive : 2|1@1+ (1,0) [0|1] "bool" FS_Datalogger + SG_ Position_sensors_closed : 4|1@1+ (1,0) [0|1] "bool" FS_Datalogger + SG_ AS_error : 3|1@1+ (1,0) [0|1] "bool" FS_Datalogger + SG_ AS_comm_alive : 1|1@1+ (1,0) [0|1] "bool" FS_Datalogger + SG_ SDC_opened : 0|1@1+ (1,0) [0|1] "bool" FS_Datalogger + +BO_ 1280 DV_driving_dynamics_1: 8 ABX + SG_ Speed_actual : 0|8@1+ (1,0) [0|250] "km/h" FS_Datalogger + SG_ Speed_target : 8|8@1+ (1,0) [0|250] "km/h" FS_Datalogger + SG_ Steering_angle_actual : 16|8@1- (0.5,0) [-60|60] "°" FS_Datalogger + SG_ Steering_angle_target : 24|8@1- (0.5,0) [-60|60] "°" FS_Datalogger + SG_ Brake_hydr_actual : 32|8@1+ (1,0) [0|100] "%" FS_Datalogger + SG_ Brake_hydr_target : 40|8@1+ (1,0) [0|100] "%" FS_Datalogger + SG_ Motor_moment_actual : 48|8@1- (1,0) [-100|100] "%" FS_Datalogger + SG_ Motor_moment_target : 56|8@1- (1,0) [-100|100] "%" FS_Datalogger + +BO_ 1281 DV_driving_dynamics_2: 6 ABX + SG_ Acceleration_longitudinal : 0|16@1- (0.00195313,0) [-50|50] "m/s^2" FS_Datalogger + SG_ Acceleration_lateral : 16|16@1- (0.00195313,0) [-50|50] "m/s^2" FS_Datalogger + SG_ Yaw_rate : 32|16@1- (0.0078125,0) [-200|200] "°/s" FS_Datalogger + +BO_ 1282 DV_system_status: 5 ABX + SG_ AS_state : 0|3@1+ (1,0) [1|5] "" FS_Datalogger + SG_ EBS_state : 3|2@1+ (1,0) [1|3] "" FS_Datalogger + SG_ AMI_state : 5|3@1+ (1,0) [1|6] "" FS_Datalogger + SG_ Steering_state : 8|1@1+ (1,0) [0|1] "" FS_Datalogger + SG_ Service_brake_state : 9|2@1+ (1,0) [1|3] "" FS_Datalogger + SG_ Lap_counter : 11|4@1+ (1,0) [0|10] "" FS_Datalogger + SG_ Cones_count_actual : 15|8@1+ (1,0) [0|250] "" FS_Datalogger + SG_ Cones_count_all : 23|17@1+ (1,0) [0|131000] "" FS_Datalogger + +BO_ 1297 DV_SEBSS_Pressures: 8 ABX + SG_ EBS_Pressure_tank_A : 0|16@1+ (0.1,0) [0|50] "Bar" FS_Datalogger + SG_ EBS_Pressure_tank_B : 16|16@1+ (0.1,0) [0|50] "Bar" FS_Datalogger + SG_ Brake_Pressure_front : 32|16@1+ (0.1,0) [0|200] "Bar" FS_Datalogger + SG_ Brake_Pressure_rear : 48|16@1+ (0.1,0) [0|200] "Bar" FS_Datalogger + + + +VAL_ 1282 AS_state 1 "AS_state_off" 2 "AS_state_ready" 3 "AS_state_driving" 4 "AS_state_emergency_brake" 5 "AS_state_finish" ; +VAL_ 1282 EBS_state 1 "EBS_state_unavailable" 2 "EBS_state_armed" 3 "EBS_state_activated" ; +VAL_ 1282 AMI_state 1 "AMI_state_acceleration" 2 "AMI_state_skidpad" 3 "AMI_state_trackdrive" 4 "AMI_state_braketest" 5 "AMI_state_inspection" 6 "AMI_state_autocross" ; +VAL_ 1282 Service_brake_state 1 "Service_brake_state_disengaged" 2 "Service_brake_state_engaged" 3 "Service_brake_state_available" ; + diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/CAN4_FS_DVLogger_RES.dbc b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/CAN4_FS_DVLogger_RES.dbc new file mode 100644 index 0000000..5253538 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/CAN4_FS_DVLogger_RES.dbc @@ -0,0 +1,96 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: ABX RES FS_Datalogger + + +BO_ 401 RES_PDO: 7 RES + SG_ RES_Signal_Strength : 48|8@1+ (1,0) [0|100] "%" Vector__XXX + SG_ RES_Switch : 1|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ RES_Go_Signal : 2|1@1+ (1,0) [0|1] "" Vector__XXX + SG_ RES_EStop : 0|1@1+ (1,0) [0|1] "" Vector__XXX + +BO_ 0 NMT_Operational: 2 Vector__XXX + SG_ NMT_Node_ID : 8|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ NMT_Command : 0|1@1+ (1,0) [0|1] "" Vector__XXX + +BO_ 1072 FS_Datalogger_Status: 6 FS_Datalogger + SG_ Current : 32|16@1+ (64,0) [0|4194240] "mA" ABX + SG_ Voltage : 16|16@1+ (16,0) [0|1048560] "mV" ABX + SG_ Status_Triggered_Current : 11|1@1- (1,0) [0|0] "" ABX + SG_ Status_Triggered_Voltage : 10|1@1- (1,0) [0|0] "" ABX + SG_ Status_Logging : 9|1@1- (1,0) [0|0] "" ABX + SG_ Status_Ready : 8|1@1- (1,0) [0|0] "" ABX + SG_ MsgCnt : 0|8@1+ (1,0) [0|255] "" ABX + +BO_ 1280 DV_driving_dynamics_1: 8 ABX + SG_ Speed_actual : 0|8@1+ (1,0) [0|250] "km/h" FS_Datalogger + SG_ Speed_target : 8|8@1+ (1,0) [0|250] "km/h" FS_Datalogger + SG_ Steering_angle_actual : 16|8@1- (0.5,0) [-30|30] "°" FS_Datalogger + SG_ Steering_angle_target : 24|8@1- (0.5,0) [-30|30] "°" FS_Datalogger + SG_ Brake_hydr_actual : 32|8@1+ (1,0) [0|100] "%" FS_Datalogger + SG_ Brake_hydr_target : 40|8@1+ (1,0) [0|100] "%" FS_Datalogger + SG_ Motor_moment_actual : 48|8@1- (1,0) [-100|100] "%" FS_Datalogger + SG_ Motor_moment_target : 56|8@1- (1,0) [-128|127] "%" FS_Datalogger + +BO_ 1281 DV_driving_dynamics_2: 6 ABX + SG_ Yaw_rate : 32|16@1- (0.0078125,0) [0|0] "°/s" FS_Datalogger + SG_ Acceleration_longitudinal : 0|16@1- (0.00195313,0) [-50|50] "m/s^2" FS_Datalogger + SG_ Acceleration_lateral : 16|16@1- (0.00195313,0) [-50|50] "m/s^2" FS_Datalogger + +BO_ 1282 DV_system_status: 5 ABX + SG_ AS_state : 0|3@1+ (1,0) [1|5] "" FS_Datalogger + SG_ EBS_state : 3|2@1+ (1,0) [1|3] "" FS_Datalogger + SG_ AMI_state : 5|3@1+ (1,0) [1|6] "" FS_Datalogger + SG_ Steering_state : 8|1@1+ (1,0) [0|1] "" FS_Datalogger + SG_ Service_brake_state : 9|2@1+ (1,0) [1|3] "" FS_Datalogger + SG_ Lap_counter : 11|4@1+ (1,0) [0|10] "" FS_Datalogger + SG_ Cones_count_actual : 15|8@1+ (1,0) [0|250] "" FS_Datalogger + SG_ Cones_count_all : 23|17@1+ (1,0) [0|131000] "" FS_Datalogger + +BO_ 1297 DV_SEBSS_Pressures: 8 ABX + SG_ EBS_Pressure_tank_A : 0|16@1+ (0.1,0) [0|50] "Bar" FS_Datalogger + SG_ EBS_Pressure_tank_B : 16|16@1+ (0.1,0) [0|50] "Bar" FS_Datalogger + SG_ Brake_Pressure_front : 32|16@1+ (0.1,0) [0|200] "Bar" FS_Datalogger + SG_ Brake_Pressure_rear : 48|16@1+ (0.1,0) [0|200] "Bar" FS_Datalogger + + + +CM_ SG_ 0 NMT_Node_ID "Needs to be 17 for RES"; +VAL_ 1282 AS_state 1 "AS_state_off" 2 "AS_state_ready" 3 "AS_state_driving" 4 "AS_state_emergency_brake" 5 "AS_state_finish" ; +VAL_ 1282 EBS_state 1 "EBS_state_unavailable" 2 "EBS_state_armed" 3 "EBS_state_activated" ; +VAL_ 1282 AMI_state 1 "AMI_state_acceleration" 2 "AMI_state_skidpad" 3 "AMI_state_trackdrive" 4 "AMI_state_braketest" 5 "AMI_state_inspection" 6 "AMI_state_autocross" ; +VAL_ 1282 Service_brake_state 1 "Service_brake_state_disengaged" 2 "Service_brake_state_engaged" 3 "Service_brake_state_available" ; + diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/FT25CANOpen.dbc b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/FT25CANOpen.dbc new file mode 100644 index 0000000..c6459b3 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/FT25CANOpen.dbc @@ -0,0 +1,170 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: + + +BO_ 4 New_Message_27: 8 Vector__XXX + SG_ New_Signal_67 : 15|8@1+ (1,0) [0|0] "" Vector__XXX + +BO_ 3 New_Message_26: 8 Vector__XXX + SG_ New_Signal_66 : 15|8@1+ (1,0) [0|0] "" Vector__XXX + +BO_ 2 New_Message_25: 8 Vector__XXX + SG_ New_Signal_65 : 15|8@1+ (1,0) [0|0] "" Vector__XXX + +BO_ 1 New_Message_24: 8 Vector__XXX + SG_ New_Signal_64 : 15|8@1+ (1,0) [0|0] "" Vector__XXX + +BO_ 1409 SDO_T_Node_1: 8 Vector__XXX + SG_ payload : 32|32@1- (1,0) [0|0] "" Vector__XXX + SG_ od_subindex : 24|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ OD_index : 8|16@1+ (1,0) [0|0] "" Vector__XXX + SG_ command_byte : 0|8@1+ (1,0) [0|255] "" Vector__XXX + +BO_ 1410 SDO_T_Node_2: 8 Vector__XXX + SG_ payload : 32|32@1- (1,0) [0|0] "" Vector__XXX + SG_ od_subindex : 24|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ OD_index : 8|16@1+ (1,0) [0|0] "" Vector__XXX + SG_ command_byte : 0|8@1+ (1,0) [0|255] "" Vector__XXX + +BO_ 1538 SDO_R_Node_2: 8 Vector__XXX + SG_ payload : 32|32@1- (1,0) [0|0] "" Vector__XXX + SG_ od_subindex : 24|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ OD_index : 8|16@1+ (1,0) [0|0] "" Vector__XXX + SG_ command_byte : 0|8@1+ (1,0) [0|255] "" Vector__XXX + +BO_ 1537 SDO_R_Node_1: 8 Vector__XXX + SG_ payload : 32|32@1- (1,0) [0|0] "" Vector__XXX + SG_ od_subindex : 24|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ OD_index : 8|16@1+ (1,0) [0|0] "" Vector__XXX + SG_ command_byte : 0|8@1+ (1,0) [0|255] "" Vector__XXX + +BO_ 401 RES_TxPDO: 8 Vector__XXX + SG_ RES_Switch : 1|1@1- (1,0) [0|0] "" Vector__XXX + SG_ RES_Signal_Strength : 8|8@1+ (1,0) [-128|127] "" Vector__XXX + SG_ RES_Go_Signal : 2|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ RES_EStop : 0|1@1+ (1,0) [0|0] "" Vector__XXX + +BO_ 353 EMCY_Node81: 8 Vector__XXX + SG_ Errors : 3|5@1- (1,0) [0|0] "" Vector__XXX + SG_ Error_Register : 2|1@1+ (1,0) [0|0] "" Vector__XXX + SG_ Emergency_Error_Code : 0|2@1+ (1,0) [0|0] "" Vector__XXX + +BO_ 130 EMCY_Node2: 8 Vector__XXX + SG_ Emergency_Error_Code : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ Errors : 3|5@1- (1,0) [0|0] "" Vector__XXX + SG_ Error_Register : 2|1@1+ (1,0) [0|0] "" Vector__XXX + +BO_ 129 EMCY_Node1: 8 Vector__XXX + SG_ Emergency_Error_Code : 0|2@1+ (1,0) [0|0] "" Vector__XXX + SG_ Errors : 3|5@1- (1,0) [0|0] "" Vector__XXX + SG_ Error_Register : 2|1@1+ (1,0) [0|0] "" Vector__XXX + +BO_ 1921 Heartbeat_Node81: 8 Vector__XXX + SG_ Heartbeat : 0|8@1+ (1,0) [0|0] "" Vector__XXX + +BO_ 1794 Heartbeat_Node2: 8 Vector__XXX + SG_ Heartbeat : 0|8@1+ (1,0) [0|0] "" Vector__XXX + +BO_ 1793 Heartbeat_Node1: 8 Vector__XXX + SG_ Heartbeat : 0|8@1+ (1,0) [0|0] "" Vector__XXX + +BO_ 128 SYNC: 1 Vector__XXX + SG_ Sync_frame : 0|8@1- (1,0) [0|0] "" Vector__XXX + +BO_ 0 NMT_Command: 2 Vector__XXX + SG_ Requested_State : 0|8@1+ (1,0) [0|255] "" Vector__XXX + SG_ Node_ID : 8|8@1+ (1,0) [0|255] "" Vector__XXX + +BO_ 514 INV_R_RxPDO_1: 6 Vector__XXX + SG_ Target_Velocity : 16|32@1- (1,0) [-2147483648|2147483647] "" Vector__XXX + SG_ Target_Torque : 0|16@1- (1,0) [-32768|32767] "" Vector__XXX + +BO_ 513 INV_L_RxPDO_1: 6 Vector__XXX + SG_ Target_Velocity : 16|32@1- (1,0) [-2147483648|2147483647] "" Vector__XXX + SG_ Target_Torque : 0|16@1- (1,0) [-32768|32767] "" Vector__XXX + +BO_ 1154 INV_R_TxPDO_4: 8 Vector__XXX + SG_ Velocity_R : 32|32@1- (0.001,0) [-2147483.648|2147483.647] "1/s" Vector__XXX + SG_ ActualFlux_R : 16|16@1- (1,0) [-32768|32767] "" Vector__XXX + SG_ DemandedFlux_R : 0|16@1- (1,0) [-32768|32767] "" Vector__XXX + +BO_ 898 INV_R_TxPDO_3: 8 Vector__XXX + SG_ ActualTorque_R : 48|16@1- (1,0) [-32768|32767] "" Vector__XXX + SG_ DemandedTorque_R : 32|16@1- (1,0) [-32768|32767] "" Vector__XXX + SG_ Errors_R : 16|16@1+ (1,0) [0|65535] "" Vector__XXX + SG_ Warnings_R : 0|16@1+ (1,0) [0|65535] "" Vector__XXX + +BO_ 642 INV_R_TxPDO_2: 7 Vector__XXX + SG_ OperationMode_R : 48|8@1- (1,0) [-128|127] "" Vector__XXX + SG_ Controlword_R : 32|16@1+ (1,0) [0|65535] "" Vector__XXX + SG_ U_phase_R : 0|32@1- (1,0) [-2147483648|2147483647] "V" Vector__XXX + +BO_ 386 INV_R_TxPDO_1: 8 Vector__XXX + SG_ T_Mot_R : 32|32@1- (1,0) [-2147483648|2147483647] "°C" Vector__XXX + SG_ T_Inv_R : 0|32@1- (1,0) [-2147483648|2147483647] "°C" Vector__XXX + +BO_ 1153 INV_L_TxPDO_4: 8 Vector__XXX + SG_ Velocity_L : 32|32@1- (0.001,0) [-2147483.648|2147483.647] "1/s" Vector__XXX + SG_ ActualFlux_L : 16|16@1- (1,0) [-32768|32767] "" Vector__XXX + SG_ DemandedFlux_L : 0|16@1- (1,0) [-32768|32767] "" Vector__XXX + +BO_ 897 INV_L_TxPDO_3: 8 Vector__XXX + SG_ ActualTorque_L : 48|16@1- (1,0) [-32768|32767] "" Vector__XXX + SG_ DemandedTorque_L : 32|16@1- (1,0) [-32768|32767] "" Vector__XXX + SG_ Errors_L : 16|16@1+ (1,0) [0|65535] "" Vector__XXX + SG_ Warnings_L : 0|16@1+ (1,0) [0|65535] "" Vector__XXX + +BO_ 385 INV_L_TxPDO_1: 8 Vector__XXX + SG_ T_Mot_L : 32|32@1- (1,0) [-2147483648|2147483647] "°C" Vector__XXX + SG_ T_Inv_L : 0|32@1- (1,0) [-3.4E+38|3.4E+38] "°C" Vector__XXX + +BO_ 641 INV_L_TxPDO_2: 7 Vector__XXX + SG_ OperationMode_L : 48|8@1- (1,0) [-128|127] "" Vector__XXX + SG_ Controlword_L : 32|16@1+ (1,0) [0|65535] "" Vector__XXX + SG_ U_phase_L : 0|32@1- (1,0) [-2147483648|2147483647] "V" Vector__XXX + + + +BA_DEF_ "MultiplexExtEnabled" ENUM "No","Yes"; +BA_DEF_ "BusType" STRING ; +BA_DEF_DEF_ "MultiplexExtEnabled" "No"; +BA_DEF_DEF_ "BusType" "CAN"; +SIG_VALTYPE_ 386 T_Mot_R : 1; +SIG_VALTYPE_ 386 T_Inv_R : 1; +SIG_VALTYPE_ 385 T_Mot_L : 1; +SIG_VALTYPE_ 385 T_Inv_L : 1; + diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/XCP.dbc b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/XCP.dbc new file mode 100644 index 0000000..803df4d --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/can/CANdbcFT25/XCP.dbc @@ -0,0 +1,52 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: +VAL_TABLE_ XCP_CMD_Values 246 "SET_MTA" 245 "UPLOAD" ; + + +BO_ 2 XCP_MOSI: 8 Vector__XXX + SG_ XCP_Upload_Len m245 : 8|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ XCP_MTA m246 : 15|32@0+ (1,0) [0|0] "" Vector__XXX + SG_ XCP_CMD M : 0|8@1+ (1,0) [0|0] "" Vector__XXX + + + +BA_DEF_ "MultiplexExtEnabled" ENUM "No","Yes"; +BA_DEF_ "BusType" STRING ; +BA_DEF_DEF_ "MultiplexExtEnabled" "No"; +BA_DEF_DEF_ "BusType" "CAN"; +VAL_ 2 XCP_CMD 246 "SET_MTA" 245 "UPLOAD" ; + diff --git a/ros2_ws/src/ft_can_transceiver_lib/dbc/candocs.txt b/ros2_ws/src/ft_can_transceiver_lib/dbc/candocs.txt new file mode 100644 index 0000000..12b8f26 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/dbc/candocs.txt @@ -0,0 +1,10473 @@ +Warning: this file might be possibly outdated !!!!! +================================= Messages ================================= + + ------------------------------------------------------------------------ + + Name: VN200_GNSS_LL + Id: 0x5 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 1 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- Latitude + +---+---+---+---+---+---+---+---+ + 2 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 3 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y +-- Longitude + t +---+---+---+---+---+---+---+---+ + e 4 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 5 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- UncertaintyN + +---+---+---+---+---+---+---+---+ + 6 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 7 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- UncertaintyE + + Signal tree: + + -- {root} + +-- Latitude + +-- Longitude + +-- UncertaintyN + +-- UncertaintyE + + ------------------------------------------------------------------------ + + Name: VN200_IMU_ACC_ANG + Id: 0x1 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 1 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 2 |--------------x|<--------------| + +---+---+---+---+---+---+---+---+ + +-- AccAngX + +---+---+---+---+---+---+---+---+ + B 3 |-------------------------------| + y +---+---+---+---+---+---+---+---+ + t 4 |<------------------------------| + e +---+---+---+---+---+---+---+---+ + +-- AccAngY + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 6 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 7 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + +-- AccAngZ + + Signal tree: + + -- {root} + +-- AccAngX + +-- AccAngY + +-- AccAngZ + + ------------------------------------------------------------------------ + + Name: VN200_IMU_ACC_LIN + Id: 0x2 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 1 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 2 |--------------x|<--------------| + +---+---+---+---+---+---+---+---+ + +-- AccLinX + +---+---+---+---+---+---+---+---+ + B 3 |-------------------------------| + y +---+---+---+---+---+---+---+---+ + t 4 |<------------------------------| + e +---+---+---+---+---+---+---+---+ + +-- AccLinY + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 6 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 7 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + +-- AccLinZ + + Signal tree: + + -- {root} + +-- AccLinX + +-- AccLinY + +-- AccLinZ + + ------------------------------------------------------------------------ + + Name: VN200_INS_LL + Id: 0x11 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 1 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- Latitude + +---+---+---+---+---+---+---+---+ + 2 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 3 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y +-- Longitude + t +---+---+---+---+---+---+---+---+ + e 4 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 5 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- UncertaintyN + +---+---+---+---+---+---+---+---+ + 6 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 7 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- UncertaintyE + + Signal tree: + + -- {root} + +-- Latitude + +-- Longitude + +-- UncertaintyN + +-- UncertaintyE + + ------------------------------------------------------------------------ + + Name: VN200_INS_VEL + Id: 0x32 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 1 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- VelLinX + +---+---+---+---+---+---+---+---+ + 2 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 3 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y +-- VelLinY + t +---+---+---+---+---+---+---+---+ + e 4 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 5 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- VelLinZ + +---+---+---+---+---+---+---+---+ + 6 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 7 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- Uncertainity + + Signal tree: + + -- {root} + +-- VelLinX + +-- VelLinY + +-- VelLinZ + +-- Uncertainity + + ------------------------------------------------------------------------ + + Name: YN200_INS_YPR + Id: 0x6 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 1 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- Yaw + +---+---+---+---+---+---+---+---+ + 2 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 3 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y +-- Pitch + t +---+---+---+---+---+---+---+---+ + e 4 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 5 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- Roll + +---+---+---+---+---+---+---+---+ + 6 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 7 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- Uncertainty + + Signal tree: + + -- {root} + +-- Yaw + +-- Pitch + +-- Roll + +-- Uncertainty + + ------------------------------------------------------------------------ + + Name: PG_TX_2 + Id: 0x503 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 1 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 2 | | | | | | | | | + B +---+---+---+---+---+---+---+---+ + y 3 | | | | | | | | | + t +---+---+---+---+---+---+---+---+ + e 4 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 5 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 6 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 7 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + + ------------------------------------------------------------------------ + + Name: AMS_Slave12_Log8 + Id: 0x6c8 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T24 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T25 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T26 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave12_T27 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T28 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T29 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T30 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T31 + + Signal tree: + + -- {root} + +-- AMS_Slave12_T24 + +-- AMS_Slave12_T25 + +-- AMS_Slave12_T26 + +-- AMS_Slave12_T27 + +-- AMS_Slave12_T28 + +-- AMS_Slave12_T29 + +-- AMS_Slave12_T30 + +-- AMS_Slave12_T31 + + ------------------------------------------------------------------------ + + Name: AMS_Slave9_Log8 + Id: 0x698 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T24 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T25 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T26 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave9_T27 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T28 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T29 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T30 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T31 + + Signal tree: + + -- {root} + +-- AMS_Slave9_T24 + +-- AMS_Slave9_T25 + +-- AMS_Slave9_T26 + +-- AMS_Slave9_T27 + +-- AMS_Slave9_T28 + +-- AMS_Slave9_T29 + +-- AMS_Slave9_T30 + +-- AMS_Slave9_T31 + + ------------------------------------------------------------------------ + + Name: AMS_Slave9_Log7 + Id: 0x697 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T16 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T17 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T18 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave9_T19 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T20 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T21 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T22 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T23 + + Signal tree: + + -- {root} + +-- AMS_Slave9_T16 + +-- AMS_Slave9_T17 + +-- AMS_Slave9_T18 + +-- AMS_Slave9_T19 + +-- AMS_Slave9_T20 + +-- AMS_Slave9_T21 + +-- AMS_Slave9_T22 + +-- AMS_Slave9_T23 + + ------------------------------------------------------------------------ + + Name: AMS_Slave9_Log6 + Id: 0x696 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T8 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T9 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T10 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave9_T11 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T12 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T13 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T14 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T15 + + Signal tree: + + -- {root} + +-- AMS_Slave9_T8 + +-- AMS_Slave9_T9 + +-- AMS_Slave9_T10 + +-- AMS_Slave9_T11 + +-- AMS_Slave9_T12 + +-- AMS_Slave9_T13 + +-- AMS_Slave9_T14 + +-- AMS_Slave9_T15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave9_Log5 + Id: 0x695 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T0 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T1 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T2 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave9_T3 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T4 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T5 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T6 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_T7 + + Signal tree: + + -- {root} + +-- AMS_Slave9_T0 + +-- AMS_Slave9_T1 + +-- AMS_Slave9_T2 + +-- AMS_Slave9_T3 + +-- AMS_Slave9_T4 + +-- AMS_Slave9_T5 + +-- AMS_Slave9_T6 + +-- AMS_Slave9_T7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave9_Log4 + Id: 0x694 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_V16 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |-------------------------------| + t +---+---+---+---+---+---+---+---+ + e 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_FailedSensors + +---+---+---+---+---+---+---+---+ + 6 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 7 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + +-- AMS_Slave9_V16 + +-- AMS_Slave9_FailedSensors + + ------------------------------------------------------------------------ + + Name: AMS_Slave9_Log3 + Id: 0x693 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_V12 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave9_V13 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_V14 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_V15 + + Signal tree: + + -- {root} + +-- AMS_Slave9_V12 + +-- AMS_Slave9_V13 + +-- AMS_Slave9_V14 + +-- AMS_Slave9_V15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave9_Log2 + Id: 0x692 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_V8 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave9_V9 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_V10 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_V11 + + Signal tree: + + -- {root} + +-- AMS_Slave9_V8 + +-- AMS_Slave9_V9 + +-- AMS_Slave9_V10 + +-- AMS_Slave9_V11 + + ------------------------------------------------------------------------ + + Name: AMS_Slave9_Log1 + Id: 0x691 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_V4 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave9_V5 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_V6 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_V7 + + Signal tree: + + -- {root} + +-- AMS_Slave9_V4 + +-- AMS_Slave9_V5 + +-- AMS_Slave9_V6 + +-- AMS_Slave9_V7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave9_Log0 + Id: 0x690 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_V0 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave9_V1 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_V2 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave9_V3 + + Signal tree: + + -- {root} + +-- AMS_Slave9_V0 + +-- AMS_Slave9_V1 + +-- AMS_Slave9_V2 + +-- AMS_Slave9_V3 + + ------------------------------------------------------------------------ + + Name: AMS_Slave8Status + Id: 0x88 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-------------------------x| + +---+---+---+---+---+---+---+---+ + | +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Error + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_Temp_sensor + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |------------------------------x| + t +---+---+---+---+---+---+---+---+ + e +-- AMS_SlaveStatus_MinCellVolt + +---+---+---+---+---+---+---+---+ + 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxCellVolt + +---+---+---+---+---+---+---+---+ + 6 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxTemp + + Signal tree: + + -- {root} + +-- AMS_SlaveStatus_Error + +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Temp_sensor + +-- AMS_SlaveStatus_MinCellVolt + +-- AMS_SlaveStatus_MaxCellVolt + +-- AMS_SlaveStatus_MaxTemp + + ------------------------------------------------------------------------ + + Name: AMS_Slave8_Log8 + Id: 0x688 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T24 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T25 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T26 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave8_T27 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T28 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T29 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T30 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T31 + + Signal tree: + + -- {root} + +-- AMS_Slave8_T24 + +-- AMS_Slave8_T25 + +-- AMS_Slave8_T26 + +-- AMS_Slave8_T27 + +-- AMS_Slave8_T28 + +-- AMS_Slave8_T29 + +-- AMS_Slave8_T30 + +-- AMS_Slave8_T31 + + ------------------------------------------------------------------------ + + Name: AMS_Slave8_Log7 + Id: 0x687 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T16 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T17 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T18 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave8_T19 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T20 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T21 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T22 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T23 + + Signal tree: + + -- {root} + +-- AMS_Slave8_T16 + +-- AMS_Slave8_T17 + +-- AMS_Slave8_T18 + +-- AMS_Slave8_T19 + +-- AMS_Slave8_T20 + +-- AMS_Slave8_T21 + +-- AMS_Slave8_T22 + +-- AMS_Slave8_T23 + + ------------------------------------------------------------------------ + + Name: AMS_Slave8_Log6 + Id: 0x686 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T8 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T9 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T10 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave8_T11 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T12 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T13 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T14 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T15 + + Signal tree: + + -- {root} + +-- AMS_Slave8_T8 + +-- AMS_Slave8_T9 + +-- AMS_Slave8_T10 + +-- AMS_Slave8_T11 + +-- AMS_Slave8_T12 + +-- AMS_Slave8_T13 + +-- AMS_Slave8_T14 + +-- AMS_Slave8_T15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave8_Log5 + Id: 0x685 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T0 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T1 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T2 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave8_T3 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T4 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T5 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T6 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_T7 + + Signal tree: + + -- {root} + +-- AMS_Slave8_T0 + +-- AMS_Slave8_T1 + +-- AMS_Slave8_T2 + +-- AMS_Slave8_T3 + +-- AMS_Slave8_T4 + +-- AMS_Slave8_T5 + +-- AMS_Slave8_T6 + +-- AMS_Slave8_T7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave8_Log4 + Id: 0x684 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_V16 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |-------------------------------| + t +---+---+---+---+---+---+---+---+ + e 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_FailedSensors + +---+---+---+---+---+---+---+---+ + 6 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 7 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + +-- AMS_Slave8_V16 + +-- AMS_Slave8_FailedSensors + + ------------------------------------------------------------------------ + + Name: AMS_Slave8_Log3 + Id: 0x683 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_V12 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave8_V13 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_V14 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_V15 + + Signal tree: + + -- {root} + +-- AMS_Slave8_V12 + +-- AMS_Slave8_V13 + +-- AMS_Slave8_V14 + +-- AMS_Slave8_V15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave8_Log2 + Id: 0x682 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_V8 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave8_V9 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_V10 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_V11 + + Signal tree: + + -- {root} + +-- AMS_Slave8_V8 + +-- AMS_Slave8_V9 + +-- AMS_Slave8_V10 + +-- AMS_Slave8_V11 + + ------------------------------------------------------------------------ + + Name: AMS_Slave8_Log1 + Id: 0x681 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_V4 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave8_V5 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_V6 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_V7 + + Signal tree: + + -- {root} + +-- AMS_Slave8_V4 + +-- AMS_Slave8_V5 + +-- AMS_Slave8_V6 + +-- AMS_Slave8_V7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave8_Log0 + Id: 0x680 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_V0 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave8_V1 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_V2 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave8_V3 + + Signal tree: + + -- {root} + +-- AMS_Slave8_V0 + +-- AMS_Slave8_V1 + +-- AMS_Slave8_V2 + +-- AMS_Slave8_V3 + + ------------------------------------------------------------------------ + + Name: AMS_Slave15Status + Id: 0x8f + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-------------------------x| + +---+---+---+---+---+---+---+---+ + | +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Error + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_Temp_sensor + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |------------------------------x| + t +---+---+---+---+---+---+---+---+ + e +-- AMS_SlaveStatus_MinCellVolt + +---+---+---+---+---+---+---+---+ + 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxCellVolt + +---+---+---+---+---+---+---+---+ + 6 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxTemp + + Signal tree: + + -- {root} + +-- AMS_SlaveStatus_Error + +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Temp_sensor + +-- AMS_SlaveStatus_MinCellVolt + +-- AMS_SlaveStatus_MaxCellVolt + +-- AMS_SlaveStatus_MaxTemp + + ------------------------------------------------------------------------ + + Name: AMS_Slave14Status + Id: 0x8e + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-------------------------x| + +---+---+---+---+---+---+---+---+ + | +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Error + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_Temp_sensor + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |------------------------------x| + t +---+---+---+---+---+---+---+---+ + e +-- AMS_SlaveStatus_MinCellVolt + +---+---+---+---+---+---+---+---+ + 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxCellVolt + +---+---+---+---+---+---+---+---+ + 6 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxTemp + + Signal tree: + + -- {root} + +-- AMS_SlaveStatus_Error + +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Temp_sensor + +-- AMS_SlaveStatus_MinCellVolt + +-- AMS_SlaveStatus_MaxCellVolt + +-- AMS_SlaveStatus_MaxTemp + + ------------------------------------------------------------------------ + + Name: AMS_Slave13Status + Id: 0x8d + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-------------------------x| + +---+---+---+---+---+---+---+---+ + | +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Error + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_Temp_sensor + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |------------------------------x| + t +---+---+---+---+---+---+---+---+ + e +-- AMS_SlaveStatus_MinCellVolt + +---+---+---+---+---+---+---+---+ + 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxCellVolt + +---+---+---+---+---+---+---+---+ + 6 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxTemp + + Signal tree: + + -- {root} + +-- AMS_SlaveStatus_Error + +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Temp_sensor + +-- AMS_SlaveStatus_MinCellVolt + +-- AMS_SlaveStatus_MaxCellVolt + +-- AMS_SlaveStatus_MaxTemp + + ------------------------------------------------------------------------ + + Name: AMS_Slave12Status + Id: 0x8c + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-------------------------x| + +---+---+---+---+---+---+---+---+ + | +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Error + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_Temp_sensor + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |------------------------------x| + t +---+---+---+---+---+---+---+---+ + e +-- AMS_SlaveStatus_MinCellVolt + +---+---+---+---+---+---+---+---+ + 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxCellVolt + +---+---+---+---+---+---+---+---+ + 6 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxTemp + + Signal tree: + + -- {root} + +-- AMS_SlaveStatus_Error + +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Temp_sensor + +-- AMS_SlaveStatus_MinCellVolt + +-- AMS_SlaveStatus_MaxCellVolt + +-- AMS_SlaveStatus_MaxTemp + + ------------------------------------------------------------------------ + + Name: AMS_Slave11Status + Id: 0x8b + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-------------------------x| + +---+---+---+---+---+---+---+---+ + | +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Error + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_Temp_sensor + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |------------------------------x| + t +---+---+---+---+---+---+---+---+ + e +-- AMS_SlaveStatus_MinCellVolt + +---+---+---+---+---+---+---+---+ + 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxCellVolt + +---+---+---+---+---+---+---+---+ + 6 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxTemp + + Signal tree: + + -- {root} + +-- AMS_SlaveStatus_Error + +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Temp_sensor + +-- AMS_SlaveStatus_MinCellVolt + +-- AMS_SlaveStatus_MaxCellVolt + +-- AMS_SlaveStatus_MaxTemp + + ------------------------------------------------------------------------ + + Name: AMS_Slave10Status + Id: 0x8a + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-------------------------x| + +---+---+---+---+---+---+---+---+ + | +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Error + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_Temp_sensor + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |------------------------------x| + t +---+---+---+---+---+---+---+---+ + e +-- AMS_SlaveStatus_MinCellVolt + +---+---+---+---+---+---+---+---+ + 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxCellVolt + +---+---+---+---+---+---+---+---+ + 6 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxTemp + + Signal tree: + + -- {root} + +-- AMS_SlaveStatus_Error + +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Temp_sensor + +-- AMS_SlaveStatus_MinCellVolt + +-- AMS_SlaveStatus_MaxCellVolt + +-- AMS_SlaveStatus_MaxTemp + + ------------------------------------------------------------------------ + + Name: AMS_Slave15_Log8 + Id: 0x6f8 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T24 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T25 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T26 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave15_T27 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T28 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T29 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T30 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T31 + + Signal tree: + + -- {root} + +-- AMS_Slave15_T24 + +-- AMS_Slave15_T25 + +-- AMS_Slave15_T26 + +-- AMS_Slave15_T27 + +-- AMS_Slave15_T28 + +-- AMS_Slave15_T29 + +-- AMS_Slave15_T30 + +-- AMS_Slave15_T31 + + ------------------------------------------------------------------------ + + Name: AMS_Slave14_Log8 + Id: 0x6e8 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T24 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T25 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T26 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave14_T27 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T28 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T29 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T30 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T31 + + Signal tree: + + -- {root} + +-- AMS_Slave14_T24 + +-- AMS_Slave14_T25 + +-- AMS_Slave14_T26 + +-- AMS_Slave14_T27 + +-- AMS_Slave14_T28 + +-- AMS_Slave14_T29 + +-- AMS_Slave14_T30 + +-- AMS_Slave14_T31 + + ------------------------------------------------------------------------ + + Name: AMS_Slave13_Log8 + Id: 0x6d8 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T24 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T25 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T26 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave13_T27 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T28 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T29 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T30 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T31 + + Signal tree: + + -- {root} + +-- AMS_Slave13_T24 + +-- AMS_Slave13_T25 + +-- AMS_Slave13_T26 + +-- AMS_Slave13_T27 + +-- AMS_Slave13_T28 + +-- AMS_Slave13_T29 + +-- AMS_Slave13_T30 + +-- AMS_Slave13_T31 + + ------------------------------------------------------------------------ + + Name: AMS_Slave12_Log7 + Id: 0x6c7 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T16 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T17 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T18 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave12_T19 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T20 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T21 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T22 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T23 + + Signal tree: + + -- {root} + +-- AMS_Slave12_T16 + +-- AMS_Slave12_T17 + +-- AMS_Slave12_T18 + +-- AMS_Slave12_T19 + +-- AMS_Slave12_T20 + +-- AMS_Slave12_T21 + +-- AMS_Slave12_T22 + +-- AMS_Slave12_T23 + + ------------------------------------------------------------------------ + + Name: AMS_Slave11_Log8 + Id: 0x6b8 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T24 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T25 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T26 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave11_T27 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T28 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T29 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T30 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T31 + + Signal tree: + + -- {root} + +-- AMS_Slave11_T24 + +-- AMS_Slave11_T25 + +-- AMS_Slave11_T26 + +-- AMS_Slave11_T27 + +-- AMS_Slave11_T28 + +-- AMS_Slave11_T29 + +-- AMS_Slave11_T30 + +-- AMS_Slave11_T31 + + ------------------------------------------------------------------------ + + Name: AMS_Slave15_Log7 + Id: 0x6f7 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T16 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T17 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T18 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave15_T19 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T20 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T21 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T22 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T23 + + Signal tree: + + -- {root} + +-- AMS_Slave15_T16 + +-- AMS_Slave15_T17 + +-- AMS_Slave15_T18 + +-- AMS_Slave15_T19 + +-- AMS_Slave15_T20 + +-- AMS_Slave15_T21 + +-- AMS_Slave15_T22 + +-- AMS_Slave15_T23 + + ------------------------------------------------------------------------ + + Name: AMS_Slave14_Log7 + Id: 0x6e7 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T16 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T17 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T18 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave14_T19 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T20 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T21 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T22 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T23 + + Signal tree: + + -- {root} + +-- AMS_Slave14_T16 + +-- AMS_Slave14_T17 + +-- AMS_Slave14_T18 + +-- AMS_Slave14_T19 + +-- AMS_Slave14_T20 + +-- AMS_Slave14_T21 + +-- AMS_Slave14_T22 + +-- AMS_Slave14_T23 + + ------------------------------------------------------------------------ + + Name: AMS_Slave13_Log7 + Id: 0x6d7 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T16 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T17 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T18 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave13_T19 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T20 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T21 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T22 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T23 + + Signal tree: + + -- {root} + +-- AMS_Slave13_T16 + +-- AMS_Slave13_T17 + +-- AMS_Slave13_T18 + +-- AMS_Slave13_T19 + +-- AMS_Slave13_T20 + +-- AMS_Slave13_T21 + +-- AMS_Slave13_T22 + +-- AMS_Slave13_T23 + + ------------------------------------------------------------------------ + + Name: AMS_Slave12_Log6 + Id: 0x6c6 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T8 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T9 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T11 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave12_T10 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T12 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T13 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T14 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T15 + + Signal tree: + + -- {root} + +-- AMS_Slave12_T8 + +-- AMS_Slave12_T9 + +-- AMS_Slave12_T11 + +-- AMS_Slave12_T10 + +-- AMS_Slave12_T12 + +-- AMS_Slave12_T13 + +-- AMS_Slave12_T14 + +-- AMS_Slave12_T15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave11_Log7 + Id: 0x6b7 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T16 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T17 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T18 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave11_T19 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T20 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T21 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T22 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T23 + + Signal tree: + + -- {root} + +-- AMS_Slave11_T16 + +-- AMS_Slave11_T17 + +-- AMS_Slave11_T18 + +-- AMS_Slave11_T19 + +-- AMS_Slave11_T20 + +-- AMS_Slave11_T21 + +-- AMS_Slave11_T22 + +-- AMS_Slave11_T23 + + ------------------------------------------------------------------------ + + Name: AMS_Slave15_Log6 + Id: 0x6f6 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T8 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T9 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T10 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave15_T11 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T12 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T13 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T14 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T15 + + Signal tree: + + -- {root} + +-- AMS_Slave15_T8 + +-- AMS_Slave15_T9 + +-- AMS_Slave15_T10 + +-- AMS_Slave15_T11 + +-- AMS_Slave15_T12 + +-- AMS_Slave15_T13 + +-- AMS_Slave15_T14 + +-- AMS_Slave15_T15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave14_Log6 + Id: 0x6e6 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T8 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T9 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T10 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave14_T11 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T12 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T13 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T14 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T15 + + Signal tree: + + -- {root} + +-- AMS_Slave14_T8 + +-- AMS_Slave14_T9 + +-- AMS_Slave14_T10 + +-- AMS_Slave14_T11 + +-- AMS_Slave14_T12 + +-- AMS_Slave14_T13 + +-- AMS_Slave14_T14 + +-- AMS_Slave14_T15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave13_Log6 + Id: 0x6d6 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T8 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T9 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T10 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave13_T11 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T12 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T13 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T14 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T15 + + Signal tree: + + -- {root} + +-- AMS_Slave13_T8 + +-- AMS_Slave13_T9 + +-- AMS_Slave13_T10 + +-- AMS_Slave13_T11 + +-- AMS_Slave13_T12 + +-- AMS_Slave13_T13 + +-- AMS_Slave13_T14 + +-- AMS_Slave13_T15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave12_Log5 + Id: 0x6c5 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T0 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T1 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T2 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave12_T3 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T4 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T5 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T6 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_T7 + + Signal tree: + + -- {root} + +-- AMS_Slave12_T0 + +-- AMS_Slave12_T1 + +-- AMS_Slave12_T2 + +-- AMS_Slave12_T3 + +-- AMS_Slave12_T4 + +-- AMS_Slave12_T5 + +-- AMS_Slave12_T6 + +-- AMS_Slave12_T7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave11_Log6 + Id: 0x6b6 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T8 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T9 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T10 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave11_T11 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T12 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T13 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T14 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T15 + + Signal tree: + + -- {root} + +-- AMS_Slave11_T8 + +-- AMS_Slave11_T9 + +-- AMS_Slave11_T10 + +-- AMS_Slave11_T11 + +-- AMS_Slave11_T12 + +-- AMS_Slave11_T13 + +-- AMS_Slave11_T14 + +-- AMS_Slave11_T15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave15_Log5 + Id: 0x6f5 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T0 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T1 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T2 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave15_T3 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T4 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T5 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T6 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_T7 + + Signal tree: + + -- {root} + +-- AMS_Slave15_T0 + +-- AMS_Slave15_T1 + +-- AMS_Slave15_T2 + +-- AMS_Slave15_T3 + +-- AMS_Slave15_T4 + +-- AMS_Slave15_T5 + +-- AMS_Slave15_T6 + +-- AMS_Slave15_T7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave14_Log5 + Id: 0x6e5 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T0 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T1 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T2 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave14_T3 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T4 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T5 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T6 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_T7 + + Signal tree: + + -- {root} + +-- AMS_Slave14_T0 + +-- AMS_Slave14_T1 + +-- AMS_Slave14_T2 + +-- AMS_Slave14_T3 + +-- AMS_Slave14_T4 + +-- AMS_Slave14_T5 + +-- AMS_Slave14_T6 + +-- AMS_Slave14_T7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave13_Log5 + Id: 0x6d5 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T0 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T1 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T2 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave13_T3 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T4 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T5 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T6 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_T7 + + Signal tree: + + -- {root} + +-- AMS_Slave13_T0 + +-- AMS_Slave13_T1 + +-- AMS_Slave13_T2 + +-- AMS_Slave13_T3 + +-- AMS_Slave13_T4 + +-- AMS_Slave13_T5 + +-- AMS_Slave13_T6 + +-- AMS_Slave13_T7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave12_Log4 + Id: 0x6c4 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_V16 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |-------------------------------| + t +---+---+---+---+---+---+---+---+ + e 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_FailedSensors + +---+---+---+---+---+---+---+---+ + 6 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 7 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + +-- AMS_Slave12_V16 + +-- AMS_Slave12_FailedSensors + + ------------------------------------------------------------------------ + + Name: AMS_Slave11_Log5 + Id: 0x6b5 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T0 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T1 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T2 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave11_T3 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T4 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T5 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T6 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_T7 + + Signal tree: + + -- {root} + +-- AMS_Slave11_T0 + +-- AMS_Slave11_T1 + +-- AMS_Slave11_T2 + +-- AMS_Slave11_T3 + +-- AMS_Slave11_T4 + +-- AMS_Slave11_T5 + +-- AMS_Slave11_T6 + +-- AMS_Slave11_T7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave15_Log4 + Id: 0x6f4 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_V16 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |-------------------------------| + t +---+---+---+---+---+---+---+---+ + e 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_FailedSensors + +---+---+---+---+---+---+---+---+ + 6 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 7 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + +-- AMS_Slave15_V16 + +-- AMS_Slave15_FailedSensors + + ------------------------------------------------------------------------ + + Name: AMS_Slave14_Log4 + Id: 0x6e4 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_V16 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |-------------------------------| + t +---+---+---+---+---+---+---+---+ + e 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_FailedSensors + +---+---+---+---+---+---+---+---+ + 6 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 7 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + +-- AMS_Slave14_V16 + +-- AMS_Slave14_FailedSensors + + ------------------------------------------------------------------------ + + Name: AMS_Slave13_Log4 + Id: 0x6d4 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_V16 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |-------------------------------| + t +---+---+---+---+---+---+---+---+ + e 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_FailedSensors + +---+---+---+---+---+---+---+---+ + 6 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 7 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + +-- AMS_Slave13_V16 + +-- AMS_Slave13_FailedSensors + + ------------------------------------------------------------------------ + + Name: AMS_Slave12_Log3 + Id: 0x6c3 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_V12 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave12_V13 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_V14 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_V15 + + Signal tree: + + -- {root} + +-- AMS_Slave12_V12 + +-- AMS_Slave12_V13 + +-- AMS_Slave12_V14 + +-- AMS_Slave12_V15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave11_Log4 + Id: 0x6b4 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_V16 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |-------------------------------| + t +---+---+---+---+---+---+---+---+ + e 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_FailedSensors + +---+---+---+---+---+---+---+---+ + 6 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 7 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + +-- AMS_Slave11_V16 + +-- AMS_Slave11_FailedSensors + + ------------------------------------------------------------------------ + + Name: AMS_Slave15_Log3 + Id: 0x6f3 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_V12 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave15_V13 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_V14 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_V15 + + Signal tree: + + -- {root} + +-- AMS_Slave15_V12 + +-- AMS_Slave15_V13 + +-- AMS_Slave15_V14 + +-- AMS_Slave15_V15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave14_Log3 + Id: 0x6e3 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_V12 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave14_V13 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_V14 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_V15 + + Signal tree: + + -- {root} + +-- AMS_Slave14_V12 + +-- AMS_Slave14_V13 + +-- AMS_Slave14_V14 + +-- AMS_Slave14_V15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave13_Log3 + Id: 0x6d3 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_V12 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave13_V13 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_V14 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_V15 + + Signal tree: + + -- {root} + +-- AMS_Slave13_V12 + +-- AMS_Slave13_V13 + +-- AMS_Slave13_V14 + +-- AMS_Slave13_V15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave12_Log2 + Id: 0x6c2 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_V8 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave12_V9 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_V10 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_V11 + + Signal tree: + + -- {root} + +-- AMS_Slave12_V8 + +-- AMS_Slave12_V9 + +-- AMS_Slave12_V10 + +-- AMS_Slave12_V11 + + ------------------------------------------------------------------------ + + Name: AMS_Slave11_Log3 + Id: 0x6b3 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_V12 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave11_V13 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_V14 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_V15 + + Signal tree: + + -- {root} + +-- AMS_Slave11_V12 + +-- AMS_Slave11_V13 + +-- AMS_Slave11_V14 + +-- AMS_Slave11_V15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave15_Log2 + Id: 0x6f2 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_V8 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave15_V9 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_V10 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_V11 + + Signal tree: + + -- {root} + +-- AMS_Slave15_V8 + +-- AMS_Slave15_V9 + +-- AMS_Slave15_V10 + +-- AMS_Slave15_V11 + + ------------------------------------------------------------------------ + + Name: AMS_Slave14_Log2 + Id: 0x6e2 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_V8 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave14_V9 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_V10 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_V11 + + Signal tree: + + -- {root} + +-- AMS_Slave14_V8 + +-- AMS_Slave14_V9 + +-- AMS_Slave14_V10 + +-- AMS_Slave14_V11 + + ------------------------------------------------------------------------ + + Name: AMS_Slave13_Log2 + Id: 0x6d2 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_V8 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave13_V9 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_V10 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_V11 + + Signal tree: + + -- {root} + +-- AMS_Slave13_V8 + +-- AMS_Slave13_V9 + +-- AMS_Slave13_V10 + +-- AMS_Slave13_V11 + + ------------------------------------------------------------------------ + + Name: AMS_Slave12_Log1 + Id: 0x6c1 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_V4 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave12_V5 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_V6 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_V7 + + Signal tree: + + -- {root} + +-- AMS_Slave12_V4 + +-- AMS_Slave12_V5 + +-- AMS_Slave12_V6 + +-- AMS_Slave12_V7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave11_Log2 + Id: 0x6b2 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_V8 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave11_V9 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_V10 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_V11 + + Signal tree: + + -- {root} + +-- AMS_Slave11_V8 + +-- AMS_Slave11_V9 + +-- AMS_Slave11_V10 + +-- AMS_Slave11_V11 + + ------------------------------------------------------------------------ + + Name: AMS_Slave15_Log1 + Id: 0x6f1 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_V4 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave15_V5 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_V6 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_V7 + + Signal tree: + + -- {root} + +-- AMS_Slave15_V4 + +-- AMS_Slave15_V5 + +-- AMS_Slave15_V6 + +-- AMS_Slave15_V7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave14_Log1 + Id: 0x6e1 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_V4 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave14_V5 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_V6 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_V7 + + Signal tree: + + -- {root} + +-- AMS_Slave14_V4 + +-- AMS_Slave14_V5 + +-- AMS_Slave14_V6 + +-- AMS_Slave14_V7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave13_Log1 + Id: 0x6d1 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_V4 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave13_V5 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_V6 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_V7 + + Signal tree: + + -- {root} + +-- AMS_Slave13_V4 + +-- AMS_Slave13_V5 + +-- AMS_Slave13_V6 + +-- AMS_Slave13_V7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave12_Log0 + Id: 0x6c0 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_V0 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave12_V1 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_V2 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave12_V3 + + Signal tree: + + -- {root} + +-- AMS_Slave12_V0 + +-- AMS_Slave12_V1 + +-- AMS_Slave12_V2 + +-- AMS_Slave12_V3 + + ------------------------------------------------------------------------ + + Name: AMS_Slave11_Log1 + Id: 0x6b1 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_V4 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave11_V5 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_V6 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_V7 + + Signal tree: + + -- {root} + +-- AMS_Slave11_V4 + +-- AMS_Slave11_V5 + +-- AMS_Slave11_V6 + +-- AMS_Slave11_V7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave15_Log0 + Id: 0x6f0 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_V0 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave15_V1 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_V2 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave15_V3 + + Signal tree: + + -- {root} + +-- AMS_Slave15_V0 + +-- AMS_Slave15_V1 + +-- AMS_Slave15_V2 + +-- AMS_Slave15_V3 + + ------------------------------------------------------------------------ + + Name: AMS_Slave14_Log0 + Id: 0x6e0 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_V0 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave14_V1 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_V2 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave14_V3 + + Signal tree: + + -- {root} + +-- AMS_Slave14_V0 + +-- AMS_Slave14_V1 + +-- AMS_Slave14_V2 + +-- AMS_Slave14_V3 + + ------------------------------------------------------------------------ + + Name: AMS_Slave13_Log0 + Id: 0x6d0 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_V0 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave13_V1 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_V2 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave13_V3 + + Signal tree: + + -- {root} + +-- AMS_Slave13_V0 + +-- AMS_Slave13_V1 + +-- AMS_Slave13_V2 + +-- AMS_Slave13_V3 + + ------------------------------------------------------------------------ + + Name: AMS_Slave11_Log0 + Id: 0x6b0 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_V0 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave11_V1 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_V2 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave11_V3 + + Signal tree: + + -- {root} + +-- AMS_Slave11_V0 + +-- AMS_Slave11_V1 + +-- AMS_Slave11_V2 + +-- AMS_Slave11_V3 + + ------------------------------------------------------------------------ + + Name: AMS_Slave10_Log8 + Id: 0x6a8 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T24 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T25 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T26 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave10_T27 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T28 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T29 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T30 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T31 + + Signal tree: + + -- {root} + +-- AMS_Slave10_T24 + +-- AMS_Slave10_T25 + +-- AMS_Slave10_T26 + +-- AMS_Slave10_T27 + +-- AMS_Slave10_T28 + +-- AMS_Slave10_T29 + +-- AMS_Slave10_T30 + +-- AMS_Slave10_T31 + + ------------------------------------------------------------------------ + + Name: AMS_Slave10_Log7 + Id: 0x6a7 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T16 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T17 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T18 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave10_T19 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T20 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T21 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T22 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T23 + + Signal tree: + + -- {root} + +-- AMS_Slave10_T16 + +-- AMS_Slave10_T17 + +-- AMS_Slave10_T18 + +-- AMS_Slave10_T19 + +-- AMS_Slave10_T20 + +-- AMS_Slave10_T21 + +-- AMS_Slave10_T22 + +-- AMS_Slave10_T23 + + ------------------------------------------------------------------------ + + Name: AMS_Slave10_Log6 + Id: 0x6a6 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T8 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T9 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T10 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave10_T11 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T12 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T13 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T14 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T15 + + Signal tree: + + -- {root} + +-- AMS_Slave10_T8 + +-- AMS_Slave10_T9 + +-- AMS_Slave10_T10 + +-- AMS_Slave10_T11 + +-- AMS_Slave10_T12 + +-- AMS_Slave10_T13 + +-- AMS_Slave10_T14 + +-- AMS_Slave10_T15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave10_Log5 + Id: 0x6a5 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T0 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T1 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T2 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave10_T3 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T4 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T5 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T6 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_T7 + + Signal tree: + + -- {root} + +-- AMS_Slave10_T0 + +-- AMS_Slave10_T1 + +-- AMS_Slave10_T2 + +-- AMS_Slave10_T3 + +-- AMS_Slave10_T4 + +-- AMS_Slave10_T5 + +-- AMS_Slave10_T6 + +-- AMS_Slave10_T7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave10_Log4 + Id: 0x6a4 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_V16 + +---+---+---+---+---+---+---+---+ + 2 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y 3 |-------------------------------| + t +---+---+---+---+---+---+---+---+ + e 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_FailedSensors + +---+---+---+---+---+---+---+---+ + 6 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 7 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + +-- AMS_Slave10_V16 + +-- AMS_Slave10_FailedSensors + + ------------------------------------------------------------------------ + + Name: AMS_Slave10_Log3 + Id: 0x6a3 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_V12 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave10_V13 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_V14 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_V15 + + Signal tree: + + -- {root} + +-- AMS_Slave10_V12 + +-- AMS_Slave10_V13 + +-- AMS_Slave10_V14 + +-- AMS_Slave10_V15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave10_Log2 + Id: 0x6a2 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_V8 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave10_V9 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_V10 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_V11 + + Signal tree: + + -- {root} + +-- AMS_Slave10_V8 + +-- AMS_Slave10_V9 + +-- AMS_Slave10_V10 + +-- AMS_Slave10_V11 + + ------------------------------------------------------------------------ + + Name: AMS_Slave10_Log1 + Id: 0x6a1 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_V4 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave10_V5 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_V6 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_V7 + + Signal tree: + + -- {root} + +-- AMS_Slave10_V4 + +-- AMS_Slave10_V5 + +-- AMS_Slave10_V6 + +-- AMS_Slave10_V7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave10_Log0 + Id: 0x6a0 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_V0 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave10_V1 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_V2 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave10_V3 + + Signal tree: + + -- {root} + +-- AMS_Slave10_V0 + +-- AMS_Slave10_V1 + +-- AMS_Slave10_V2 + +-- AMS_Slave10_V3 + + ------------------------------------------------------------------------ + + Name: AMS_Slave9Status + Id: 0x89 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-------------------------x| + +---+---+---+---+---+---+---+---+ + | +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Error + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_Temp_sensor + +---+---+---+---+---+---+---+---+ + B 2 | | | | | | | | | + y +---+---+---+---+---+---+---+---+ + t 3 | | | | | | | | | + e +---+---+---+---+---+---+---+---+ + 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxCellVolt + +---+---+---+---+---+---+---+---+ + 6 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxTemp + + Signal tree: + + -- {root} + +-- AMS_SlaveStatus_Error + +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Temp_sensor + +-- AMS_SlaveStatus_MaxCellVolt + +-- AMS_SlaveStatus_MaxTemp + + ------------------------------------------------------------------------ + + Name: PG_RX + Id: 0x501 + Length: 2 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 | | | | | |<-x|<-x|<-x| + +---+---+---+---+---+---+---+---+ + B | | +-- PG_inactive + y | +-- PG_active + t +-- PG_ready + e +---+---+---+---+---+---+---+---+ + 1 | |<-------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PG_percent + + Signal tree: + + -- {root} + +-- PG_inactive + +-- PG_active + +-- PG_ready + +-- PG_percent + + ------------------------------------------------------------------------ + + Name: ABX_Accel + Id: 0x111 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 1 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_Accel_X + +---+---+---+---+---+---+---+---+ + 2 |------------------------------x| + +---+---+---+---+---+---+---+---+ + B 3 |<------------------------------| + y +---+---+---+---+---+---+---+---+ + t +-- ABX_Accel_Y + e +---+---+---+---+---+---+---+---+ + 4 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 5 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_Accel_Z + +---+---+---+---+---+---+---+---+ + 6 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 7 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + +-- ABX_Accel_X + +-- ABX_Accel_Y + +-- ABX_Accel_Z + + ------------------------------------------------------------------------ + + Name: ABX_Hydraulics + Id: 0x110 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 1 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_Hyd_PA + +---+---+---+---+---+---+---+---+ + 2 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y 3 | | | | |<--------------| + t +---+---+---+---+---+---+---+---+ + e +-- ABX_Hyd_PB + +---+---+---+---+---+---+---+---+ + 4 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 5 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 6 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 7 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + +-- ABX_Hyd_PA + +-- ABX_Hyd_PB + + ------------------------------------------------------------------------ + + Name: ABX_ParamConfirm + Id: 0x413 + Length: 8 bytes + Cycle time: - ms + Senders: - + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- ABX_ParamConfirm + +---+---+---+---+---+---+---+---+ + 1 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + B 2 | | | | | | | | | + y +---+---+---+---+---+---+---+---+ + t 3 | | | | | | | | | + e +---+---+---+---+---+---+---+---+ + 4 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 5 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 6 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 7 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + +-- ABX_ParamConfirm + + ------------------------------------------------------------------------ + + Name: PG_TX + Id: 0x502 + Length: 8 bytes + Cycle time: - ms + Senders: PG + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |--------------x|<---------x|<-x| + +---+---+---+---+---+---+---+---+ + | +-- PG_Errorbit + +-- PG_State + +---+---+---+---+---+---+---+---+ + 1 |--------------x|<--------------| + +---+---+---+---+---+---+---+---+ + +-- PG_Powerground_State + +---+---+---+---+---+---+---+---+ + 2 |--------------x|<--------------| + +---+---+---+---+---+---+---+---+ + +-- PG_Error + B +---+---+---+---+---+---+---+---+ + y 3 |--------------x|<--------------| + t +---+---+---+---+---+---+---+---+ + e +-- PG_SOC + +---+---+---+---+---+---+---+---+ + 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- PG_battery_voltage + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 6 |--------------x|<--------------| + +---+---+---+---+---+---+---+---+ + +-- PG_current_measurement + +---+---+---+---+---+---+---+---+ + 7 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- PG_temperature + + Signal tree: + + -- {root} + +-- PG_Errorbit + +-- PG_State + +-- PG_Powerground_State + +-- PG_Error + +-- PG_SOC + +-- PG_battery_voltage + +-- PG_current_measurement + +-- PG_temperature + + ------------------------------------------------------------------------ + + Name: ACU_TX_Commands + Id: 0xe3 + Length: 8 bytes + Cycle time: - ms + Senders: ABX + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- ABX_Speed_FL + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- ABX_Speed_FR + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- ABX_Speed_RL + B +---+---+---+---+---+---+---+---+ + y 3 |<-----------------------------x| + t +---+---+---+---+---+---+---+---+ + e +-- ABX_Speed_RR + +---+---+---+---+---+---+---+---+ + 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- ABX_Steering_Angle_Left + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- ABX_Steering_Angle_Right + +---+---+---+---+---+---+---+---+ + 6 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 7 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + +-- ABX_Speed_FL + +-- ABX_Speed_FR + +-- ABX_Speed_RL + +-- ABX_Speed_RR + +-- ABX_Steering_Angle_Left + +-- ABX_Steering_Angle_Right + + ------------------------------------------------------------------------ + + Name: ACU_RX_Commands + Id: 0xe2 + Length: 8 bytes + Cycle time: - ms + Senders: ACU + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- ACU_Speed_Target_left + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- ACU_Speed_Target_right + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- ACU_Steering_Angle_Right + t +---+---+---+---+---+---+---+---+ + e 3 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- ACU_Steering_Angle_Left + +---+---+---+---+---+---+---+---+ + 4 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 5 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 6 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 7 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + +-- ACU_Speed_Target_left + +-- ACU_Speed_Target_right + +-- ACU_Steering_Angle_Right + +-- ACU_Steering_Angle_Left + + ------------------------------------------------------------------------ + + Name: ACU_RX + Id: 0xe1 + Length: 7 bytes + Cycle time: - ms + Senders: ACU + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-------------x| | |<-x|<-x| + +---+---+---+---+---+---+---+---+ + | | +-- ACU_AS_Mission_Complete + | +-- ACU_AS_OK + +-- ACU_Lap_Count + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- ACU_Cones_All + +---+---+---+---+---+---+---+---+ + B 2 |<-----------------------------x| + y +---+---+---+---+---+---+---+---+ + t +-- ACU_Cones_Actual + e +---+---+---+---+---+---+---+---+ + 3 | | | | | | |<-x|<-x| + +---+---+---+---+---+---+---+---+ + | +-- ACU_DRS + +-- ACU_PG + +---+---+---+---+---+---+---+---+ + 4 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 5 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 6 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + +-- ACU_AS_Mission_Complete + +-- ACU_AS_OK + +-- ACU_Lap_Count + +-- ACU_Cones_All + +-- ACU_Cones_Actual + +-- ACU_DRS + +-- ACU_PG + + ------------------------------------------------------------------------ + + Name: AMS_Slave0_Log0 + Id: 0x600 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_V0 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave0_V1 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_V2 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_V3 + + Signal tree: + + -- {root} + +-- AMS_Slave0_V0 + +-- AMS_Slave0_V1 + +-- AMS_Slave0_V2 + +-- AMS_Slave0_V3 + + ------------------------------------------------------------------------ + + Name: AMS_Slave0_Log1 + Id: 0x601 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_V4 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave0_V5 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_V6 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_V7 + + Signal tree: + + -- {root} + +-- AMS_Slave0_V4 + +-- AMS_Slave0_V5 + +-- AMS_Slave0_V6 + +-- AMS_Slave0_V7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave0_Log2 + Id: 0x602 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_V8 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave0_V9 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_V10 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_V11 + + Signal tree: + + -- {root} + +-- AMS_Slave0_V8 + +-- AMS_Slave0_V9 + +-- AMS_Slave0_V10 + +-- AMS_Slave0_V11 + + ------------------------------------------------------------------------ + + Name: AMS_Slave0_Log3 + Id: 0x603 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_V12 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave0_V13 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_V14 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_V15 + + Signal tree: + + -- {root} + +-- AMS_Slave0_V12 + +-- AMS_Slave0_V13 + +-- AMS_Slave0_V14 + +-- AMS_Slave0_V15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave0_Log4 + Id: 0x604 + Length: 6 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_V16 + B +---+---+---+---+---+---+---+---+ + y 2 |<------------------------------| + t +---+---+---+---+---+---+---+---+ + e 3 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_FailedSensors + + Signal tree: + + -- {root} + +-- AMS_Slave0_V16 + +-- AMS_Slave0_FailedSensors + + ------------------------------------------------------------------------ + + Name: AMS_Slave0_Log5 + Id: 0x605 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T0 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T1 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T2 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave0_T3 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T4 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T5 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T6 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T7 + + Signal tree: + + -- {root} + +-- AMS_Slave0_T0 + +-- AMS_Slave0_T1 + +-- AMS_Slave0_T2 + +-- AMS_Slave0_T3 + +-- AMS_Slave0_T4 + +-- AMS_Slave0_T5 + +-- AMS_Slave0_T6 + +-- AMS_Slave0_T7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave0_Log6 + Id: 0x606 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T8 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T9 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T10 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave0_T11 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T12 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T13 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T14 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T15 + + Signal tree: + + -- {root} + +-- AMS_Slave0_T8 + +-- AMS_Slave0_T9 + +-- AMS_Slave0_T10 + +-- AMS_Slave0_T11 + +-- AMS_Slave0_T12 + +-- AMS_Slave0_T13 + +-- AMS_Slave0_T14 + +-- AMS_Slave0_T15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave0_Log7 + Id: 0x607 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T16 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T17 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T18 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave0_T19 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T20 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T21 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T22 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T23 + + Signal tree: + + -- {root} + +-- AMS_Slave0_T16 + +-- AMS_Slave0_T17 + +-- AMS_Slave0_T18 + +-- AMS_Slave0_T19 + +-- AMS_Slave0_T20 + +-- AMS_Slave0_T21 + +-- AMS_Slave0_T22 + +-- AMS_Slave0_T23 + + ------------------------------------------------------------------------ + + Name: AMS_Slave0_Log8 + Id: 0x608 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T24 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T25 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T26 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave0_T27 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T28 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T29 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T30 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave0_T31 + + Signal tree: + + -- {root} + +-- AMS_Slave0_T24 + +-- AMS_Slave0_T25 + +-- AMS_Slave0_T26 + +-- AMS_Slave0_T27 + +-- AMS_Slave0_T28 + +-- AMS_Slave0_T29 + +-- AMS_Slave0_T30 + +-- AMS_Slave0_T31 + + ------------------------------------------------------------------------ + + Name: AMS_Slave1_Log0 + Id: 0x610 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_V0 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave1_V1 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_V2 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_V3 + + Signal tree: + + -- {root} + +-- AMS_Slave1_V0 + +-- AMS_Slave1_V1 + +-- AMS_Slave1_V2 + +-- AMS_Slave1_V3 + + ------------------------------------------------------------------------ + + Name: AMS_Slave1_Log1 + Id: 0x611 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_V4 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave1_V5 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_V6 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_V7 + + Signal tree: + + -- {root} + +-- AMS_Slave1_V4 + +-- AMS_Slave1_V5 + +-- AMS_Slave1_V6 + +-- AMS_Slave1_V7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave1_Log2 + Id: 0x612 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_V8 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave1_V9 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_V10 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_V11 + + Signal tree: + + -- {root} + +-- AMS_Slave1_V8 + +-- AMS_Slave1_V9 + +-- AMS_Slave1_V10 + +-- AMS_Slave1_V11 + + ------------------------------------------------------------------------ + + Name: AMS_Slave1_Log3 + Id: 0x613 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_V12 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave1_V13 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_V14 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_V15 + + Signal tree: + + -- {root} + +-- AMS_Slave1_V12 + +-- AMS_Slave1_V13 + +-- AMS_Slave1_V14 + +-- AMS_Slave1_V15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave1_Log4 + Id: 0x614 + Length: 6 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_V16 + B +---+---+---+---+---+---+---+---+ + y 2 |<------------------------------| + t +---+---+---+---+---+---+---+---+ + e 3 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_FailedSensors + + Signal tree: + + -- {root} + +-- AMS_Slave1_V16 + +-- AMS_Slave1_FailedSensors + + ------------------------------------------------------------------------ + + Name: AMS_Slave1_Log5 + Id: 0x615 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T0 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T1 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T2 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave1_T3 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T4 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T5 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T6 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T7 + + Signal tree: + + -- {root} + +-- AMS_Slave1_T0 + +-- AMS_Slave1_T1 + +-- AMS_Slave1_T2 + +-- AMS_Slave1_T3 + +-- AMS_Slave1_T4 + +-- AMS_Slave1_T5 + +-- AMS_Slave1_T6 + +-- AMS_Slave1_T7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave1_Log6 + Id: 0x616 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T8 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T9 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T10 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave1_T11 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T12 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T13 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T14 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T15 + + Signal tree: + + -- {root} + +-- AMS_Slave1_T8 + +-- AMS_Slave1_T9 + +-- AMS_Slave1_T10 + +-- AMS_Slave1_T11 + +-- AMS_Slave1_T12 + +-- AMS_Slave1_T13 + +-- AMS_Slave1_T14 + +-- AMS_Slave1_T15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave1_Log7 + Id: 0x617 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T16 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T17 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T18 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave1_T19 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T20 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T21 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T22 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T23 + + Signal tree: + + -- {root} + +-- AMS_Slave1_T16 + +-- AMS_Slave1_T17 + +-- AMS_Slave1_T18 + +-- AMS_Slave1_T19 + +-- AMS_Slave1_T20 + +-- AMS_Slave1_T21 + +-- AMS_Slave1_T22 + +-- AMS_Slave1_T23 + + ------------------------------------------------------------------------ + + Name: AMS_Slave1_Log8 + Id: 0x618 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T24 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T25 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T26 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave1_T27 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T28 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T29 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T30 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave1_T31 + + Signal tree: + + -- {root} + +-- AMS_Slave1_T24 + +-- AMS_Slave1_T25 + +-- AMS_Slave1_T26 + +-- AMS_Slave1_T27 + +-- AMS_Slave1_T28 + +-- AMS_Slave1_T29 + +-- AMS_Slave1_T30 + +-- AMS_Slave1_T31 + + ------------------------------------------------------------------------ + + Name: AMS_Slave2_Log0 + Id: 0x620 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_V0 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave2_V1 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_V2 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_V3 + + Signal tree: + + -- {root} + +-- AMS_Slave2_V0 + +-- AMS_Slave2_V1 + +-- AMS_Slave2_V2 + +-- AMS_Slave2_V3 + + ------------------------------------------------------------------------ + + Name: AMS_Slave2_Log1 + Id: 0x621 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_V4 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave2_V5 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_V6 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_V7 + + Signal tree: + + -- {root} + +-- AMS_Slave2_V4 + +-- AMS_Slave2_V5 + +-- AMS_Slave2_V6 + +-- AMS_Slave2_V7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave2_Log2 + Id: 0x622 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_V8 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave2_V9 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_V10 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_V11 + + Signal tree: + + -- {root} + +-- AMS_Slave2_V8 + +-- AMS_Slave2_V9 + +-- AMS_Slave2_V10 + +-- AMS_Slave2_V11 + + ------------------------------------------------------------------------ + + Name: AMS_Slave2_Log3 + Id: 0x623 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_V12 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave2_V13 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_V14 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_V15 + + Signal tree: + + -- {root} + +-- AMS_Slave2_V12 + +-- AMS_Slave2_V13 + +-- AMS_Slave2_V14 + +-- AMS_Slave2_V15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave2_Log4 + Id: 0x624 + Length: 6 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_V16 + B +---+---+---+---+---+---+---+---+ + y 2 |<------------------------------| + t +---+---+---+---+---+---+---+---+ + e 3 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_FailedSensors + + Signal tree: + + -- {root} + +-- AMS_Slave2_V16 + +-- AMS_Slave2_FailedSensors + + ------------------------------------------------------------------------ + + Name: AMS_Slave2_Log5 + Id: 0x625 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T0 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T1 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T2 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave2_T3 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T4 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T5 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T6 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T7 + + Signal tree: + + -- {root} + +-- AMS_Slave2_T0 + +-- AMS_Slave2_T1 + +-- AMS_Slave2_T2 + +-- AMS_Slave2_T3 + +-- AMS_Slave2_T4 + +-- AMS_Slave2_T5 + +-- AMS_Slave2_T6 + +-- AMS_Slave2_T7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave2_Log6 + Id: 0x626 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T8 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T9 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T10 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave2_T11 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T12 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T13 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T14 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T15 + + Signal tree: + + -- {root} + +-- AMS_Slave2_T8 + +-- AMS_Slave2_T9 + +-- AMS_Slave2_T10 + +-- AMS_Slave2_T11 + +-- AMS_Slave2_T12 + +-- AMS_Slave2_T13 + +-- AMS_Slave2_T14 + +-- AMS_Slave2_T15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave2_Log7 + Id: 0x627 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T16 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T17 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T18 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave2_T19 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T20 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T21 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T22 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T23 + + Signal tree: + + -- {root} + +-- AMS_Slave2_T16 + +-- AMS_Slave2_T17 + +-- AMS_Slave2_T18 + +-- AMS_Slave2_T19 + +-- AMS_Slave2_T20 + +-- AMS_Slave2_T21 + +-- AMS_Slave2_T22 + +-- AMS_Slave2_T23 + + ------------------------------------------------------------------------ + + Name: AMS_Slave2_Log8 + Id: 0x628 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T24 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T25 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T26 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave2_T27 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T28 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T29 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T30 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave2_T31 + + Signal tree: + + -- {root} + +-- AMS_Slave2_T24 + +-- AMS_Slave2_T25 + +-- AMS_Slave2_T26 + +-- AMS_Slave2_T27 + +-- AMS_Slave2_T28 + +-- AMS_Slave2_T29 + +-- AMS_Slave2_T30 + +-- AMS_Slave2_T31 + + ------------------------------------------------------------------------ + + Name: AMS_Slave3_Log0 + Id: 0x630 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_V0 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave3_V1 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_V2 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_V3 + + Signal tree: + + -- {root} + +-- AMS_Slave3_V0 + +-- AMS_Slave3_V1 + +-- AMS_Slave3_V2 + +-- AMS_Slave3_V3 + + ------------------------------------------------------------------------ + + Name: AMS_Slave3_Log1 + Id: 0x631 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_V4 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave3_V5 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_V6 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_V7 + + Signal tree: + + -- {root} + +-- AMS_Slave3_V4 + +-- AMS_Slave3_V5 + +-- AMS_Slave3_V6 + +-- AMS_Slave3_V7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave3_Log2 + Id: 0x632 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_V8 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave3_V9 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_V10 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_V11 + + Signal tree: + + -- {root} + +-- AMS_Slave3_V8 + +-- AMS_Slave3_V9 + +-- AMS_Slave3_V10 + +-- AMS_Slave3_V11 + + ------------------------------------------------------------------------ + + Name: AMS_Slave3_Log3 + Id: 0x633 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_V12 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave3_V13 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_V14 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_V15 + + Signal tree: + + -- {root} + +-- AMS_Slave3_V12 + +-- AMS_Slave3_V13 + +-- AMS_Slave3_V14 + +-- AMS_Slave3_V15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave3_Log4 + Id: 0x634 + Length: 6 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_V16 + B +---+---+---+---+---+---+---+---+ + y 2 |<------------------------------| + t +---+---+---+---+---+---+---+---+ + e 3 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_FailedSensors + + Signal tree: + + -- {root} + +-- AMS_Slave3_V16 + +-- AMS_Slave3_FailedSensors + + ------------------------------------------------------------------------ + + Name: AMS_Slave3_Log5 + Id: 0x635 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T0 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T1 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T2 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave3_T3 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T4 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T5 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T6 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T7 + + Signal tree: + + -- {root} + +-- AMS_Slave3_T0 + +-- AMS_Slave3_T1 + +-- AMS_Slave3_T2 + +-- AMS_Slave3_T3 + +-- AMS_Slave3_T4 + +-- AMS_Slave3_T5 + +-- AMS_Slave3_T6 + +-- AMS_Slave3_T7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave3_Log6 + Id: 0x636 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T8 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T9 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T10 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave3_T11 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T12 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T13 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T14 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T15 + + Signal tree: + + -- {root} + +-- AMS_Slave3_T8 + +-- AMS_Slave3_T9 + +-- AMS_Slave3_T10 + +-- AMS_Slave3_T11 + +-- AMS_Slave3_T12 + +-- AMS_Slave3_T13 + +-- AMS_Slave3_T14 + +-- AMS_Slave3_T15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave3_Log7 + Id: 0x637 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T16 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T17 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T18 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave3_T19 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T20 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T21 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T22 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T23 + + Signal tree: + + -- {root} + +-- AMS_Slave3_T16 + +-- AMS_Slave3_T17 + +-- AMS_Slave3_T18 + +-- AMS_Slave3_T19 + +-- AMS_Slave3_T20 + +-- AMS_Slave3_T21 + +-- AMS_Slave3_T22 + +-- AMS_Slave3_T23 + + ------------------------------------------------------------------------ + + Name: AMS_Slave3_Log8 + Id: 0x638 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T24 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T25 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T26 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave3_T27 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T28 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T29 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T30 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave3_T31 + + Signal tree: + + -- {root} + +-- AMS_Slave3_T24 + +-- AMS_Slave3_T25 + +-- AMS_Slave3_T26 + +-- AMS_Slave3_T27 + +-- AMS_Slave3_T28 + +-- AMS_Slave3_T29 + +-- AMS_Slave3_T30 + +-- AMS_Slave3_T31 + + ------------------------------------------------------------------------ + + Name: AMS_Slave4_Log0 + Id: 0x640 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_V0 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave4_V1 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_V2 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_V3 + + Signal tree: + + -- {root} + +-- AMS_Slave4_V0 + +-- AMS_Slave4_V1 + +-- AMS_Slave4_V2 + +-- AMS_Slave4_V3 + + ------------------------------------------------------------------------ + + Name: AMS_Slave4_Log1 + Id: 0x641 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_V4 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave4_V5 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_V6 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_V7 + + Signal tree: + + -- {root} + +-- AMS_Slave4_V4 + +-- AMS_Slave4_V5 + +-- AMS_Slave4_V6 + +-- AMS_Slave4_V7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave4_Log2 + Id: 0x642 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_V8 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave4_V9 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_V10 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_V11 + + Signal tree: + + -- {root} + +-- AMS_Slave4_V8 + +-- AMS_Slave4_V9 + +-- AMS_Slave4_V10 + +-- AMS_Slave4_V11 + + ------------------------------------------------------------------------ + + Name: AMS_Slave4_Log3 + Id: 0x643 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_V12 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave4_V13 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_V14 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_V15 + + Signal tree: + + -- {root} + +-- AMS_Slave4_V12 + +-- AMS_Slave4_V13 + +-- AMS_Slave4_V14 + +-- AMS_Slave4_V15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave4_Log4 + Id: 0x644 + Length: 6 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_V16 + B +---+---+---+---+---+---+---+---+ + y 2 |<------------------------------| + t +---+---+---+---+---+---+---+---+ + e 3 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_FailedSensors + + Signal tree: + + -- {root} + +-- AMS_Slave4_V16 + +-- AMS_Slave4_FailedSensors + + ------------------------------------------------------------------------ + + Name: AMS_Slave4_Log5 + Id: 0x645 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T0 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T1 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T2 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave4_T3 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T4 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T5 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T6 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T7 + + Signal tree: + + -- {root} + +-- AMS_Slave4_T0 + +-- AMS_Slave4_T1 + +-- AMS_Slave4_T2 + +-- AMS_Slave4_T3 + +-- AMS_Slave4_T4 + +-- AMS_Slave4_T5 + +-- AMS_Slave4_T6 + +-- AMS_Slave4_T7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave4_Log6 + Id: 0x646 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T8 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T9 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T10 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave4_T11 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T12 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T13 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T14 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T15 + + Signal tree: + + -- {root} + +-- AMS_Slave4_T8 + +-- AMS_Slave4_T9 + +-- AMS_Slave4_T10 + +-- AMS_Slave4_T11 + +-- AMS_Slave4_T12 + +-- AMS_Slave4_T13 + +-- AMS_Slave4_T14 + +-- AMS_Slave4_T15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave4_Log7 + Id: 0x647 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T16 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T17 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T18 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave4_T19 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T20 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T21 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T22 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T23 + + Signal tree: + + -- {root} + +-- AMS_Slave4_T16 + +-- AMS_Slave4_T17 + +-- AMS_Slave4_T18 + +-- AMS_Slave4_T19 + +-- AMS_Slave4_T20 + +-- AMS_Slave4_T21 + +-- AMS_Slave4_T22 + +-- AMS_Slave4_T23 + + ------------------------------------------------------------------------ + + Name: AMS_Slave4_Log8 + Id: 0x648 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T24 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T25 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T26 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave4_T27 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T28 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T29 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T30 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave4_T31 + + Signal tree: + + -- {root} + +-- AMS_Slave4_T24 + +-- AMS_Slave4_T25 + +-- AMS_Slave4_T26 + +-- AMS_Slave4_T27 + +-- AMS_Slave4_T28 + +-- AMS_Slave4_T29 + +-- AMS_Slave4_T30 + +-- AMS_Slave4_T31 + + ------------------------------------------------------------------------ + + Name: AMS_Slave5_Log0 + Id: 0x650 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_V0 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave5_V1 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_V2 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_V3 + + Signal tree: + + -- {root} + +-- AMS_Slave5_V0 + +-- AMS_Slave5_V1 + +-- AMS_Slave5_V2 + +-- AMS_Slave5_V3 + + ------------------------------------------------------------------------ + + Name: AMS_Slave5_Log1 + Id: 0x651 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_V4 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave5_V5 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_V6 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_V7 + + Signal tree: + + -- {root} + +-- AMS_Slave5_V4 + +-- AMS_Slave5_V5 + +-- AMS_Slave5_V6 + +-- AMS_Slave5_V7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave5_Log2 + Id: 0x652 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_V8 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave5_V9 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_V10 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_V11 + + Signal tree: + + -- {root} + +-- AMS_Slave5_V8 + +-- AMS_Slave5_V9 + +-- AMS_Slave5_V10 + +-- AMS_Slave5_V11 + + ------------------------------------------------------------------------ + + Name: AMS_Slave5_Log3 + Id: 0x653 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_V12 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave5_V13 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_V14 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_V15 + + Signal tree: + + -- {root} + +-- AMS_Slave5_V12 + +-- AMS_Slave5_V13 + +-- AMS_Slave5_V14 + +-- AMS_Slave5_V15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave5_Log4 + Id: 0x654 + Length: 6 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_V16 + B +---+---+---+---+---+---+---+---+ + y 2 |<------------------------------| + t +---+---+---+---+---+---+---+---+ + e 3 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_FailedSensors + + Signal tree: + + -- {root} + +-- AMS_Slave5_V16 + +-- AMS_Slave5_FailedSensors + + ------------------------------------------------------------------------ + + Name: AMS_Slave5_Log5 + Id: 0x655 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T0 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T1 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T2 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave5_T3 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T4 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T5 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T6 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T7 + + Signal tree: + + -- {root} + +-- AMS_Slave5_T0 + +-- AMS_Slave5_T1 + +-- AMS_Slave5_T2 + +-- AMS_Slave5_T3 + +-- AMS_Slave5_T4 + +-- AMS_Slave5_T5 + +-- AMS_Slave5_T6 + +-- AMS_Slave5_T7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave5_Log6 + Id: 0x656 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T8 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T9 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T10 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave5_T11 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T12 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T13 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T14 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T15 + + Signal tree: + + -- {root} + +-- AMS_Slave5_T8 + +-- AMS_Slave5_T9 + +-- AMS_Slave5_T10 + +-- AMS_Slave5_T11 + +-- AMS_Slave5_T12 + +-- AMS_Slave5_T13 + +-- AMS_Slave5_T14 + +-- AMS_Slave5_T15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave5_Log7 + Id: 0x657 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T16 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T17 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T18 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave5_T19 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T20 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T21 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T22 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T23 + + Signal tree: + + -- {root} + +-- AMS_Slave5_T16 + +-- AMS_Slave5_T17 + +-- AMS_Slave5_T18 + +-- AMS_Slave5_T19 + +-- AMS_Slave5_T20 + +-- AMS_Slave5_T21 + +-- AMS_Slave5_T22 + +-- AMS_Slave5_T23 + + ------------------------------------------------------------------------ + + Name: AMS_Slave5_Log8 + Id: 0x658 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T24 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T25 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T26 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave5_T27 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T28 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T29 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T30 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave5_T31 + + Signal tree: + + -- {root} + +-- AMS_Slave5_T24 + +-- AMS_Slave5_T25 + +-- AMS_Slave5_T26 + +-- AMS_Slave5_T27 + +-- AMS_Slave5_T28 + +-- AMS_Slave5_T29 + +-- AMS_Slave5_T30 + +-- AMS_Slave5_T31 + + ------------------------------------------------------------------------ + + Name: AMS_Slave6_Log0 + Id: 0x660 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_V0 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave6_V1 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_V2 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_V3 + + Signal tree: + + -- {root} + +-- AMS_Slave6_V0 + +-- AMS_Slave6_V1 + +-- AMS_Slave6_V2 + +-- AMS_Slave6_V3 + + ------------------------------------------------------------------------ + + Name: AMS_Slave6_Log1 + Id: 0x661 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_V4 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave6_V5 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_V6 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_V7 + + Signal tree: + + -- {root} + +-- AMS_Slave6_V4 + +-- AMS_Slave6_V5 + +-- AMS_Slave6_V6 + +-- AMS_Slave6_V7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave6_Log2 + Id: 0x662 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_V8 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave6_V9 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_V10 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_V11 + + Signal tree: + + -- {root} + +-- AMS_Slave6_V8 + +-- AMS_Slave6_V9 + +-- AMS_Slave6_V10 + +-- AMS_Slave6_V11 + + ------------------------------------------------------------------------ + + Name: AMS_Slave6_Log3 + Id: 0x663 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_V12 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave6_V13 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_V14 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_V15 + + Signal tree: + + -- {root} + +-- AMS_Slave6_V12 + +-- AMS_Slave6_V13 + +-- AMS_Slave6_V14 + +-- AMS_Slave6_V15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave6_Log4 + Id: 0x664 + Length: 6 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_V16 + B +---+---+---+---+---+---+---+---+ + y 2 |<------------------------------| + t +---+---+---+---+---+---+---+---+ + e 3 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_FailedSensors + + Signal tree: + + -- {root} + +-- AMS_Slave6_V16 + +-- AMS_Slave6_FailedSensors + + ------------------------------------------------------------------------ + + Name: AMS_Slave6_Log5 + Id: 0x665 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T0 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T1 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T2 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave6_T3 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T4 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T5 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T6 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T7 + + Signal tree: + + -- {root} + +-- AMS_Slave6_T0 + +-- AMS_Slave6_T1 + +-- AMS_Slave6_T2 + +-- AMS_Slave6_T3 + +-- AMS_Slave6_T4 + +-- AMS_Slave6_T5 + +-- AMS_Slave6_T6 + +-- AMS_Slave6_T7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave6_Log6 + Id: 0x666 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T8 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T9 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T10 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave6_T11 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T12 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T13 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T14 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T15 + + Signal tree: + + -- {root} + +-- AMS_Slave6_T8 + +-- AMS_Slave6_T9 + +-- AMS_Slave6_T10 + +-- AMS_Slave6_T11 + +-- AMS_Slave6_T12 + +-- AMS_Slave6_T13 + +-- AMS_Slave6_T14 + +-- AMS_Slave6_T15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave6_Log7 + Id: 0x667 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T16 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T17 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T18 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave6_T19 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T20 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T21 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T22 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T23 + + Signal tree: + + -- {root} + +-- AMS_Slave6_T16 + +-- AMS_Slave6_T17 + +-- AMS_Slave6_T18 + +-- AMS_Slave6_T19 + +-- AMS_Slave6_T20 + +-- AMS_Slave6_T21 + +-- AMS_Slave6_T22 + +-- AMS_Slave6_T23 + + ------------------------------------------------------------------------ + + Name: AMS_Slave6_Log8 + Id: 0x668 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T24 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T25 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T26 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave6_T27 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T28 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T29 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T30 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave6_T31 + + Signal tree: + + -- {root} + +-- AMS_Slave6_T24 + +-- AMS_Slave6_T25 + +-- AMS_Slave6_T26 + +-- AMS_Slave6_T27 + +-- AMS_Slave6_T28 + +-- AMS_Slave6_T29 + +-- AMS_Slave6_T30 + +-- AMS_Slave6_T31 + + ------------------------------------------------------------------------ + + Name: AMS_Slave7_Log0 + Id: 0x670 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_V0 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave7_V1 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_V2 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_V3 + + Signal tree: + + -- {root} + +-- AMS_Slave7_V0 + +-- AMS_Slave7_V1 + +-- AMS_Slave7_V2 + +-- AMS_Slave7_V3 + + ------------------------------------------------------------------------ + + Name: AMS_Slave7_Log1 + Id: 0x671 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_V4 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave7_V5 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_V6 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_V7 + + Signal tree: + + -- {root} + +-- AMS_Slave7_V4 + +-- AMS_Slave7_V5 + +-- AMS_Slave7_V6 + +-- AMS_Slave7_V7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave7_Log2 + Id: 0x672 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_V8 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave7_V9 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_V10 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_V11 + + Signal tree: + + -- {root} + +-- AMS_Slave7_V8 + +-- AMS_Slave7_V9 + +-- AMS_Slave7_V10 + +-- AMS_Slave7_V11 + + ------------------------------------------------------------------------ + + Name: AMS_Slave7_Log3 + Id: 0x673 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_V12 + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave7_V13 + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_V14 + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_V15 + + Signal tree: + + -- {root} + +-- AMS_Slave7_V12 + +-- AMS_Slave7_V13 + +-- AMS_Slave7_V14 + +-- AMS_Slave7_V15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave7_Log4 + Id: 0x674 + Length: 6 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_V16 + B +---+---+---+---+---+---+---+---+ + y 2 |<------------------------------| + t +---+---+---+---+---+---+---+---+ + e 3 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_FailedSensors + + Signal tree: + + -- {root} + +-- AMS_Slave7_V16 + +-- AMS_Slave7_FailedSensors + + ------------------------------------------------------------------------ + + Name: AMS_Slave7_Log5 + Id: 0x675 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T0 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T1 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T2 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave7_T3 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T4 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T5 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T6 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T7 + + Signal tree: + + -- {root} + +-- AMS_Slave7_T0 + +-- AMS_Slave7_T1 + +-- AMS_Slave7_T2 + +-- AMS_Slave7_T3 + +-- AMS_Slave7_T4 + +-- AMS_Slave7_T5 + +-- AMS_Slave7_T6 + +-- AMS_Slave7_T7 + + ------------------------------------------------------------------------ + + Name: AMS_Slave7_Log6 + Id: 0x676 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T8 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T9 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T10 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave7_T11 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T12 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T13 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T14 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T15 + + Signal tree: + + -- {root} + +-- AMS_Slave7_T8 + +-- AMS_Slave7_T9 + +-- AMS_Slave7_T10 + +-- AMS_Slave7_T11 + +-- AMS_Slave7_T12 + +-- AMS_Slave7_T13 + +-- AMS_Slave7_T14 + +-- AMS_Slave7_T15 + + ------------------------------------------------------------------------ + + Name: AMS_Slave7_Log7 + Id: 0x677 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T16 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T17 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T18 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave7_T19 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T20 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T21 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T22 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T23 + + Signal tree: + + -- {root} + +-- AMS_Slave7_T16 + +-- AMS_Slave7_T17 + +-- AMS_Slave7_T18 + +-- AMS_Slave7_T19 + +-- AMS_Slave7_T20 + +-- AMS_Slave7_T21 + +-- AMS_Slave7_T22 + +-- AMS_Slave7_T23 + + ------------------------------------------------------------------------ + + Name: AMS_Slave7_Log8 + Id: 0x678 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T24 + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T25 + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T26 + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Slave7_T27 + t +---+---+---+---+---+---+---+---+ + e 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T28 + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T29 + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T30 + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Slave7_T31 + + Signal tree: + + -- {root} + +-- AMS_Slave7_T24 + +-- AMS_Slave7_T25 + +-- AMS_Slave7_T26 + +-- AMS_Slave7_T27 + +-- AMS_Slave7_T28 + +-- AMS_Slave7_T29 + +-- AMS_Slave7_T30 + +-- AMS_Slave7_T31 + + ------------------------------------------------------------------------ + + Name: ACU_TX + Id: 0xe0 + Length: 4 bytes + Cycle time: - ms + Senders: ABX + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-x|<---------x|<---------x| + +---+---+---+---+---+---+---+---+ + | | | +-- ACU_AS_Mission + | | +-- ACU_AS_State + | +-- ACU_Power_Off + B +-- ACU_Reset + y +---+---+---+---+---+---+---+---+ + t 1 | | |<-------------x| |<-x| + e +---+---+---+---+---+---+---+---+ + | +-- ACU_AllowTorque + +-- ABX_ConMon_Error + +---+---+---+---+---+---+---+---+ + 2 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 3 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + +-- ACU_AS_Mission + +-- ACU_AS_State + +-- ACU_Power_Off + +-- ACU_Reset + +-- ACU_AllowTorque + +-- ABX_ConMon_Error + + ------------------------------------------------------------------------ + + Name: AMS_Slave7Status + Id: 0x87 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-------------------------x| + +---+---+---+---+---+---+---+---+ + | +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Error + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_Temp_sensor + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |------------------------------x| + t +---+---+---+---+---+---+---+---+ + e +-- AMS_SlaveStatus_MinCellVolt + +---+---+---+---+---+---+---+---+ + 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxCellVolt + +---+---+---+---+---+---+---+---+ + 6 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxTemp + + Signal tree: + + -- {root} + +-- AMS_SlaveStatus_Error + +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Temp_sensor + +-- AMS_SlaveStatus_MinCellVolt + +-- AMS_SlaveStatus_MaxCellVolt + +-- AMS_SlaveStatus_MaxTemp + + ------------------------------------------------------------------------ + + Name: AMS_Slave6Status + Id: 0x86 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-------------------------x| + +---+---+---+---+---+---+---+---+ + | +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Error + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_Temp_sensor + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |------------------------------x| + t +---+---+---+---+---+---+---+---+ + e +-- AMS_SlaveStatus_MinCellVolt + +---+---+---+---+---+---+---+---+ + 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxCellVolt + +---+---+---+---+---+---+---+---+ + 6 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxTemp + + Signal tree: + + -- {root} + +-- AMS_SlaveStatus_Error + +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Temp_sensor + +-- AMS_SlaveStatus_MinCellVolt + +-- AMS_SlaveStatus_MaxCellVolt + +-- AMS_SlaveStatus_MaxTemp + + ------------------------------------------------------------------------ + + Name: AMS_Slave5Status + Id: 0x85 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-------------------------x| + +---+---+---+---+---+---+---+---+ + | +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Error + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_Temp_sensor + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |------------------------------x| + t +---+---+---+---+---+---+---+---+ + e +-- AMS_SlaveStatus_MinCellVolt + +---+---+---+---+---+---+---+---+ + 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxCellVolt + +---+---+---+---+---+---+---+---+ + 6 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxTemp + + Signal tree: + + -- {root} + +-- AMS_SlaveStatus_Error + +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Temp_sensor + +-- AMS_SlaveStatus_MinCellVolt + +-- AMS_SlaveStatus_MaxCellVolt + +-- AMS_SlaveStatus_MaxTemp + + ------------------------------------------------------------------------ + + Name: AMS_Slave4Status + Id: 0x84 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-------------------------x| + +---+---+---+---+---+---+---+---+ + | +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Error + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_Temp_sensor + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |------------------------------x| + t +---+---+---+---+---+---+---+---+ + e +-- AMS_SlaveStatus_MinCellVolt + +---+---+---+---+---+---+---+---+ + 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxCellVolt + +---+---+---+---+---+---+---+---+ + 6 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxTemp + + Signal tree: + + -- {root} + +-- AMS_SlaveStatus_Error + +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Temp_sensor + +-- AMS_SlaveStatus_MinCellVolt + +-- AMS_SlaveStatus_MaxCellVolt + +-- AMS_SlaveStatus_MaxTemp + + ------------------------------------------------------------------------ + + Name: AMS_Slave3Status + Id: 0x83 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-------------------------x| + +---+---+---+---+---+---+---+---+ + | +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Error + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_Temp_sensor + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |------------------------------x| + t +---+---+---+---+---+---+---+---+ + e +-- AMS_SlaveStatus_MinCellVolt + +---+---+---+---+---+---+---+---+ + 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxCellVolt + +---+---+---+---+---+---+---+---+ + 6 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxTemp + + Signal tree: + + -- {root} + +-- AMS_SlaveStatus_Error + +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Temp_sensor + +-- AMS_SlaveStatus_MinCellVolt + +-- AMS_SlaveStatus_MaxCellVolt + +-- AMS_SlaveStatus_MaxTemp + + ------------------------------------------------------------------------ + + Name: AMS_Slave2Status + Id: 0x82 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-------------------------x| + +---+---+---+---+---+---+---+---+ + | +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Error + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_Temp_sensor + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |------------------------------x| + t +---+---+---+---+---+---+---+---+ + e +-- AMS_SlaveStatus_MinCellVolt + +---+---+---+---+---+---+---+---+ + 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxCellVolt + +---+---+---+---+---+---+---+---+ + 6 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxTemp + + Signal tree: + + -- {root} + +-- AMS_SlaveStatus_Error + +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Temp_sensor + +-- AMS_SlaveStatus_MinCellVolt + +-- AMS_SlaveStatus_MaxCellVolt + +-- AMS_SlaveStatus_MaxTemp + + ------------------------------------------------------------------------ + + Name: AMS_Slave1Status + Id: 0x81 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-------------------------x| + +---+---+---+---+---+---+---+---+ + | +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Error + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_Temp_Sensor + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |------------------------------x| + t +---+---+---+---+---+---+---+---+ + e +-- AMS_SlaveStatus_MinCellVolt + +---+---+---+---+---+---+---+---+ + 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxCellVolt + +---+---+---+---+---+---+---+---+ + 6 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxTemp + + Signal tree: + + -- {root} + +-- AMS_SlaveStatus_Error + +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Temp_Sensor + +-- AMS_SlaveStatus_MinCellVolt + +-- AMS_SlaveStatus_MaxCellVolt + +-- AMS_SlaveStatus_MaxTemp + + ------------------------------------------------------------------------ + + Name: ABX_Misc + Id: 0x109 + Length: 7 bytes + Cycle time: - ms + Senders: ABX + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_Distance_session + B +---+---+---+---+---+---+---+---+ + y 3 |------------------------------x| + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_Distance_total + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- ABX_LV_SoC + +---+---+---+---+---+---+---+---+ + 6 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + +-- ABX_Distance_session + +-- ABX_Distance_total + +-- ABX_LV_SoC + + ------------------------------------------------------------------------ + + Name: AMS_Error + Id: 0xc + Length: 2 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- AMS_Error_Kind + t +---+---+---+---+---+---+---+---+ + e 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_Error_Arg + + Signal tree: + + -- {root} + +-- AMS_Error_Kind + +-- AMS_Error_Arg + + Signal choices: + + AMS_Error_Kind + 0 None + 1 Slave Timeout + 2 Slave Panic + 3 Shunt Timeout + 4 Shunt Overcurrent + 5 Shunt Overtemperature + + ------------------------------------------------------------------------ + + Name: ABX_CoolingSys_Internal + Id: 0x108 + Length: 8 bytes + Cycle time: - ms + Senders: ABX + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 1 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_CS_T_InvL + +---+---+---+---+---+---+---+---+ + 2 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 3 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y +-- ABX_CS_T_InvR + t +---+---+---+---+---+---+---+---+ + e 4 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 5 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_CS_T_MotL + +---+---+---+---+---+---+---+---+ + 6 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 7 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_CS_T_MotR + + Signal tree: + + -- {root} + +-- ABX_CS_T_InvL + +-- ABX_CS_T_InvR + +-- ABX_CS_T_MotL + +-- ABX_CS_T_MotR + + ------------------------------------------------------------------------ + + Name: ABX_CoolingSys_MotInv + Id: 0x107 + Length: 8 bytes + Cycle time: - ms + Senders: ABX + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- ABX_CS_P_InvIn + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- ABX_CS_P_MotLIn + +---+---+---+---+---+---+---+---+ + 2 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + B 3 |<-----------------------------x| + y +---+---+---+---+---+---+---+---+ + t +-- ABX_CS_P_MotRIn + e +---+---+---+---+---+---+---+---+ + 4 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 5 |----------------------x|<------| + +---+---+---+---+---+---+---+---+ + +-- ABX_CS_T_InvIn + +---+---+---+---+---+---+---+---+ + 6 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_CS_T_MotIn + +---+---+---+---+---+---+---+---+ + 7 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + +-- ABX_CS_P_InvIn + +-- ABX_CS_P_MotLIn + +-- ABX_CS_P_MotRIn + +-- ABX_CS_T_InvIn + +-- ABX_CS_T_MotIn + + ------------------------------------------------------------------------ + + Name: ABX_BrakeT + Id: 0x105 + Length: 8 bytes + Cycle time: - ms + Senders: ABX + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 1 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_BrakeT_FL + +---+---+---+---+---+---+---+---+ + 2 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 3 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y +-- ABX_BrakeT_FR + t +---+---+---+---+---+---+---+---+ + e 4 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 5 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_BrakeT_RL + +---+---+---+---+---+---+---+---+ + 6 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 7 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_BrakeT_RR + + Signal tree: + + -- {root} + +-- ABX_BrakeT_FL + +-- ABX_BrakeT_FR + +-- ABX_BrakeT_RL + +-- ABX_BrakeT_RR + + ------------------------------------------------------------------------ + + Name: ABX_Wheelspeed + Id: 0x104 + Length: 8 bytes + Cycle time: - ms + Senders: ABX + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 1 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_Wheelspeed_FL + +---+---+---+---+---+---+---+---+ + 2 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 3 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y +-- ABX_Wheelspeed_FR + t +---+---+---+---+---+---+---+---+ + e 4 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 5 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_Wheelspeed_RL + +---+---+---+---+---+---+---+---+ + 6 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 7 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_Wheelspeed_RR + + Signal tree: + + -- {root} + +-- ABX_Wheelspeed_FL + +-- ABX_Wheelspeed_FR + +-- ABX_Wheelspeed_RL + +-- ABX_Wheelspeed_RR + + ------------------------------------------------------------------------ + + Name: ABX_Dampers + Id: 0x103 + Length: 8 bytes + Cycle time: - ms + Senders: ABX + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 1 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_DamperHeave_F + +---+---+---+---+---+---+---+---+ + 2 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 3 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y +-- ABX_DamperRoll_F + t +---+---+---+---+---+---+---+---+ + e 4 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 5 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_DamperHeave_R + +---+---+---+---+---+---+---+---+ + 6 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 7 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_DamperRoll_R + + Signal tree: + + -- {root} + +-- ABX_DamperHeave_F + +-- ABX_DamperRoll_F + +-- ABX_DamperHeave_R + +-- ABX_DamperRoll_R + + ------------------------------------------------------------------------ + + Name: ABX_Timings + Id: 0x102 + Length: 8 bytes + Cycle time: - ms + Senders: ABX + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 1 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_Laptime_best + +---+---+---+---+---+---+---+---+ + 2 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 3 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y +-- ABX_Laptime_last + t +---+---+---+---+---+---+---+---+ + e 4 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 5 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_Sectortime_best + +---+---+---+---+---+---+---+---+ + 6 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 7 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_Sectortime_last + + Signal tree: + + -- {root} + +-- ABX_Laptime_best + +-- ABX_Laptime_last + +-- ABX_Sectortime_best + +-- ABX_Sectortime_last + + ------------------------------------------------------------------------ + + Name: ABX_Driver + Id: 0x101 + Length: 8 bytes + Cycle time: - ms + Senders: ABX + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- ABX_APPS_percent + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 2 |--------------x|<--------------| + +---+---+---+---+---+---+---+---+ + +-- ABX_BrakeP_F + +---+---+---+---+---+---+---+---+ + 3 |<------------------------------| + +---+---+---+---+---+---+---+---+ + B +-- ABX_BrakeP_R + y +---+---+---+---+---+---+---+---+ + t 4 |<-----------------------------x| + e +---+---+---+---+---+---+---+---+ + +-- ABX_Steering_Angle + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- ABX_Speed + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- ABX_Lapcounter + +---+---+---+---+---+---+---+---+ + 7 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- ABX_Sectorcounter + + Signal tree: + + -- {root} + +-- ABX_APPS_percent + +-- ABX_BrakeP_F + +-- ABX_BrakeP_R + +-- ABX_Steering_Angle + +-- ABX_Speed + +-- ABX_Lapcounter + +-- ABX_Sectorcounter + + ------------------------------------------------------------------------ + + Name: TTS_Config + Id: 0x700 + Length: 1 bytes + Cycle time: - ms + Senders: ABX + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + B 0 | | | | | | |<-----x| + y +---+---+---+---+---+---+---+---+ + t +-- TTS_NewID + e + + Signal tree: + + -- {root} + +-- TTS_NewID + + ------------------------------------------------------------------------ + + Name: TTS_RR + Id: 0x704 + Length: 8 bytes + Cycle time: - ms + Senders: TTS_RR + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 1 |--------------x|<--------------| + +---+---+---+---+---+---+---+---+ + +-- TTS_RR_Inner + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- TTS_RR_CenterIn + +---+---+---+---+---+---+---+---+ + B 3 |------------------------------x| + y +---+---+---+---+---+---+---+---+ + t 4 |--------------x|<--------------| + e +---+---+---+---+---+---+---+---+ + +-- TTS_RR_Center + +---+---+---+---+---+---+---+---+ + 5 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- TTS_RR_CenterOut + +---+---+---+---+---+---+---+---+ + 6 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 7 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + +-- TTS_RR_Outer + + Signal tree: + + -- {root} + +-- TTS_RR_Inner + +-- TTS_RR_CenterIn + +-- TTS_RR_Center + +-- TTS_RR_CenterOut + +-- TTS_RR_Outer + + ------------------------------------------------------------------------ + + Name: TTS_RL + Id: 0x703 + Length: 8 bytes + Cycle time: - ms + Senders: TTS_RL + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 1 |--------------x|<--------------| + +---+---+---+---+---+---+---+---+ + +-- TTS_RL_Outer + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- TTS_RL_CenterOut + +---+---+---+---+---+---+---+---+ + B 3 |------------------------------x| + y +---+---+---+---+---+---+---+---+ + t 4 |--------------x|<--------------| + e +---+---+---+---+---+---+---+---+ + +-- TTS_RL_Center + +---+---+---+---+---+---+---+---+ + 5 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- TTS_RL_CenterIn + +---+---+---+---+---+---+---+---+ + 6 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 7 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + +-- TTS_RL_Inner + + Signal tree: + + -- {root} + +-- TTS_RL_Outer + +-- TTS_RL_CenterOut + +-- TTS_RL_Center + +-- TTS_RL_CenterIn + +-- TTS_RL_Inner + + ------------------------------------------------------------------------ + + Name: TTS_FR + Id: 0x702 + Length: 8 bytes + Cycle time: - ms + Senders: TTS_FR + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 1 |--------------x|<--------------| + +---+---+---+---+---+---+---+---+ + +-- TTS_FR_Inner + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- TTS_FR_CenterIn + +---+---+---+---+---+---+---+---+ + B 3 |------------------------------x| + y +---+---+---+---+---+---+---+---+ + t 4 |--------------x|<--------------| + e +---+---+---+---+---+---+---+---+ + +-- TTS_FR_Center + +---+---+---+---+---+---+---+---+ + 5 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- TTS_FR_CenterOut + +---+---+---+---+---+---+---+---+ + 6 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 7 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + +-- TTS_FR_Outer + + Signal tree: + + -- {root} + +-- TTS_FR_Inner + +-- TTS_FR_CenterIn + +-- TTS_FR_Center + +-- TTS_FR_CenterOut + +-- TTS_FR_Outer + + ------------------------------------------------------------------------ + + Name: TTS_FL + Id: 0x701 + Length: 8 bytes + Cycle time: - ms + Senders: TTS_FL + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 1 |--------------x|<--------------| + +---+---+---+---+---+---+---+---+ + +-- TTS_FL_Outer + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- TTS_FL_CenterOut + +---+---+---+---+---+---+---+---+ + B 3 |------------------------------x| + y +---+---+---+---+---+---+---+---+ + t 4 |--------------x|<--------------| + e +---+---+---+---+---+---+---+---+ + +-- TTS_FL_Center + +---+---+---+---+---+---+---+---+ + 5 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- TTS_FL_CenterIn + +---+---+---+---+---+---+---+---+ + 6 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 7 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + +-- TTS_FL_Inner + + Signal tree: + + -- {root} + +-- TTS_FL_Outer + +-- TTS_FL_CenterOut + +-- TTS_FL_Center + +-- TTS_FL_CenterIn + +-- TTS_FL_Inner + + ------------------------------------------------------------------------ + + Name: STW_Param_Set + Id: 0x402 + Length: 5 bytes + Cycle time: - ms + Senders: STW + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- STW_Param_Type + +---+---+---+---+---+---+---+---+ + 1 |XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX| + +---+---+---+---+---+---+---+---+ + 2 |XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX| + +---+---+---+---+---+---+---+---+ + B 3 |XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX| + y +---+---+---+---+---+---+---+---+ + t 4 |XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX| + e +---+---+---+---+---+---+---+---+ + +-- STW_Param_ASRI + +-- STW_Param_ASRON + +-- STW_Param_ASRP + +-- STW_Param_BBal + +-- STW_Param_EnduPowerLimit + +-- STW_Param_MUMAX + +-- STW_Param_SLIPREF + +-- STW_Param_Test3 + +-- STW_Param_Test4 + + Signal tree: + + -- {root} + +-- STW_Param_Type + +-- BrakeBalance (0) + | +-- STW_Param_BBal + +-- TractionControl1 (1) + | +-- STW_Param_SLIPREF + +-- TractionControl2 (2) + | +-- STW_Param_MUMAX + +-- TorqueMap (3) + | +-- STW_Param_ASRP + +-- Test1 (4) + | +-- STW_Param_ASRON + +-- Test2 (5) + | +-- STW_Param_ASRI + +-- Test3 (6) + | +-- STW_Param_EnduPowerLimit + +-- Test4 (7) + | +-- STW_Param_Test3 + +-- 8 + +-- STW_Param_Test4 + + Signal choices: + + STW_Param_Type + 0 BrakeBalance + 1 TractionControl1 + 2 TractionControl2 + 3 TorqueMap + 4 Test1 + 5 Test2 + 6 Test3 + 7 Test4 + + STW_Param_ASRON + 0 OFF + 1 ON + + ------------------------------------------------------------------------ + + Name: AMS_Slave0Status + Id: 0x80 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-------------------------x| + +---+---+---+---+---+---+---+---+ + | +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Error + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_Temp_sensor + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y 3 |------------------------------x| + t +---+---+---+---+---+---+---+---+ + e +-- AMS_SlaveStatus_MinCellVolt + +---+---+---+---+---+---+---+---+ + 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxCellVolt + +---+---+---+---+---+---+---+---+ + 6 | | | | |<--------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlaveStatus_MaxTemp + + Signal tree: + + -- {root} + +-- AMS_SlaveStatus_Error + +-- AMS_SlaveStatus_ID + +-- AMS_SlaveStatus_Temp_sensor + +-- AMS_SlaveStatus_MinCellVolt + +-- AMS_SlaveStatus_MaxCellVolt + +-- AMS_SlaveStatus_MaxTemp + + ------------------------------------------------------------------------ + + Name: SSU_Message + Id: 0x500 + Length: 4 bytes + Cycle time: - ms + Senders: SSU + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 1 |<------------------------------| + B +---+---+---+---+---+---+---+---+ + y +-- SSU_AirPressure + t +---+---+---+---+---+---+---+---+ + e 2 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 3 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- SSU_AirTemp + + Signal tree: + + -- {root} + +-- SSU_AirPressure + +-- SSU_AirTemp + + ------------------------------------------------------------------------ + + Name: AMS_Status + Id: 0xa + Length: 6 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-------------------------x| + +---+---+---+---+---+---+---+---+ + | +-- AMS_State + +-- SDC_Closed + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + B +-- SOC + y +---+---+---+---+---+---+---+---+ + t 2 |<------------------------------| + e +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- Min_cell_volt + +---+---+---+---+---+---+---+---+ + 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- Max_cell_temp + + Signal tree: + + -- {root} + +-- AMS_State + +-- SDC_Closed + +-- SOC + +-- Min_cell_volt + +-- Max_cell_temp + + Signal choices: + + AMS_State + 0 TS_INACTIVE + 1 TS_ACTIVE + 2 TS_PRECHARGE + 3 TS_DISCHARGE + 4 TS_ERROR + + ------------------------------------------------------------------------ + + Name: AMS_SlavePanic + Id: 0x9 + Length: 8 bytes + Cycle time: - ms + Senders: AMS + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlavePanic_SlaveID + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlavePanic_Kind + +---+---+---+---+---+---+---+---+ + B 2 |<------------------------------| + y +---+---+---+---+---+---+---+---+ + t 3 |-------------------------------| + e +---+---+---+---+---+---+---+---+ + 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- AMS_SlavePanic_Arg + +---+---+---+---+---+---+---+---+ + 6 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 7 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + +-- AMS_SlavePanic_SlaveID + +-- AMS_SlavePanic_Kind + +-- AMS_SlavePanic_Arg + + Signal choices: + + AMS_SlavePanic_Kind + 0 Overtemperature + 1 Undertemperature + 2 Overvoltage + 3 Undervoltage + 4 Too_few_working_temperature_sensors + 5 Open_cell_connection + + ------------------------------------------------------------------------ + + Name: AMS_In + Id: 0xb + Length: 1 bytes + Cycle time: - ms + Senders: ABX + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + B 0 |<---------------------x|<-x|<-x| + y +---+---+---+---+---+---+---+---+ + t | | +-- TS_activate + e | +-- Inverters_discharged + +-- Lap_Number + + Signal tree: + + -- {root} + +-- TS_activate + +-- Inverters_discharged + +-- Lap_Number + + ------------------------------------------------------------------------ + + Name: Shunt_Current + Id: 0x521 + Length: 6 bytes + Cycle time: - ms + Senders: Shunt + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 1 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + B 2 |<------------------------------| + y +---+---+---+---+---+---+---+---+ + t 3 |-------------------------------| + e +---+---+---+---+---+---+---+---+ + 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- Shunt_Current + + Signal tree: + + -- {root} + +-- Shunt_Current + + ------------------------------------------------------------------------ + + Name: Shunt_Voltage1 + Id: 0x522 + Length: 6 bytes + Cycle time: - ms + Senders: Shunt + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 1 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + B 2 |<------------------------------| + y +---+---+---+---+---+---+---+---+ + t 3 |-------------------------------| + e +---+---+---+---+---+---+---+---+ + 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- Shunt_Voltage1 + + Signal tree: + + -- {root} + +-- Shunt_Voltage1 + + ------------------------------------------------------------------------ + + Name: Shunt_Voltage2 + Id: 0x523 + Length: 6 bytes + Cycle time: - ms + Senders: Shunt + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 1 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + B 2 |<------------------------------| + y +---+---+---+---+---+---+---+---+ + t 3 |-------------------------------| + e +---+---+---+---+---+---+---+---+ + 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- Shunt_Voltage2 + + Signal tree: + + -- {root} + +-- Shunt_Voltage2 + + ------------------------------------------------------------------------ + + Name: Shunt_Voltage3 + Id: 0x524 + Length: 6 bytes + Cycle time: - ms + Senders: Shunt + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 1 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + B 2 |<------------------------------| + y +---+---+---+---+---+---+---+---+ + t 3 |-------------------------------| + e +---+---+---+---+---+---+---+---+ + 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- Shunt_Voltage3 + + Signal tree: + + -- {root} + +-- Shunt_Voltage3 + + ------------------------------------------------------------------------ + + Name: Shunt_Temperature + Id: 0x525 + Length: 6 bytes + Cycle time: - ms + Senders: Shunt + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 1 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + B 2 |<------------------------------| + y +---+---+---+---+---+---+---+---+ + t 3 |-------------------------------| + e +---+---+---+---+---+---+---+---+ + 4 |-------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- Shunt_Temperature + + Signal tree: + + -- {root} + +-- Shunt_Temperature + + ------------------------------------------------------------------------ + + Name: SDCL_tx + Id: 0x10 + Length: 4 bytes + Cycle time: - ms + Senders: SDCL + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 | |<-x|<-x|<-x|<-x|<-x|<-x|<-x| + +---+---+---+---+---+---+---+---+ + | | | | | | +-- asms_state + | | | | | +-- sdc_state_1 + | | | | +-- sdc_state_2 + | | | +-- sdc_state_3 + | | +-- heartbeat_ok + | +-- sdcl_sdc_ready + B +-- ts_start_muxed + y +---+---+---+---+---+---+---+---+ + t 1 | | |<---------x|<-x|<-x|<-x| + e +---+---+---+---+---+---+---+---+ + | | | +-- latch_init_open + | | +-- latch_closed + | +-- latch_reopened + +-- as_mission + +---+---+---+---+---+---+---+---+ + 2 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 3 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + +-- asms_state + +-- sdc_state_1 + +-- sdc_state_2 + +-- sdc_state_3 + +-- heartbeat_ok + +-- sdcl_sdc_ready + +-- ts_start_muxed + +-- latch_init_open + +-- latch_closed + +-- latch_reopened + +-- as_mission + + ------------------------------------------------------------------------ + + Name: SDCL_rx + Id: 0xf + Length: 3 bytes + Cycle time: - ms + Senders: ABX + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 | |<---------x| |<-x|<-x|<-x| + +---+---+---+---+---+---+---+---+ + | | | +-- as_close_sdc + B | | +-- sdcl_heartbeat + y | +-- asb_error + t +-- as_mission + e +---+---+---+---+---+---+---+---+ + 1 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 2 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + + Signal tree: + + -- {root} + +-- as_close_sdc + +-- sdcl_heartbeat + +-- asb_error + +-- as_mission + + ------------------------------------------------------------------------ + + Name: PDU_Command + Id: 0xc8 + Length: 7 bytes + Cycle time: - ms + Senders: ABX + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-x|<-x| |<-x|<-x|<-x| | + +---+---+---+---+---+---+---+---+ + | | | | | +-- PDU_inverter_rx + | | | | +-- PDU_servos_regler_rx + | | | +-- PDU_ACU_rx + | | +-- PDU_lidar_rx + | +-- PDU_shutdown_circuit_rx + +-- PDU_alwayson_rx + +---+---+---+---+---+---+---+---+ + 1 |<-x|<-x|<-x|<-x|<-x| |<-x|<-x| + +---+---+---+---+---+---+---+---+ + | | | | | | +-- PDU_steering_rx + | | | | | +-- PDU_aggregat_rx + | | | | +-- PDU_cs_valve_rx + | | | +-- PDU_ebs_valve_2_rx + | | +-- PDU_ebs_valve_1_rx + B | +-- PDU_servo_rx + y +-- PDU_misc_rx + t +---+---+---+---+---+---+---+---+ + e 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_PWM_radiator_fans_rx + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_PWM_TSAC_fans_rx + +---+---+---+---+---+---+---+---+ + 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_PWM_aggregat_rx + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_PWM_pump_rx + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_checksum_rx + + Signal tree: + + -- {root} + +-- PDU_alwayson_rx + +-- PDU_shutdown_circuit_rx + +-- PDU_lidar_rx + +-- PDU_ACU_rx + +-- PDU_servos_regler_rx + +-- PDU_inverter_rx + +-- PDU_misc_rx + +-- PDU_servo_rx + +-- PDU_ebs_valve_1_rx + +-- PDU_ebs_valve_2_rx + +-- PDU_cs_valve_rx + +-- PDU_aggregat_rx + +-- PDU_steering_rx + +-- PDU_PWM_radiator_fans_rx + +-- PDU_PWM_TSAC_fans_rx + +-- PDU_PWM_aggregat_rx + +-- PDU_PWM_pump_rx + +-- PDU_checksum_rx + + ------------------------------------------------------------------------ + + Name: PDU_Response + Id: 0xc9 + Length: 7 bytes + Cycle time: - ms + Senders: PDU + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-x|<-x| |<-x|<-x|<-x| | + +---+---+---+---+---+---+---+---+ + | | | | | +-- PDU_inverter_tx + | | | | +-- PDU_servos_regler_tx + | | | +-- PDU_ACU_tx + | | +-- PDU_lidar_tx + | +-- PDU_shutdown_circuit_tx + +-- PDU_alwayson_tx + +---+---+---+---+---+---+---+---+ + 1 |<-x|<-x|<-x|<-x|<-x| |<-x|<-x| + +---+---+---+---+---+---+---+---+ + | | | | | | +-- PDU_steering_tx + | | | | | +-- PDU_aggregat_tx + | | | | +-- PDU_cs_valve_tx + | | | +-- PDU_ebs_valve_2_tx + | | +-- PDU_ebs_valve_1_tx + B | +-- PDU_servo_tx + y +-- PDU_misc_tx + t +---+---+---+---+---+---+---+---+ + e 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_PWM_TSAC_fans + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_PWM_radiatot_fans_tx + +---+---+---+---+---+---+---+---+ + 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_PWM_aggregat + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_PWM_pump + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_checksum_tx + + Signal tree: + + -- {root} + +-- PDU_alwayson_tx + +-- PDU_shutdown_circuit_tx + +-- PDU_lidar_tx + +-- PDU_ACU_tx + +-- PDU_servos_regler_tx + +-- PDU_inverter_tx + +-- PDU_misc_tx + +-- PDU_servo_tx + +-- PDU_ebs_valve_1_tx + +-- PDU_ebs_valve_2_tx + +-- PDU_cs_valve_tx + +-- PDU_aggregat_tx + +-- PDU_steering_tx + +-- PDU_PWM_TSAC_fans + +-- PDU_PWM_radiatot_fans_tx + +-- PDU_PWM_aggregat + +-- PDU_PWM_pump + +-- PDU_checksum_tx + + ------------------------------------------------------------------------ + + Name: TxPDO + Id: 0x202 + Length: 6 bytes + Cycle time: - ms + Senders: ABX + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 | | |<-x|<-x|<-x|<-x|<-x| | + +---+---+---+---+---+---+---+---+ + | | | | +-- pdm_powersupply_less_8v + | | | +-- pdm_powersupply_greater_32v + | | +-- pdm_canbus_timeout + | +-- pdm_canbus_startupmissing + +-- pdm_canbus_statewarning + +---+---+---+---+---+---+---+---+ + 1 | | |<-x|<-x|<-x|<-x|<-x|<-x| + +---+---+---+---+---+---+---+---+ + | | | | | +-- pdm_analoginput_middleposition + | | | | +-- pdm_analoginput_cablebreak + | | | +-- pdm_analoginput_shortcircuit + | | +-- pdm_analoginput_currentoverload + B | +-- pdm_temperature_warning + y +-- pdm_temperature_shutdown + t +---+---+---+---+---+---+---+---+ + e 2 | | |<-x|<-x|<-x|<-x|<-x|<-x| + +---+---+---+---+---+---+---+---+ + | | | | | +-- pdm_output1_controllerrange + | | | | +-- pdm_output2_controllerrange + | | | +-- pdm_output1_cablebreak + | | +-- pdm_output2_cablebreak + | +-- pdm_output1_shortcircuit + +-- pdm_output2_shortcircuit + +---+---+---+---+---+---+---+---+ + 3 | | | | | | | | | + +---+---+---+---+---+---+---+---+ + 4 |------------------------------x| + +---+---+---+---+---+---+---+---+ + 5 |<------------------------------| + +---+---+---+---+---+---+---+---+ + +-- PDM_analoginput + + Signal tree: + + -- {root} + +-- pdm_powersupply_less_8v + +-- pdm_powersupply_greater_32v + +-- pdm_canbus_timeout + +-- pdm_canbus_startupmissing + +-- pdm_canbus_statewarning + +-- pdm_analoginput_middleposition + +-- pdm_analoginput_cablebreak + +-- pdm_analoginput_shortcircuit + +-- pdm_analoginput_currentoverload + +-- pdm_temperature_warning + +-- pdm_temperature_shutdown + +-- pdm_output1_controllerrange + +-- pdm_output2_controllerrange + +-- pdm_output1_cablebreak + +-- pdm_output2_cablebreak + +-- pdm_output1_shortcircuit + +-- pdm_output2_shortcircuit + +-- PDM_analoginput + + ------------------------------------------------------------------------ + + Name: AS_Mission_fb + Id: 0x410 + Length: 1 bytes + Cycle time: - ms + Senders: ABX + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + B 0 | | | | | |<---------x| + y +---+---+---+---+---+---+---+---+ + t +-- Mission_selection + e + + Signal tree: + + -- {root} + +-- Mission_selection + + Signal choices: + + Mission_selection + 1 MissionSelection_acceleration + 2 MissionSelection_skidpad + 3 MissionSelection_trackdrive + 4 MissionSelection_braketest + 5 MissionSelection_inspection + 6 MissionSelection_autocross + 7 MissionSelection_manual + + ------------------------------------------------------------------------ + + Name: STW_mission_selected + Id: 0x400 + Length: 1 bytes + Cycle time: - ms + Senders: STW + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + B 0 | | | | | |<---------x| + y +---+---+---+---+---+---+---+---+ + t +-- Mission_selection + e + + Signal tree: + + -- {root} + +-- Mission_selection + + Signal choices: + + Mission_selection + 1 MissionSelection_acceleration + 2 MissionSelection_skidpad + 3 MissionSelection_trackdrive + 4 MissionSelection_braketest + 5 MissionSelection_inspection + 6 MissionSelection_autocross + 7 MissionSelection_manual + + ------------------------------------------------------------------------ + + Name: EPSC_out + Id: 0x321 + Length: 8 bytes + Cycle time: - ms + Senders: EPSC + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- EPSC_measured_steering_angle + +---+---+---+---+---+---+---+---+ + 2 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- EPSC_measured_current + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- EPSC_measured_voltage + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |--------------x|<--------------| + +---+---+---+---+---+---+---+---+ + +-- EPSC_measured_rpm + +---+---+---+---+---+---+---+---+ + 6 |----------------------x|<------| + +---+---+---+---+---+---+---+---+ + +-- EPSC_measured_temperature + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- EPSC_measured_internal_temp + + Signal tree: + + -- {root} + +-- EPSC_measured_steering_angle + +-- EPSC_measured_current + +-- EPSC_measured_voltage + +-- EPSC_measured_rpm + +-- EPSC_measured_temperature + +-- EPSC_measured_internal_temp + + ------------------------------------------------------------------------ + + Name: EPSC_Steering_In + Id: 0x123 + Length: 2 bytes + Cycle time: - ms + Senders: ABX + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + B 0 |<------------------------------| + y +---+---+---+---+---+---+---+---+ + t 1 |------------------------------x| + e +---+---+---+---+---+---+---+---+ + +-- EPSC_desired_steering_angle + + Signal tree: + + -- {root} + +-- EPSC_desired_steering_angle + + ------------------------------------------------------------------------ + + Name: STW_buttons + Id: 0x401 + Length: 1 bytes + Cycle time: - ms + Senders: STW + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 | | | |<-x|<-x|<-x|<-x|<-x| + B +---+---+---+---+---+---+---+---+ + y | | | | +-- STW_button_Enter + t | | | +-- STW_button_DRS + e | | +-- STW_button_right + | +-- STW_button_left + +-- STW_button_PG + + Signal tree: + + -- {root} + +-- STW_button_Enter + +-- STW_button_DRS + +-- STW_button_right + +-- STW_button_left + +-- STW_button_PG + + ------------------------------------------------------------------------ + + Name: STW_status + Id: 0x412 + Length: 6 bytes + Cycle time: - ms + Senders: ABX + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-------------x| |<---------x| + +---+---+---+---+---+---+---+---+ + | +-- AS_State_STW + +-- R2D_Progress + +---+---+---+---+---+---+---+---+ + 1 | | |<-x|<-x|<-x|<-x|<-x|<-x| + +---+---+---+---+---+---+---+---+ + | | | | | +-- InvL_ready + | | | | +-- InvR_ready + | | | +-- SDC_BFL + | | +-- SDC_BRL + | +-- SDC_ACC + +-- SDC_HVB + +---+---+---+---+---+---+---+---+ + 2 | | |<---------------------x| + +---+---+---+---+---+---+---+---+ + +-- Lap_Count + B +---+---+---+---+---+---+---+---+ + y 3 |<-----------------------------x| + t +---+---+---+---+---+---+---+---+ + e +-- iniChk_state + +---+---+---+---+---+---+---+---+ + 4 |<-x|<-x|<-x|<-x|<-x|<-x|<-x|<-x| + +---+---+---+---+---+---+---+---+ + | | | | | | | +-- ERR_SDC + | | | | | | +-- ERR_AMS + | | | | | +-- ERR_PDU + | | | | +-- ERR_IniChk + | | | +-- ERR_ConMon + | | +-- ERR_SCS + | +-- ERR_sBSPD + +-- ERR_APPSp + +---+---+---+---+---+---+---+---+ + 5 | | | |<-x|<-x|<-x|<-x|<-x| + +---+---+---+---+---+---+---+---+ + | | | | +-- ERR_AS + | | | +-- ERR_ROS + | | +-- ERR_RES + | +-- ERR_InvL + +-- ERR_InvR + + Signal tree: + + -- {root} + +-- AS_State_STW + +-- R2D_Progress + +-- InvL_ready + +-- InvR_ready + +-- SDC_BFL + +-- SDC_BRL + +-- SDC_ACC + +-- SDC_HVB + +-- Lap_Count + +-- iniChk_state + +-- ERR_SDC + +-- ERR_AMS + +-- ERR_PDU + +-- ERR_IniChk + +-- ERR_ConMon + +-- ERR_SCS + +-- ERR_sBSPD + +-- ERR_APPSp + +-- ERR_AS + +-- ERR_ROS + +-- ERR_RES + +-- ERR_InvL + +-- ERR_InvR + + Signal choices: + + AS_State_STW + 0 AS_Off + 1 AS_Manual + 2 AS_Ready + 3 AS_Driving + 4 AS_Finished + 5 AS_Emergency + + R2D_Progress + 0 R2D_None + 1 R2D_TSMS + 2 R2D_TSActive + 3 R2D_Resetting_Nodes + 4 R2D_Resetting_Comms + 5 R2D_Waiting_Init + 6 R2D_Init_Stage1 + 7 R2D_Init_Stage2 + 15 R2D_Init_Success + + iniChk_state + 0 Start + 1 WD_Check + 2 WD_OK + 3 ASB_Check_1 + 4 ASB_Check_2 + 5 Wait_TS + 6 EBS_Check_A + 7 EBS_Check_B + 8 Done + 9 Error + + ------------------------------------------------------------------------ + + Name: PDU_Current_1 + Id: 0xca + Length: 8 bytes + Cycle time: - ms + Senders: PDU + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_alwayson_curr + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- PDU_misc_curr + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_inverter_curr + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_shutdown_circuit_curr + + Signal tree: + + -- {root} + +-- PDU_alwayson_curr + +-- PDU_misc_curr + +-- PDU_inverter_curr + +-- PDU_shutdown_circuit_curr + + ------------------------------------------------------------------------ + + Name: PDU_Current_2 + Id: 0xcb + Length: 8 bytes + Cycle time: - ms + Senders: PDU + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_tsac__fans_curr + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- PDU_pump_curr + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_aggregat_curr + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_steering_curr + + Signal tree: + + -- {root} + +-- PDU_tsac__fans_curr + +-- PDU_pump_curr + +-- PDU_aggregat_curr + +-- PDU_steering_curr + + ------------------------------------------------------------------------ + + Name: PDU_Current_3 + Id: 0xcc + Length: 8 bytes + Cycle time: - ms + Senders: PDU + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_ebs_valve_1_curr + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- PDU_ebs_valve_2_curr + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_mode_cs_valve_curr + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_mode_gss_curr + + Signal tree: + + -- {root} + +-- PDU_ebs_valve_1_curr + +-- PDU_ebs_valve_2_curr + +-- PDU_mode_cs_valve_curr + +-- PDU_mode_gss_curr + + ------------------------------------------------------------------------ + + Name: PDU_Current_4 + Id: 0xcd + Length: 8 bytes + Cycle time: - ms + Senders: PDU + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 1 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_radiator_fans_curr + +---+---+---+---+---+---+---+---+ + 2 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 3 |------------------------------x| + B +---+---+---+---+---+---+---+---+ + y +-- PDU_ACU_curr + t +---+---+---+---+---+---+---+---+ + e 4 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 5 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_servos_curr + +---+---+---+---+---+---+---+---+ + 6 |<------------------------------| + +---+---+---+---+---+---+---+---+ + 7 |------------------------------x| + +---+---+---+---+---+---+---+---+ + +-- PDU_lidar_curr + + Signal tree: + + -- {root} + +-- PDU_radiator_fans_curr + +-- PDU_ACU_curr + +-- PDU_servos_curr + +-- PDU_lidar_curr + + ------------------------------------------------------------------------ + + Name: EPSC_Config_In + Id: 0x124 + Length: 7 bytes + Cycle time: - ms + Senders: ABX + Layout: + + Bit + + 7 6 5 4 3 2 1 0 + +---+---+---+---+---+---+---+---+ + 0 |<-x|<-x|<-x|<-x|<-x|<-x|<-x|<-x| + +---+---+---+---+---+---+---+---+ + | | | | | | | +-- EPSC_flag7 + | | | | | | +-- EPSC_flag6 + | | | | | +-- EPSC_flag5 + | | | | +-- EPSC_flag4 + | | | +-- EPSC_flag3 + | | +-- EPSC_mode + | +-- EPSC_should_change_mode + +-- EPSC_should_calibrate + +---+---+---+---+---+---+---+---+ + 1 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- EPSC_Kp_pos + B +---+---+---+---+---+---+---+---+ + y 2 |<-----------------------------x| + t +---+---+---+---+---+---+---+---+ + e +-- EPSC_Ki_pos + +---+---+---+---+---+---+---+---+ + 3 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- EPSC_Kp_rpm + +---+---+---+---+---+---+---+---+ + 4 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- EPSC_Ki_rpm + +---+---+---+---+---+---+---+---+ + 5 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- EPSC_Kp_curr + +---+---+---+---+---+---+---+---+ + 6 |<-----------------------------x| + +---+---+---+---+---+---+---+---+ + +-- EPSC_Ki_curr + + Signal tree: + + -- {root} + +-- EPSC_should_calibrate + +-- EPSC_should_change_mode + | +-- 1 + | +-- EPSC_mode + | +-- EPSC_Kp_pos + | +-- EPSC_Ki_pos + | +-- EPSC_Kp_rpm + | +-- EPSC_Ki_rpm + | +-- EPSC_Kp_curr + | +-- EPSC_Ki_curr + +-- EPSC_flag3 + +-- EPSC_flag4 + +-- EPSC_flag5 + +-- EPSC_flag6 + +-- EPSC_flag7 + + ------------------------------------------------------------------------ diff --git a/ros2_ws/src/ft_can_transceiver_lib/include/.DS_Store b/ros2_ws/src/ft_can_transceiver_lib/include/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d3b0eae72f121bad9de886f1aa8531028441bd51 GIT binary patch literal 6148 zcmeHK!EVz)5S>i}byQW#0TA3);u_I3l`2(S+)xf&F@ggi*KPt>nBB^DnnM)HclaTG zgx`TTyBiQnd*~%Su3B{=b_fm{JbpcW;pz%I$Pa)_qU_%XeauZe6jPS$(mU`&Z_tP^v2pUU)fpy zwwTV-{(~3RG+AM$l}jilQ-pkYSD1;NkL}D%YL}b%iKrL#(*BdhVsvmg(4(V+t%U<;G>E83#>DTg`vESWmk-`V=WH;ane!#dEffq?-N^3qNZ&hrTxc7tf`Tl=- zb^q^zWDo{~fxF3o>YgMgW4v3qTi4!_?^+E#g|cv5>+x?240jbHmapQ+P$%$fHh^)! S)+0O+`4Mn5$RG@Clz~6~>1u%h literal 0 HcmV?d00001 diff --git a/ros2_ws/src/ft_can_transceiver_lib/include/ft_can_transceiver_lib/can1.h b/ros2_ws/src/ft_can_transceiver_lib/include/ft_can_transceiver_lib/can1.h new file mode 100644 index 0000000..1899d03 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/include/ft_can_transceiver_lib/can1.h @@ -0,0 +1,24612 @@ +/** + * @file can1.h + * + * @brief This header file was generated by cantools version 40.2.3 Sun Jul 20 11:04:58 2025. + * + * @copyright Copyright (c) 2018-2019 Erik Moqvist + * + * @par License + * The MIT License (MIT) + * + * 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. + */ + +#ifndef CAN1_H +#define CAN1_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#ifndef EINVAL +# define EINVAL 22 +#endif + +/* Frame ids. */ +#define CAN1_INVERTER_VELOCITY_FRAME_ID (0x776u) +#define CAN1_INVERTER_ERRORS_WARNINGS_FRAME_ID (0x780u) +#define CAN1_INVERTER_TORQUE_ACTUAL_CW_FRAME_ID (0x779u) +#define CAN1_INVERTER_TEMPERATUR_FRAME_ID (0x778u) +#define CAN1_INVERTER_TORQUE_WANTED_FRAME_ID (0x777u) +#define CAN1_SDO_TELEMETRIE_RX_NODE1_FRAME_ID (0x733u) +#define CAN1_SDO_TELEMETRIE_RX_NODE2_FRAME_ID (0x731u) +#define CAN1_SDO_TELEMETRIE_TX_FRAME_ID (0x732u) +#define CAN1_LAPTOP_SDO_NODE_FRAME_ID (0x730u) +#define CAN1_X_SENS_LONG_LAT_FRAME_ID (0x713u) +#define CAN1_X_SENS_RATEOFTURN_FRAME_ID (0x712u) +#define CAN1_X_SENS_ACCELERATION_FRAME_ID (0x711u) +#define CAN1_X_SENS_VELOCITY_FRAME_ID (0x714u) +#define CAN1_TELEMETRIE_FRAME_ID (0x720u) +#define CAN1_OVERRIDE_POWERMAP_FRAME_ID (0x725u) +#define CAN1_OVERRIDE_LAPTOP_2_FRAME_ID (0x724u) +#define CAN1_OVERRIDE_EPSC_COOLING_FRAME_ID (0x723u) +#define CAN1_OVERRIDE_LAPTOP_FRAME_ID (0x721u) +#define CAN1_APPS_OVERRIDE_FRAME_ID (0x722u) +#define CAN1_FTCU_DAMPER_FRAME_ID (0x103u) +#define CAN1_FTCU_PARAM_CONFIRM_FRAME_ID (0x413u) +#define CAN1_SENSORNODE_F_10_HZ_FRAME_ID (0xd1u) +#define CAN1_SENSORNODE_F_100_HZ_1_FRAME_ID (0xd3u) +#define CAN1_SENSORNODE_F_100_HZ_2_FRAME_ID (0xd5u) +#define CAN1_SENSORNODE_F_1K_HZ_FRAME_ID (0xd7u) +#define CAN1_SENSORNODE_R_10_HZ_FRAME_ID (0xd2u) +#define CAN1_SENSORNODE_R_100_HZ_FRAME_ID (0xd4u) +#define CAN1_SENSORNODE_R_1K_HZ_FRAME_ID (0xd8u) +#define CAN1_PWM_DUTY_CYCLE_FRAME_ID (0xdcu) +#define CAN1_PWM_CONFIG_FRAME_ID (0xddu) +#define CAN1_DASHBOARD_IN_FRAME_ID (0x420u) +#define CAN1_AMS_SLAVE1_STATUS_FRAME_ID (0x81u) +#define CAN1_AMS_SLAVE2_LOG0_FRAME_ID (0x620u) +#define CAN1_AMS_SLAVE2_LOG1_FRAME_ID (0x621u) +#define CAN1_AMS_SLAVE2_LOG2_FRAME_ID (0x622u) +#define CAN1_AMS_SLAVE2_LOG3_FRAME_ID (0x623u) +#define CAN1_AMS_SLAVE2_LOG4_FRAME_ID (0x624u) +#define CAN1_AMS_SLAVE2_LOG5_FRAME_ID (0x625u) +#define CAN1_AMS_SLAVE5_LOG6_FRAME_ID (0x656u) +#define CAN1_AMS_SLAVE4_LOG6_FRAME_ID (0x646u) +#define CAN1_AMS_SLAVE3_LOG6_FRAME_ID (0x636u) +#define CAN1_AMS_SLAVE2_LOG6_FRAME_ID (0x626u) +#define CAN1_AMS_SLAVE1_LOG6_FRAME_ID (0x616u) +#define CAN1_AMS_SLAVE5_LOG5_FRAME_ID (0x655u) +#define CAN1_AMS_SLAVE4_LOG5_FRAME_ID (0x645u) +#define CAN1_AMS_SLAVE3_LOG5_FRAME_ID (0x635u) +#define CAN1_AMS_SLAVE1_LOG5_FRAME_ID (0x615u) +#define CAN1_AMS_SLAVE5_LOG4_FRAME_ID (0x654u) +#define CAN1_AMS_SLAVE4_LOG4_FRAME_ID (0x644u) +#define CAN1_AMS_SLAVE3_LOG4_FRAME_ID (0x634u) +#define CAN1_AMS_SLAVE1_LOG4_FRAME_ID (0x614u) +#define CAN1_AMS_SLAVE5_LOG3_FRAME_ID (0x653u) +#define CAN1_AMS_SLAVE4_LOG3_FRAME_ID (0x643u) +#define CAN1_AMS_SLAVE3_LOG3_FRAME_ID (0x633u) +#define CAN1_AMS_SLAVE1_LOG3_FRAME_ID (0x613u) +#define CAN1_AMS_SLAVE5_LOG2_FRAME_ID (0x652u) +#define CAN1_AMS_SLAVE4_LOG2_FRAME_ID (0x642u) +#define CAN1_AMS_SLAVE3_LOG2_FRAME_ID (0x632u) +#define CAN1_AMS_SLAVE1_LOG2_FRAME_ID (0x612u) +#define CAN1_AMS_SLAVE5_LOG1_FRAME_ID (0x651u) +#define CAN1_AMS_SLAVE4_LOG1_FRAME_ID (0x641u) +#define CAN1_AMS_SLAVE3_LOG1_FRAME_ID (0x631u) +#define CAN1_AMS_SLAVE1_LOG1_FRAME_ID (0x611u) +#define CAN1_AMS_SLAVE5_LOG0_FRAME_ID (0x650u) +#define CAN1_AMS_SLAVE4_LOG0_FRAME_ID (0x640u) +#define CAN1_AMS_SLAVE3_LOG0_FRAME_ID (0x630u) +#define CAN1_AMS_SLAVE1_LOG0_FRAME_ID (0x610u) +#define CAN1_PDU_HEARTBEAT_FRAME_ID (0xceu) +#define CAN1_FTCU_PNEUMATIK_FRAME_ID (0x110u) +#define CAN1_ACU_TX_COMMANDS_FRAME_ID (0xe3u) +#define CAN1_ACU_RX_COMMANDS_FRAME_ID (0xe2u) +#define CAN1_ACU_RX_FRAME_ID (0xe1u) +#define CAN1_AMS_SLAVE0_LOG0_FRAME_ID (0x600u) +#define CAN1_AMS_SLAVE0_LOG1_FRAME_ID (0x601u) +#define CAN1_AMS_SLAVE0_LOG3_FRAME_ID (0x603u) +#define CAN1_AMS_SLAVE0_LOG4_FRAME_ID (0x604u) +#define CAN1_AMS_SLAVE0_LOG5_FRAME_ID (0x605u) +#define CAN1_AMS_SLAVE0_LOG6_FRAME_ID (0x606u) +#define CAN1_ACU_TX_FRAME_ID (0xe0u) +#define CAN1_AMS_SLAVE5_STATUS_FRAME_ID (0x85u) +#define CAN1_AMS_SLAVE4_STATUS_FRAME_ID (0x84u) +#define CAN1_AMS_SLAVE3_STATUS_FRAME_ID (0x83u) +#define CAN1_AMS_SLAVE2_STATUS_FRAME_ID (0x82u) +#define CAN1_AMS_ERROR_FRAME_ID (0x0cu) +#define CAN1_FTCU_COOLING_FRAME_ID (0x107u) +#define CAN1_FTCU_BRAKE_T_FRAME_ID (0x105u) +#define CAN1_FTCU_WHEELSPEED_FRAME_ID (0x104u) +#define CAN1_FTCU_TIMINGS_FRAME_ID (0x102u) +#define CAN1_FTCU_DRIVER_FRAME_ID (0x111u) +#define CAN1_TTS_RR_FRAME_ID (0x704u) +#define CAN1_TTS_RL_FRAME_ID (0x703u) +#define CAN1_TTS_FR_FRAME_ID (0x702u) +#define CAN1_TTS_FL_FRAME_ID (0x701u) +#define CAN1_STW_PARAM_SET_FRAME_ID (0x402u) +#define CAN1_AMS_SLAVE0_STATUS_FRAME_ID (0x80u) +#define CAN1_SSU_MESSAGE_FRAME_ID (0x500u) +#define CAN1_AMS_STATUS_FRAME_ID (0x0au) +#define CAN1_AMS_SLAVE_PANIC_FRAME_ID (0x09u) +#define CAN1_AMS_IN_FRAME_ID (0x0bu) +#define CAN1_SHUNT_CURRENT_FRAME_ID (0x521u) +#define CAN1_SHUNT_VOLTAGE1_FRAME_ID (0x522u) +#define CAN1_SHUNT_VOLTAGE2_FRAME_ID (0x523u) +#define CAN1_SHUNT_VOLTAGE3_FRAME_ID (0x524u) +#define CAN1_SHUNT_TEMPERATURE_FRAME_ID (0x525u) +#define CAN1_PDU_COMMAND_FRAME_ID (0xc8u) +#define CAN1_PDU_RESPONSE_FRAME_ID (0xc9u) +#define CAN1_AS_MISSION_FB_FRAME_ID (0x410u) +#define CAN1_STW_MISSION_SELECTED_FRAME_ID (0x400u) +#define CAN1_EPSC_OUT_FRAME_ID (0x125u) +#define CAN1_EPSC_STEERING_IN_FRAME_ID (0x123u) +#define CAN1_STW_BUTTONS_FRAME_ID (0x401u) +#define CAN1_STW_STATUS_FRAME_ID (0x412u) +#define CAN1_PDU_CURRENT_1_FRAME_ID (0xcau) +#define CAN1_PDU_CURRENT_2_FRAME_ID (0xcbu) +#define CAN1_PDU_CURRENT_3_FRAME_ID (0xccu) +#define CAN1_PDU_CURRENT_4_FRAME_ID (0xcdu) +#define CAN1_EPSC_CONFIG_IN_FRAME_ID (0x124u) + +/* Frame lengths in bytes. */ +#define CAN1_INVERTER_VELOCITY_LENGTH (8u) +#define CAN1_INVERTER_ERRORS_WARNINGS_LENGTH (8u) +#define CAN1_INVERTER_TORQUE_ACTUAL_CW_LENGTH (8u) +#define CAN1_INVERTER_TEMPERATUR_LENGTH (8u) +#define CAN1_INVERTER_TORQUE_WANTED_LENGTH (8u) +#define CAN1_SDO_TELEMETRIE_RX_NODE1_LENGTH (8u) +#define CAN1_SDO_TELEMETRIE_RX_NODE2_LENGTH (8u) +#define CAN1_SDO_TELEMETRIE_TX_LENGTH (8u) +#define CAN1_LAPTOP_SDO_NODE_LENGTH (1u) +#define CAN1_X_SENS_LONG_LAT_LENGTH (8u) +#define CAN1_X_SENS_RATEOFTURN_LENGTH (6u) +#define CAN1_X_SENS_ACCELERATION_LENGTH (6u) +#define CAN1_X_SENS_VELOCITY_LENGTH (6u) +#define CAN1_TELEMETRIE_LENGTH (7u) +#define CAN1_OVERRIDE_POWERMAP_LENGTH (8u) +#define CAN1_OVERRIDE_LAPTOP_2_LENGTH (5u) +#define CAN1_OVERRIDE_EPSC_COOLING_LENGTH (8u) +#define CAN1_OVERRIDE_LAPTOP_LENGTH (3u) +#define CAN1_APPS_OVERRIDE_LENGTH (5u) +#define CAN1_FTCU_DAMPER_LENGTH (8u) +#define CAN1_FTCU_PARAM_CONFIRM_LENGTH (1u) +#define CAN1_SENSORNODE_F_10_HZ_LENGTH (3u) +#define CAN1_SENSORNODE_F_100_HZ_1_LENGTH (7u) +#define CAN1_SENSORNODE_F_100_HZ_2_LENGTH (3u) +#define CAN1_SENSORNODE_F_1K_HZ_LENGTH (3u) +#define CAN1_SENSORNODE_R_10_HZ_LENGTH (7u) +#define CAN1_SENSORNODE_R_100_HZ_LENGTH (8u) +#define CAN1_SENSORNODE_R_1K_HZ_LENGTH (3u) +#define CAN1_PWM_DUTY_CYCLE_LENGTH (7u) +#define CAN1_PWM_CONFIG_LENGTH (6u) +#define CAN1_DASHBOARD_IN_LENGTH (1u) +#define CAN1_AMS_SLAVE1_STATUS_LENGTH (8u) +#define CAN1_AMS_SLAVE2_LOG0_LENGTH (8u) +#define CAN1_AMS_SLAVE2_LOG1_LENGTH (8u) +#define CAN1_AMS_SLAVE2_LOG2_LENGTH (8u) +#define CAN1_AMS_SLAVE2_LOG3_LENGTH (8u) +#define CAN1_AMS_SLAVE2_LOG4_LENGTH (6u) +#define CAN1_AMS_SLAVE2_LOG5_LENGTH (8u) +#define CAN1_AMS_SLAVE5_LOG6_LENGTH (8u) +#define CAN1_AMS_SLAVE4_LOG6_LENGTH (8u) +#define CAN1_AMS_SLAVE3_LOG6_LENGTH (8u) +#define CAN1_AMS_SLAVE2_LOG6_LENGTH (8u) +#define CAN1_AMS_SLAVE1_LOG6_LENGTH (8u) +#define CAN1_AMS_SLAVE5_LOG5_LENGTH (8u) +#define CAN1_AMS_SLAVE4_LOG5_LENGTH (8u) +#define CAN1_AMS_SLAVE3_LOG5_LENGTH (8u) +#define CAN1_AMS_SLAVE1_LOG5_LENGTH (8u) +#define CAN1_AMS_SLAVE5_LOG4_LENGTH (6u) +#define CAN1_AMS_SLAVE4_LOG4_LENGTH (6u) +#define CAN1_AMS_SLAVE3_LOG4_LENGTH (6u) +#define CAN1_AMS_SLAVE1_LOG4_LENGTH (6u) +#define CAN1_AMS_SLAVE5_LOG3_LENGTH (8u) +#define CAN1_AMS_SLAVE4_LOG3_LENGTH (8u) +#define CAN1_AMS_SLAVE3_LOG3_LENGTH (8u) +#define CAN1_AMS_SLAVE1_LOG3_LENGTH (8u) +#define CAN1_AMS_SLAVE5_LOG2_LENGTH (8u) +#define CAN1_AMS_SLAVE4_LOG2_LENGTH (8u) +#define CAN1_AMS_SLAVE3_LOG2_LENGTH (8u) +#define CAN1_AMS_SLAVE1_LOG2_LENGTH (8u) +#define CAN1_AMS_SLAVE5_LOG1_LENGTH (8u) +#define CAN1_AMS_SLAVE4_LOG1_LENGTH (8u) +#define CAN1_AMS_SLAVE3_LOG1_LENGTH (8u) +#define CAN1_AMS_SLAVE1_LOG1_LENGTH (8u) +#define CAN1_AMS_SLAVE5_LOG0_LENGTH (8u) +#define CAN1_AMS_SLAVE4_LOG0_LENGTH (8u) +#define CAN1_AMS_SLAVE3_LOG0_LENGTH (8u) +#define CAN1_AMS_SLAVE1_LOG0_LENGTH (8u) +#define CAN1_PDU_HEARTBEAT_LENGTH (1u) +#define CAN1_FTCU_PNEUMATIK_LENGTH (8u) +#define CAN1_ACU_TX_COMMANDS_LENGTH (6u) +#define CAN1_ACU_RX_COMMANDS_LENGTH (4u) +#define CAN1_ACU_RX_LENGTH (3u) +#define CAN1_AMS_SLAVE0_LOG0_LENGTH (8u) +#define CAN1_AMS_SLAVE0_LOG1_LENGTH (8u) +#define CAN1_AMS_SLAVE0_LOG3_LENGTH (8u) +#define CAN1_AMS_SLAVE0_LOG4_LENGTH (6u) +#define CAN1_AMS_SLAVE0_LOG5_LENGTH (8u) +#define CAN1_AMS_SLAVE0_LOG6_LENGTH (8u) +#define CAN1_ACU_TX_LENGTH (2u) +#define CAN1_AMS_SLAVE5_STATUS_LENGTH (8u) +#define CAN1_AMS_SLAVE4_STATUS_LENGTH (8u) +#define CAN1_AMS_SLAVE3_STATUS_LENGTH (8u) +#define CAN1_AMS_SLAVE2_STATUS_LENGTH (8u) +#define CAN1_AMS_ERROR_LENGTH (2u) +#define CAN1_FTCU_COOLING_LENGTH (8u) +#define CAN1_FTCU_BRAKE_T_LENGTH (8u) +#define CAN1_FTCU_WHEELSPEED_LENGTH (8u) +#define CAN1_FTCU_TIMINGS_LENGTH (8u) +#define CAN1_FTCU_DRIVER_LENGTH (8u) +#define CAN1_TTS_RR_LENGTH (8u) +#define CAN1_TTS_RL_LENGTH (8u) +#define CAN1_TTS_FR_LENGTH (8u) +#define CAN1_TTS_FL_LENGTH (8u) +#define CAN1_STW_PARAM_SET_LENGTH (6u) +#define CAN1_AMS_SLAVE0_STATUS_LENGTH (8u) +#define CAN1_SSU_MESSAGE_LENGTH (4u) +#define CAN1_AMS_STATUS_LENGTH (8u) +#define CAN1_AMS_SLAVE_PANIC_LENGTH (8u) +#define CAN1_AMS_IN_LENGTH (1u) +#define CAN1_SHUNT_CURRENT_LENGTH (6u) +#define CAN1_SHUNT_VOLTAGE1_LENGTH (6u) +#define CAN1_SHUNT_VOLTAGE2_LENGTH (6u) +#define CAN1_SHUNT_VOLTAGE3_LENGTH (6u) +#define CAN1_SHUNT_TEMPERATURE_LENGTH (6u) +#define CAN1_PDU_COMMAND_LENGTH (7u) +#define CAN1_PDU_RESPONSE_LENGTH (7u) +#define CAN1_AS_MISSION_FB_LENGTH (1u) +#define CAN1_STW_MISSION_SELECTED_LENGTH (1u) +#define CAN1_EPSC_OUT_LENGTH (8u) +#define CAN1_EPSC_STEERING_IN_LENGTH (2u) +#define CAN1_STW_BUTTONS_LENGTH (1u) +#define CAN1_STW_STATUS_LENGTH (7u) +#define CAN1_PDU_CURRENT_1_LENGTH (8u) +#define CAN1_PDU_CURRENT_2_LENGTH (8u) +#define CAN1_PDU_CURRENT_3_LENGTH (8u) +#define CAN1_PDU_CURRENT_4_LENGTH (8u) +#define CAN1_EPSC_CONFIG_IN_LENGTH (6u) + +/* Extended or standard frame types. */ +#define CAN1_INVERTER_VELOCITY_IS_EXTENDED (0) +#define CAN1_INVERTER_ERRORS_WARNINGS_IS_EXTENDED (0) +#define CAN1_INVERTER_TORQUE_ACTUAL_CW_IS_EXTENDED (0) +#define CAN1_INVERTER_TEMPERATUR_IS_EXTENDED (0) +#define CAN1_INVERTER_TORQUE_WANTED_IS_EXTENDED (0) +#define CAN1_SDO_TELEMETRIE_RX_NODE1_IS_EXTENDED (0) +#define CAN1_SDO_TELEMETRIE_RX_NODE2_IS_EXTENDED (0) +#define CAN1_SDO_TELEMETRIE_TX_IS_EXTENDED (0) +#define CAN1_LAPTOP_SDO_NODE_IS_EXTENDED (0) +#define CAN1_X_SENS_LONG_LAT_IS_EXTENDED (0) +#define CAN1_X_SENS_RATEOFTURN_IS_EXTENDED (0) +#define CAN1_X_SENS_ACCELERATION_IS_EXTENDED (0) +#define CAN1_X_SENS_VELOCITY_IS_EXTENDED (0) +#define CAN1_TELEMETRIE_IS_EXTENDED (0) +#define CAN1_OVERRIDE_POWERMAP_IS_EXTENDED (0) +#define CAN1_OVERRIDE_LAPTOP_2_IS_EXTENDED (0) +#define CAN1_OVERRIDE_EPSC_COOLING_IS_EXTENDED (0) +#define CAN1_OVERRIDE_LAPTOP_IS_EXTENDED (0) +#define CAN1_APPS_OVERRIDE_IS_EXTENDED (0) +#define CAN1_FTCU_DAMPER_IS_EXTENDED (0) +#define CAN1_FTCU_PARAM_CONFIRM_IS_EXTENDED (0) +#define CAN1_SENSORNODE_F_10_HZ_IS_EXTENDED (0) +#define CAN1_SENSORNODE_F_100_HZ_1_IS_EXTENDED (0) +#define CAN1_SENSORNODE_F_100_HZ_2_IS_EXTENDED (0) +#define CAN1_SENSORNODE_F_1K_HZ_IS_EXTENDED (0) +#define CAN1_SENSORNODE_R_10_HZ_IS_EXTENDED (0) +#define CAN1_SENSORNODE_R_100_HZ_IS_EXTENDED (0) +#define CAN1_SENSORNODE_R_1K_HZ_IS_EXTENDED (0) +#define CAN1_PWM_DUTY_CYCLE_IS_EXTENDED (0) +#define CAN1_PWM_CONFIG_IS_EXTENDED (0) +#define CAN1_DASHBOARD_IN_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE1_STATUS_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE2_LOG0_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE2_LOG1_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE2_LOG2_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE2_LOG3_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE2_LOG4_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE2_LOG5_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE5_LOG6_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE4_LOG6_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE3_LOG6_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE2_LOG6_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE1_LOG6_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE5_LOG5_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE4_LOG5_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE3_LOG5_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE1_LOG5_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE5_LOG4_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE4_LOG4_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE3_LOG4_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE1_LOG4_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE5_LOG3_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE4_LOG3_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE3_LOG3_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE1_LOG3_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE5_LOG2_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE4_LOG2_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE3_LOG2_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE1_LOG2_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE5_LOG1_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE4_LOG1_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE3_LOG1_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE1_LOG1_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE5_LOG0_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE4_LOG0_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE3_LOG0_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE1_LOG0_IS_EXTENDED (0) +#define CAN1_PDU_HEARTBEAT_IS_EXTENDED (0) +#define CAN1_FTCU_PNEUMATIK_IS_EXTENDED (0) +#define CAN1_ACU_TX_COMMANDS_IS_EXTENDED (0) +#define CAN1_ACU_RX_COMMANDS_IS_EXTENDED (0) +#define CAN1_ACU_RX_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE0_LOG0_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE0_LOG1_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE0_LOG3_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE0_LOG4_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE0_LOG5_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE0_LOG6_IS_EXTENDED (0) +#define CAN1_ACU_TX_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE5_STATUS_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE4_STATUS_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE3_STATUS_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE2_STATUS_IS_EXTENDED (0) +#define CAN1_AMS_ERROR_IS_EXTENDED (0) +#define CAN1_FTCU_COOLING_IS_EXTENDED (0) +#define CAN1_FTCU_BRAKE_T_IS_EXTENDED (0) +#define CAN1_FTCU_WHEELSPEED_IS_EXTENDED (0) +#define CAN1_FTCU_TIMINGS_IS_EXTENDED (0) +#define CAN1_FTCU_DRIVER_IS_EXTENDED (0) +#define CAN1_TTS_RR_IS_EXTENDED (0) +#define CAN1_TTS_RL_IS_EXTENDED (0) +#define CAN1_TTS_FR_IS_EXTENDED (0) +#define CAN1_TTS_FL_IS_EXTENDED (0) +#define CAN1_STW_PARAM_SET_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE0_STATUS_IS_EXTENDED (0) +#define CAN1_SSU_MESSAGE_IS_EXTENDED (0) +#define CAN1_AMS_STATUS_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE_PANIC_IS_EXTENDED (0) +#define CAN1_AMS_IN_IS_EXTENDED (0) +#define CAN1_SHUNT_CURRENT_IS_EXTENDED (0) +#define CAN1_SHUNT_VOLTAGE1_IS_EXTENDED (0) +#define CAN1_SHUNT_VOLTAGE2_IS_EXTENDED (0) +#define CAN1_SHUNT_VOLTAGE3_IS_EXTENDED (0) +#define CAN1_SHUNT_TEMPERATURE_IS_EXTENDED (0) +#define CAN1_PDU_COMMAND_IS_EXTENDED (0) +#define CAN1_PDU_RESPONSE_IS_EXTENDED (0) +#define CAN1_AS_MISSION_FB_IS_EXTENDED (0) +#define CAN1_STW_MISSION_SELECTED_IS_EXTENDED (0) +#define CAN1_EPSC_OUT_IS_EXTENDED (0) +#define CAN1_EPSC_STEERING_IN_IS_EXTENDED (0) +#define CAN1_STW_BUTTONS_IS_EXTENDED (0) +#define CAN1_STW_STATUS_IS_EXTENDED (0) +#define CAN1_PDU_CURRENT_1_IS_EXTENDED (0) +#define CAN1_PDU_CURRENT_2_IS_EXTENDED (0) +#define CAN1_PDU_CURRENT_3_IS_EXTENDED (0) +#define CAN1_PDU_CURRENT_4_IS_EXTENDED (0) +#define CAN1_EPSC_CONFIG_IN_IS_EXTENDED (0) + +/* Frame cycle times in milliseconds. */ + + +/* Signal choices. */ +#define CAN1_AMS_ERROR_AMS_ERROR_KIND_NONE_CHOICE (0) +#define CAN1_AMS_ERROR_AMS_ERROR_KIND_SLAVE__TIMEOUT_CHOICE (1) +#define CAN1_AMS_ERROR_AMS_ERROR_KIND_SLAVE__PANIC_CHOICE (2) +#define CAN1_AMS_ERROR_AMS_ERROR_KIND_SHUNT__TIMEOUT_CHOICE (3) +#define CAN1_AMS_ERROR_AMS_ERROR_KIND_SHUNT__OVERCURRENT_CHOICE (4) +#define CAN1_AMS_ERROR_AMS_ERROR_KIND_SHUNT__OVERTEMPERATURE_CHOICE (5) + +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_SPEED_LIMIT_CHOICE (0u) +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_TORQUE__LIMIT_CHOICE (1u) +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_POWER_LIMIT_CHOICE (2u) +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_DISCIPLINE_CHOICE (3u) +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_TV_ON_CHOICE (4u) +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_TC_ON_CHOICE (5u) +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_REKU_ON_CHOICE (6u) +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_TC_P_CHOICE (7u) +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_TC_I_CHOICE (8u) +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_TC_MUMAX_CHOICE (9u) +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_TC_SLIPREF_CHOICE (10u) + +#define CAN1_AMS_STATUS_AMS_STATE_INACTIVE_CHOICE (0u) +#define CAN1_AMS_STATUS_AMS_STATE_ACTIVE_CHOICE (1u) +#define CAN1_AMS_STATUS_AMS_STATE_PRECHARGE_CHOICE (2u) +#define CAN1_AMS_STATUS_AMS_STATE_DISCHARGE_CHOICE (3u) +#define CAN1_AMS_STATUS_AMS_STATE_ERROR_CHOICE (4u) + +#define CAN1_AMS_SLAVE_PANIC_AMS_SLAVE_PANIC_KIND_OVERTEMPERATURE_CHOICE (0u) +#define CAN1_AMS_SLAVE_PANIC_AMS_SLAVE_PANIC_KIND_UNDERTEMPERATURE_CHOICE (1u) +#define CAN1_AMS_SLAVE_PANIC_AMS_SLAVE_PANIC_KIND_OVERVOLTAGE_CHOICE (2u) +#define CAN1_AMS_SLAVE_PANIC_AMS_SLAVE_PANIC_KIND_UNDERVOLTAGE_CHOICE (3u) +#define CAN1_AMS_SLAVE_PANIC_AMS_SLAVE_PANIC_KIND_TOO_FEW_TEMP_SENSORS_CHOICE (4u) +#define CAN1_AMS_SLAVE_PANIC_AMS_SLAVE_PANIC_KIND_OPEN_CELL_CONNECTION_CHOICE (5u) + +#define CAN1_AS_MISSION_FB_MISSION_SELECTION_ACCELERATION_CHOICE (1u) +#define CAN1_AS_MISSION_FB_MISSION_SELECTION_SKIDPAD_CHOICE (2u) +#define CAN1_AS_MISSION_FB_MISSION_SELECTION_TRACKDRIVE_CHOICE (3u) +#define CAN1_AS_MISSION_FB_MISSION_SELECTION_BRAKETEST_CHOICE (4u) +#define CAN1_AS_MISSION_FB_MISSION_SELECTION_INSPECTION_CHOICE (5u) +#define CAN1_AS_MISSION_FB_MISSION_SELECTION_AUTOCROSS_CHOICE (6u) +#define CAN1_AS_MISSION_FB_MISSION_SELECTION_MANUAL_CHOICE (7u) + +#define CAN1_STW_MISSION_SELECTED_MISSION_SELECTION_ACCELERATION_CHOICE (1u) +#define CAN1_STW_MISSION_SELECTED_MISSION_SELECTION_SKIDPAD_CHOICE (2u) +#define CAN1_STW_MISSION_SELECTED_MISSION_SELECTION_TRACKDRIVE_CHOICE (3u) +#define CAN1_STW_MISSION_SELECTED_MISSION_SELECTION_BRAKETEST_CHOICE (4u) +#define CAN1_STW_MISSION_SELECTED_MISSION_SELECTION_INSPECTION_CHOICE (5u) +#define CAN1_STW_MISSION_SELECTED_MISSION_SELECTION_AUTOCROSS_CHOICE (6u) +#define CAN1_STW_MISSION_SELECTED_MISSION_SELECTION_MANUAL_CHOICE (7u) + +#define CAN1_STW_STATUS_R2_D_PROGRESS_NONE_CHOICE (0u) +#define CAN1_STW_STATUS_R2_D_PROGRESS_TSMS_CHOICE (1u) +#define CAN1_STW_STATUS_R2_D_PROGRESS_TS_ACTIVE_CHOICE (2u) +#define CAN1_STW_STATUS_R2_D_PROGRESS_RESETTING_NODES_CHOICE (3u) +#define CAN1_STW_STATUS_R2_D_PROGRESS_RESETTING_COMMS_CHOICE (4u) +#define CAN1_STW_STATUS_R2_D_PROGRESS_WAITING_INIT_CHOICE (5u) +#define CAN1_STW_STATUS_R2_D_PROGRESS_INIT_STAGE1_CHOICE (6u) +#define CAN1_STW_STATUS_R2_D_PROGRESS_INIT_STAGE2_CHOICE (7u) +#define CAN1_STW_STATUS_R2_D_PROGRESS_INIT_SUCCESS_CHOICE (15u) + +#define CAN1_STW_STATUS_AS_STATE_STW_OFF_CHOICE (0u) +#define CAN1_STW_STATUS_AS_STATE_STW_MANUAL_CHOICE (1u) +#define CAN1_STW_STATUS_AS_STATE_STW_READY_CHOICE (2u) +#define CAN1_STW_STATUS_AS_STATE_STW_DRIVING_CHOICE (3u) +#define CAN1_STW_STATUS_AS_STATE_STW_FINISHED_CHOICE (4u) +#define CAN1_STW_STATUS_AS_STATE_STW_EMERGENCY_CHOICE (5u) + +#define CAN1_STW_STATUS_INI_CHK_STATE_START_CHOICE (0u) +#define CAN1_STW_STATUS_INI_CHK_STATE_WD_CHECK_CHOICE (1u) +#define CAN1_STW_STATUS_INI_CHK_STATE_WD_OK_CHOICE (2u) +#define CAN1_STW_STATUS_INI_CHK_STATE_ASB_CHECK_1_CHOICE (3u) +#define CAN1_STW_STATUS_INI_CHK_STATE_ASB_CHECK_2_CHOICE (4u) +#define CAN1_STW_STATUS_INI_CHK_STATE_WAIT_TS_CHOICE (5u) +#define CAN1_STW_STATUS_INI_CHK_STATE_EBS_CHECK_A_CHOICE (6u) +#define CAN1_STW_STATUS_INI_CHK_STATE_EBS_CHECK_B_CHOICE (7u) +#define CAN1_STW_STATUS_INI_CHK_STATE_DONE_CHOICE (8u) +#define CAN1_STW_STATUS_INI_CHK_STATE_ERROR_CHOICE (9u) + +/* Frame Names. */ +#define CAN1_INVERTER_VELOCITY_NAME "Inverter_Velocity" +#define CAN1_INVERTER_ERRORS_WARNINGS_NAME "Inverter_Errors_Warnings" +#define CAN1_INVERTER_TORQUE_ACTUAL_CW_NAME "Inverter_Torque_Actual_CW" +#define CAN1_INVERTER_TEMPERATUR_NAME "Inverter_Temperatur" +#define CAN1_INVERTER_TORQUE_WANTED_NAME "Inverter_Torque_wanted" +#define CAN1_SDO_TELEMETRIE_RX_NODE1_NAME "SDO_Telemetrie_Rx_Node1" +#define CAN1_SDO_TELEMETRIE_RX_NODE2_NAME "SDO_Telemetrie_Rx_Node2" +#define CAN1_SDO_TELEMETRIE_TX_NAME "SDO_Telemetrie_Tx" +#define CAN1_LAPTOP_SDO_NODE_NAME "Laptop_SDO_Node" +#define CAN1_X_SENS_LONG_LAT_NAME "XSens_LongLat" +#define CAN1_X_SENS_RATEOFTURN_NAME "XSens_rateofturn" +#define CAN1_X_SENS_ACCELERATION_NAME "XSens_Acceleration" +#define CAN1_X_SENS_VELOCITY_NAME "XSens_Velocity" +#define CAN1_TELEMETRIE_NAME "Telemetrie" +#define CAN1_OVERRIDE_POWERMAP_NAME "Override_Powermap" +#define CAN1_OVERRIDE_LAPTOP_2_NAME "Override_Laptop_2" +#define CAN1_OVERRIDE_EPSC_COOLING_NAME "Override_EPSC_Cooling" +#define CAN1_OVERRIDE_LAPTOP_NAME "Override_Laptop" +#define CAN1_APPS_OVERRIDE_NAME "APPS_Override" +#define CAN1_FTCU_DAMPER_NAME "FTCU_Damper" +#define CAN1_FTCU_PARAM_CONFIRM_NAME "FTCU_ParamConfirm" +#define CAN1_SENSORNODE_F_10_HZ_NAME "Sensornode_F_10Hz" +#define CAN1_SENSORNODE_F_100_HZ_1_NAME "Sensornode_F_100Hz_1" +#define CAN1_SENSORNODE_F_100_HZ_2_NAME "Sensornode_F_100Hz_2" +#define CAN1_SENSORNODE_F_1K_HZ_NAME "Sensornode_F_1kHz" +#define CAN1_SENSORNODE_R_10_HZ_NAME "Sensornode_R_10Hz" +#define CAN1_SENSORNODE_R_100_HZ_NAME "Sensornode_R_100Hz" +#define CAN1_SENSORNODE_R_1K_HZ_NAME "Sensornode_R_1kHz" +#define CAN1_PWM_DUTY_CYCLE_NAME "PWM_DutyCycle" +#define CAN1_PWM_CONFIG_NAME "PWM_Config" +#define CAN1_DASHBOARD_IN_NAME "Dashboard_In" +#define CAN1_AMS_SLAVE1_STATUS_NAME "AMS_Slave1Status" +#define CAN1_AMS_SLAVE2_LOG0_NAME "AMS_Slave2_Log0" +#define CAN1_AMS_SLAVE2_LOG1_NAME "AMS_Slave2_Log1" +#define CAN1_AMS_SLAVE2_LOG2_NAME "AMS_Slave2_Log2" +#define CAN1_AMS_SLAVE2_LOG3_NAME "AMS_Slave2_Log3" +#define CAN1_AMS_SLAVE2_LOG4_NAME "AMS_Slave2_Log4" +#define CAN1_AMS_SLAVE2_LOG5_NAME "AMS_Slave2_Log5" +#define CAN1_AMS_SLAVE5_LOG6_NAME "AMS_Slave5_Log6" +#define CAN1_AMS_SLAVE4_LOG6_NAME "AMS_Slave4_Log6" +#define CAN1_AMS_SLAVE3_LOG6_NAME "AMS_Slave3_Log6" +#define CAN1_AMS_SLAVE2_LOG6_NAME "AMS_Slave2_Log6" +#define CAN1_AMS_SLAVE1_LOG6_NAME "AMS_Slave1_Log6" +#define CAN1_AMS_SLAVE5_LOG5_NAME "AMS_Slave5_Log5" +#define CAN1_AMS_SLAVE4_LOG5_NAME "AMS_Slave4_Log5" +#define CAN1_AMS_SLAVE3_LOG5_NAME "AMS_Slave3_Log5" +#define CAN1_AMS_SLAVE1_LOG5_NAME "AMS_Slave1_Log5" +#define CAN1_AMS_SLAVE5_LOG4_NAME "AMS_Slave5_Log4" +#define CAN1_AMS_SLAVE4_LOG4_NAME "AMS_Slave4_Log4" +#define CAN1_AMS_SLAVE3_LOG4_NAME "AMS_Slave3_Log4" +#define CAN1_AMS_SLAVE1_LOG4_NAME "AMS_Slave1_Log4" +#define CAN1_AMS_SLAVE5_LOG3_NAME "AMS_Slave5_Log3" +#define CAN1_AMS_SLAVE4_LOG3_NAME "AMS_Slave4_Log3" +#define CAN1_AMS_SLAVE3_LOG3_NAME "AMS_Slave3_Log3" +#define CAN1_AMS_SLAVE1_LOG3_NAME "AMS_Slave1_Log3" +#define CAN1_AMS_SLAVE5_LOG2_NAME "AMS_Slave5_Log2" +#define CAN1_AMS_SLAVE4_LOG2_NAME "AMS_Slave4_Log2" +#define CAN1_AMS_SLAVE3_LOG2_NAME "AMS_Slave3_Log2" +#define CAN1_AMS_SLAVE1_LOG2_NAME "AMS_Slave1_Log2" +#define CAN1_AMS_SLAVE5_LOG1_NAME "AMS_Slave5_Log1" +#define CAN1_AMS_SLAVE4_LOG1_NAME "AMS_Slave4_Log1" +#define CAN1_AMS_SLAVE3_LOG1_NAME "AMS_Slave3_Log1" +#define CAN1_AMS_SLAVE1_LOG1_NAME "AMS_Slave1_Log1" +#define CAN1_AMS_SLAVE5_LOG0_NAME "AMS_Slave5_Log0" +#define CAN1_AMS_SLAVE4_LOG0_NAME "AMS_Slave4_Log0" +#define CAN1_AMS_SLAVE3_LOG0_NAME "AMS_Slave3_Log0" +#define CAN1_AMS_SLAVE1_LOG0_NAME "AMS_Slave1_Log0" +#define CAN1_PDU_HEARTBEAT_NAME "PDU_Heartbeat" +#define CAN1_FTCU_PNEUMATIK_NAME "FTCU_Pneumatik" +#define CAN1_ACU_TX_COMMANDS_NAME "ACU_TX_Commands" +#define CAN1_ACU_RX_COMMANDS_NAME "ACU_RX_Commands" +#define CAN1_ACU_RX_NAME "ACU_RX" +#define CAN1_AMS_SLAVE0_LOG0_NAME "AMS_Slave0_Log0" +#define CAN1_AMS_SLAVE0_LOG1_NAME "AMS_Slave0_Log1" +#define CAN1_AMS_SLAVE0_LOG3_NAME "AMS_Slave0_Log3" +#define CAN1_AMS_SLAVE0_LOG4_NAME "AMS_Slave0_Log4" +#define CAN1_AMS_SLAVE0_LOG5_NAME "AMS_Slave0_Log5" +#define CAN1_AMS_SLAVE0_LOG6_NAME "AMS_Slave0_Log6" +#define CAN1_ACU_TX_NAME "ACU_TX" +#define CAN1_AMS_SLAVE5_STATUS_NAME "AMS_Slave5Status" +#define CAN1_AMS_SLAVE4_STATUS_NAME "AMS_Slave4Status" +#define CAN1_AMS_SLAVE3_STATUS_NAME "AMS_Slave3Status" +#define CAN1_AMS_SLAVE2_STATUS_NAME "AMS_Slave2Status" +#define CAN1_AMS_ERROR_NAME "AMS_Error" +#define CAN1_FTCU_COOLING_NAME "FTCU_Cooling" +#define CAN1_FTCU_BRAKE_T_NAME "FTCU_BrakeT" +#define CAN1_FTCU_WHEELSPEED_NAME "FTCU_Wheelspeed" +#define CAN1_FTCU_TIMINGS_NAME "FTCU_Timings" +#define CAN1_FTCU_DRIVER_NAME "FTCU_Driver" +#define CAN1_TTS_RR_NAME "TTS_RR" +#define CAN1_TTS_RL_NAME "TTS_RL" +#define CAN1_TTS_FR_NAME "TTS_FR" +#define CAN1_TTS_FL_NAME "TTS_FL" +#define CAN1_STW_PARAM_SET_NAME "STW_Param_Set" +#define CAN1_AMS_SLAVE0_STATUS_NAME "AMS_Slave0Status" +#define CAN1_SSU_MESSAGE_NAME "SSU_Message" +#define CAN1_AMS_STATUS_NAME "AMS_Status" +#define CAN1_AMS_SLAVE_PANIC_NAME "AMS_SlavePanic" +#define CAN1_AMS_IN_NAME "AMS_In" +#define CAN1_SHUNT_CURRENT_NAME "Shunt_Current" +#define CAN1_SHUNT_VOLTAGE1_NAME "Shunt_Voltage1" +#define CAN1_SHUNT_VOLTAGE2_NAME "Shunt_Voltage2" +#define CAN1_SHUNT_VOLTAGE3_NAME "Shunt_Voltage3" +#define CAN1_SHUNT_TEMPERATURE_NAME "Shunt_Temperature" +#define CAN1_PDU_COMMAND_NAME "PDU_Command" +#define CAN1_PDU_RESPONSE_NAME "PDU_Response" +#define CAN1_AS_MISSION_FB_NAME "AS_Mission_fb" +#define CAN1_STW_MISSION_SELECTED_NAME "STW_mission_selected" +#define CAN1_EPSC_OUT_NAME "EPSC_out" +#define CAN1_EPSC_STEERING_IN_NAME "EPSC_Steering_In" +#define CAN1_STW_BUTTONS_NAME "STW_buttons" +#define CAN1_STW_STATUS_NAME "STW_status" +#define CAN1_PDU_CURRENT_1_NAME "PDU_Current_1" +#define CAN1_PDU_CURRENT_2_NAME "PDU_Current_2" +#define CAN1_PDU_CURRENT_3_NAME "PDU_Current_3" +#define CAN1_PDU_CURRENT_4_NAME "PDU_Current_4" +#define CAN1_EPSC_CONFIG_IN_NAME "EPSC_Config_In" + +/* Signal Names. */ +#define CAN1_INVERTER_VELOCITY_INVERTER_1_VELOCITY_NAME "Inverter_1_Velocity" +#define CAN1_INVERTER_VELOCITY_INVERTER_2_VELOCITY_NAME "Inverter_2_Velocity" +#define CAN1_INVERTER_ERRORS_WARNINGS_INVERTER_1_ERRORS_NAME "Inverter_1_Errors" +#define CAN1_INVERTER_ERRORS_WARNINGS_INVERTER_1_WARNINGS_NAME "Inverter_1_Warnings" +#define CAN1_INVERTER_ERRORS_WARNINGS_INVERTER_2_ERRORS_NAME "Inverter_2_Errors" +#define CAN1_INVERTER_ERRORS_WARNINGS_INVERTER_2_WARNINGS_NAME "Inverter_2_Warnings" +#define CAN1_INVERTER_TORQUE_ACTUAL_CW_INVERTER_1_CONTROL_WORD_NAME "Inverter_1_ControlWord" +#define CAN1_INVERTER_TORQUE_ACTUAL_CW_INVERTER_1_TORQUE_ACTUAL_NAME "Inverter_1_Torque_Actual" +#define CAN1_INVERTER_TORQUE_ACTUAL_CW_INVERTER_2_CONTROL_WORD_NAME "Inverter_2_ControlWord" +#define CAN1_INVERTER_TORQUE_ACTUAL_CW_INVERTER_2_TORQUE_ACTUAL_NAME "Inverter_2_Torque_Actual" +#define CAN1_INVERTER_TEMPERATUR_INVERTER_1_TEMP_INV_NAME "Inverter_1_Temp_Inv" +#define CAN1_INVERTER_TEMPERATUR_INVERTER_1_TEMP_MOT_NAME "Inverter_1_Temp_Mot" +#define CAN1_INVERTER_TEMPERATUR_INVERTER_2_TEMP_INV_NAME "Inverter_2_Temp_Inv" +#define CAN1_INVERTER_TEMPERATUR_INVERTER_2_TEMP_MOT_NAME "Inverter_2_Temp_Mot" +#define CAN1_INVERTER_TORQUE_WANTED_INVERTER_1_TORQUE_DEMANDED_NAME "Inverter_1_Torque_Demanded" +#define CAN1_INVERTER_TORQUE_WANTED_INVERTER_2_TORQUE_DEMANDED_NAME "Inverter_2_Torque_Demanded" +#define CAN1_INVERTER_TORQUE_WANTED_INVERTER_1_TORQUE_DESIRED_NAME "Inverter_1_Torque_Desired" +#define CAN1_INVERTER_TORQUE_WANTED_INVERTER_2_TORQUE_DESIRED_NAME "Inverter_2_Torque_Desired" +#define CAN1_SDO_TELEMETRIE_RX_NODE1_SDO_COMMAND_BYTE_NAME "SDO_command_byte" +#define CAN1_SDO_TELEMETRIE_RX_NODE1_SDO_OD_INDEX_NAME "SDO_OD_index" +#define CAN1_SDO_TELEMETRIE_RX_NODE1_SDO_OD_SUBINDEX_NAME "SDO_OD_subindex" +#define CAN1_SDO_TELEMETRIE_RX_NODE1_SDO_DATA_NAME "SDO_data" +#define CAN1_SDO_TELEMETRIE_RX_NODE2_SDO_COMMAND_BYTE_NAME "SDO_command_byte" +#define CAN1_SDO_TELEMETRIE_RX_NODE2_SDO_OD_INDEX_NAME "SDO_OD_index" +#define CAN1_SDO_TELEMETRIE_RX_NODE2_SDO_OD_SUBINDEX_NAME "SDO_OD_subindex" +#define CAN1_SDO_TELEMETRIE_RX_NODE2_SDO_DATA_NAME "SDO_data" +#define CAN1_SDO_TELEMETRIE_TX_SDO_COMMAND_BYTE_NAME "SDO_command_byte" +#define CAN1_SDO_TELEMETRIE_TX_SDO_OD_INDEX_NAME "SDO_OD_index" +#define CAN1_SDO_TELEMETRIE_TX_SDO_OD_SUBINDEX_NAME "SDO_OD_subindex" +#define CAN1_SDO_TELEMETRIE_TX_SDO_DATA_NAME "SDO_data" +#define CAN1_LAPTOP_SDO_NODE_NODE_ID_SDO_NAME "Node_ID_SDO" +#define CAN1_X_SENS_LONG_LAT_X_SENS_LATITUDE_NAME "XSens_latitude" +#define CAN1_X_SENS_LONG_LAT_X_SENS_LONGITUDE_NAME "XSens_longitude" +#define CAN1_X_SENS_RATEOFTURN_X_SENS_GYR_X_NAME "XSens_gyrX" +#define CAN1_X_SENS_RATEOFTURN_X_SENS_GY_Y_NAME "XSens_gyY" +#define CAN1_X_SENS_RATEOFTURN_X_SENS_GY_Z_NAME "XSens_gyZ" +#define CAN1_X_SENS_ACCELERATION_X_SENS_ACC_X_NAME "XSens_accX" +#define CAN1_X_SENS_ACCELERATION_X_SENS_ACC_Y_NAME "XSens_accY" +#define CAN1_X_SENS_ACCELERATION_X_SENS_ACC_Z_NAME "XSens_accZ" +#define CAN1_X_SENS_VELOCITY_X_SENS_VEL_X_NAME "XSens_velX" +#define CAN1_X_SENS_VELOCITY_X_SENS_VEL_Y_NAME "XSens_velY" +#define CAN1_X_SENS_VELOCITY_X_SENS_VEL_Z_NAME "XSens_velZ" +#define CAN1_TELEMETRIE_INI_CHECK_ERROR_STATE_NAME "Ini_Check_error_State" +#define CAN1_TELEMETRIE_POWERMAP_NAME "Powermap" +#define CAN1_TELEMETRIE_APPS_OK_NAME "APPS_ok" +#define CAN1_TELEMETRIE_BRAKE_OK_NAME "Brake_ok" +#define CAN1_TELEMETRIE_ALLOW_TORQUE_NAME "Allow_Torque" +#define CAN1_TELEMETRIE_ASP_OK_NAME "ASP_ok" +#define CAN1_TELEMETRIE_PRESSURE_SENSOR_OK_NAME "Pressure_Sensor_ok" +#define CAN1_TELEMETRIE_TORQUE_VECTORING_ON_NAME "Torque_Vectoring_on" +#define CAN1_TELEMETRIE_REKU_ON_NAME "Reku_on" +#define CAN1_TELEMETRIE_TRACTION_CONTROL_ON_NAME "Traction_Control_on" +#define CAN1_TELEMETRIE_TS_DEACTIVATE_NAME "TS_deactivate" +#define CAN1_TELEMETRIE_TORQUE_LIMIT_NAME "Torque_Limit" +#define CAN1_TELEMETRIE_POWER_LIMIT_NAME "Power_Limit" +#define CAN1_TELEMETRIE_TORQUE_LIMIT_DYNAMISCH_NAME "Torque_Limit_dynamisch" +#define CAN1_TELEMETRIE_TORQUE_OHNE_LIMIT_L_NAME "Torque_ohne_Limit_L" +#define CAN1_TELEMETRIE_TORQUE_OHNE_LIMIT_R_NAME "Torque_ohne_Limit_R" +#define CAN1_OVERRIDE_POWERMAP_LAPTOPP_POWER_MAP_NAME "Laptopp_Power_Map" +#define CAN1_OVERRIDE_POWERMAP_LAPTOP_REKU_NAME "Laptop_Reku" +#define CAN1_OVERRIDE_POWERMAP_LAPTOP_TC_NAME "Laptop_TC" +#define CAN1_OVERRIDE_POWERMAP_LAPTOP_TV_NAME "Laptop_TV" +#define CAN1_OVERRIDE_POWERMAP_LAPTOP_SLIPREF_NAME "Laptop_slipref" +#define CAN1_OVERRIDE_POWERMAP_LAPTOP_TC_I_NAME "Laptop_TC_I" +#define CAN1_OVERRIDE_POWERMAP_LAPTOP_TC_P_NAME "Laptop_TC_P" +#define CAN1_OVERRIDE_POWERMAP_LAPTOP_TC_MUMAX_NAME "Laptop_TC_Mumax" +#define CAN1_OVERRIDE_LAPTOP_2_AS_MISSION_NAME "AS_Mission" +#define CAN1_OVERRIDE_LAPTOP_2_AS_STATE_NAME "AS_State" +#define CAN1_OVERRIDE_LAPTOP_2_MANUAL_INPUT_TORQUE_NAME "manual_input_torque" +#define CAN1_OVERRIDE_LAPTOP_2_LAPTOP_POWERLIMIT_NAME "Laptop_Powerlimit" +#define CAN1_OVERRIDE_LAPTOP_2_LAPTOP_TORQUE_LIM_NAME "Laptop_Torque_Lim" +#define CAN1_OVERRIDE_EPSC_COOLING_EPSC_MANUAL_ANGLE_NAME "EPSC_manual_angle" +#define CAN1_OVERRIDE_EPSC_COOLING_EPSC_MODE_NAME "EPSC_mode" +#define CAN1_OVERRIDE_EPSC_COOLING_AC_COOLING_ENABLE_NAME "AC_Cooling_enable" +#define CAN1_OVERRIDE_EPSC_COOLING_TS_COOLING_ENABLE_NAME "TS_cooling_enable" +#define CAN1_OVERRIDE_EPSC_COOLING_AC_COOLING_PWM_NAME "AC_cooling_PWM" +#define CAN1_OVERRIDE_EPSC_COOLING_TS_COOLING_PWM_NAME "TS_cooling_PWM" +#define CAN1_OVERRIDE_LAPTOP_FAKE_R2_D_NAME "Fake_R2D" +#define CAN1_OVERRIDE_LAPTOP_FAKE_SOUNDBOX_EMERGENCY_NAME "Fake_Soundbox_Emergency" +#define CAN1_OVERRIDE_LAPTOP_FAKE_SOUNDBOX_R2_D_NAME "Fake_Soundbox_R2D" +#define CAN1_OVERRIDE_LAPTOP_FAKE_TS_ACTIVE_NAME "Fake_TS_Active" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_APPS_NAME "override_APPS" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_AS_MISSION_NAME "override_AS_Mission" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_AS_STATE_NAME "override_AS_State" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_EPSC_MODE_NAME "override_EPSC_mode" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_PDU_AC_COOLING_ENABLE_NAME "override_PDU_AC_Cooling_enable" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_PDU_ACU_ENABLE_NAME "override_PDU_ACU_enable" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_PDU_DRS_ENABLE_NAME "override_PDU_DRS_enable" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_PDU_EPSC_ENABLE_NAME "override_PDU_EPSC_enable" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_PDU_HEARTBEAT_NAME "override_PDU_Heartbeat" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_PDU_LIDAR_ENABLE_NAME "override_PDU_Lidar_enable" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_PDU_PN_V1_ENABLE_NAME "override_PDU_PN_V1_enable" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_PDU_PN_V2_ENABLE_NAME "override_PDU_PN_V2_enable" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_PDU_TS_COOLING_ENABLE_NAME "override_PDU_TS_Cooling_enable" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_POWER_MAP_NAME "override_Power_Map" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_TC_PARAMETER_NAME "override_TC_parameter" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_TORQUE_INPUT_NAME "override_torque_input" +#define CAN1_APPS_OVERRIDE_APPS_0_MAX_NAME "APPS_0_max" +#define CAN1_APPS_OVERRIDE_APPS_0_MIN_NAME "APPS_0_min" +#define CAN1_APPS_OVERRIDE_APPS_1_MAX_NAME "APPS_1_max" +#define CAN1_APPS_OVERRIDE_APPS_1_MIN_NAME "APPS_1_min" +#define CAN1_FTCU_DAMPER_FTCU_DAMPER_FL_NAME "FTCU_Damper_FL" +#define CAN1_FTCU_DAMPER_FTCU_DAMPER_FR_NAME "FTCU_Damper_FR" +#define CAN1_FTCU_DAMPER_FTCU_DAMPER_RL_NAME "FTCU_Damper_RL" +#define CAN1_FTCU_DAMPER_FTCU_DAMPER_RR_NAME "FTCU_Damper_RR" +#define CAN1_FTCU_PARAM_CONFIRM_FTCU_PARAM_CONFIRM_NAME "FTCU_Param_Confirm" +#define CAN1_SENSORNODE_F_10_HZ_LS_L_NAME "LS_L" +#define CAN1_SENSORNODE_F_10_HZ_LS_R_NAME "LS_R" +#define CAN1_SENSORNODE_F_10_HZ_SDC_M_PRE_BOTS_NAME "SDC_M_pre_BOTS" +#define CAN1_SENSORNODE_F_10_HZ_SDC_M_POST_INS_NAME "SDC_M_post_INS" +#define CAN1_SENSORNODE_F_10_HZ_SDC_M_POST_BSPD_NAME "SDC_M_post_BSPD" +#define CAN1_SENSORNODE_F_10_HZ_BDTS_FL_NAME "BDTS_FL" +#define CAN1_SENSORNODE_F_10_HZ_BDTS_FR_NAME "BDTS_FR" +#define CAN1_SENSORNODE_F_100_HZ_1_APPS_1_NAME "APPS_1" +#define CAN1_SENSORNODE_F_100_HZ_1_APPS_2_NAME "APPS_2" +#define CAN1_SENSORNODE_F_100_HZ_1_BP_F_NAME "BP_F" +#define CAN1_SENSORNODE_F_100_HZ_1_SAS_NAME "SAS" +#define CAN1_SENSORNODE_F_100_HZ_1_WSS_FL_NAME "WSS_FL" +#define CAN1_SENSORNODE_F_100_HZ_1_WSS_FR_NAME "WSS_FR" +#define CAN1_SENSORNODE_F_100_HZ_2_DS_FL_NAME "DS_FL" +#define CAN1_SENSORNODE_F_100_HZ_2_DS_FR_NAME "DS_FR" +#define CAN1_SENSORNODE_F_1K_HZ_SLS_FL_NAME "SLS_FL" +#define CAN1_SENSORNODE_F_1K_HZ_SLS_FR_NAME "SLS_FR" +#define CAN1_SENSORNODE_R_10_HZ_EXT_TS_ON_NAME "ExtTSOn" +#define CAN1_SENSORNODE_R_10_HZ_SDC_M_PRE_TSMS_NAME "SDC_M_pre_TSMS" +#define CAN1_SENSORNODE_R_10_HZ_SDC_M_POST_TSMS_NAME "SDC_M_post_TSMS" +#define CAN1_SENSORNODE_R_10_HZ_BDTS_RL_NAME "BDTS_RL" +#define CAN1_SENSORNODE_R_10_HZ_BDTS_RR_NAME "BDTS_RR" +#define CAN1_SENSORNODE_R_10_HZ_WT_BAT_NAME "WT_BAT" +#define CAN1_SENSORNODE_R_10_HZ_WT_DT_NAME "WT_DT" +#define CAN1_SENSORNODE_R_10_HZ_WP_BAT_NAME "WP_BAT" +#define CAN1_SENSORNODE_R_10_HZ_WP_DT_NAME "WP_DT" +#define CAN1_SENSORNODE_R_100_HZ_EBS_APS_1_NAME "EBS_APS_1" +#define CAN1_SENSORNODE_R_100_HZ_EBS_APS_2_NAME "EBS_APS_2" +#define CAN1_SENSORNODE_R_100_HZ_BP_R_NAME "BP_R" +#define CAN1_SENSORNODE_R_100_HZ_WSS_RL_NAME "WSS_RL" +#define CAN1_SENSORNODE_R_100_HZ_WSS_RR_NAME "WSS_RR" +#define CAN1_SENSORNODE_R_100_HZ_DS_RL_NAME "DS_RL" +#define CAN1_SENSORNODE_R_100_HZ_DS_RR_NAME "DS_RR" +#define CAN1_SENSORNODE_R_1K_HZ_SLS_RL_NAME "SLS_RL" +#define CAN1_SENSORNODE_R_1K_HZ_SLS_RR_NAME "SLS_RR" +#define CAN1_PWM_DUTY_CYCLE_DC_DRS_NAME "DC_DRS" +#define CAN1_PWM_DUTY_CYCLE_DC_ASSI_Y_NAME "DC_ASSI_Y" +#define CAN1_PWM_DUTY_CYCLE_DC_ASSI_B_NAME "DC_ASSI_B" +#define CAN1_PWM_DUTY_CYCLE_DC_BL_NAME "DC_BL" +#define CAN1_PWM_DUTY_CYCLE_DC_FANS_DT_NAME "DC_Fans_DT" +#define CAN1_PWM_DUTY_CYCLE_DC_FANS_BAT_NAME "DC_Fans_BAT" +#define CAN1_PWM_DUTY_CYCLE_DC_SBX_NAME "DC_SBX" +#define CAN1_PWM_CONFIG_FREQ_PWM1_DRS_LIGHTING_NAME "Freq_PWM1_DRS_Lighting" +#define CAN1_PWM_CONFIG_FREQ_PWM3_FANS_NAME "Freq_PWM3_Fans" +#define CAN1_PWM_CONFIG_FREQ_PWM2_SBX_NAME "Freq_PWM2_SBX" +#define CAN1_DASHBOARD_IN_DASHBOARD_R2_D_BUTTON_NAME "Dashboard_R2D_Button" +#define CAN1_DASHBOARD_IN_DASHBOARD_TS_ACTIVATE_BUTTON_NAME "Dashboard_TS_Activate_Button" +#define CAN1_DASHBOARD_IN_DASHBOARD_RACE_KEY_NAME "Dashboard_Race_Key" +#define CAN1_DASHBOARD_IN_DASHBOARD_SDC_IN_NAME "Dashboard_SDC_in" +#define CAN1_DASHBOARD_IN_DASHBOARD_SDC_OUT_NAME "Dashboard_SDC_out" +#define CAN1_AMS_SLAVE1_STATUS_AMS_SLAVE_STATUS_ERROR_NAME "AMS_SlaveStatus_Error" +#define CAN1_AMS_SLAVE1_STATUS_AMS_SLAVE_STATUS_ID_NAME "AMS_SlaveStatus_ID" +#define CAN1_AMS_SLAVE1_STATUS_AMS_SLAVE_STATUS_TEMP_SENSOR_NAME "AMS_SlaveStatus_Temp_Sensor" +#define CAN1_AMS_SLAVE1_STATUS_AMS_SLAVE_STATUS_MIN_CELL_VOLT_NAME "AMS_SlaveStatus_MinCellVolt" +#define CAN1_AMS_SLAVE1_STATUS_AMS_SLAVE_STATUS_MAX_CELL_VOLT_NAME "AMS_SlaveStatus_MaxCellVolt" +#define CAN1_AMS_SLAVE1_STATUS_AMS_SLAVE_STATUS_MAX_TEMP_NAME "AMS_SlaveStatus_MaxTemp" +#define CAN1_AMS_SLAVE2_LOG0_AMS_SLAVE_ID_V0_NAME "AMS_SlaveID_V0" +#define CAN1_AMS_SLAVE2_LOG0_AMS_SLAVE_ID_V1_NAME "AMS_SlaveID_V1" +#define CAN1_AMS_SLAVE2_LOG0_AMS_SLAVE_ID_V2_NAME "AMS_SlaveID_V2" +#define CAN1_AMS_SLAVE2_LOG0_AMS_SLAVE_ID_V3_NAME "AMS_SlaveID_V3" +#define CAN1_AMS_SLAVE2_LOG1_AMS_SLAVE_ID_V4_NAME "AMS_SlaveID_V4" +#define CAN1_AMS_SLAVE2_LOG1_AMS_SLAVE_ID_V5_NAME "AMS_SlaveID_V5" +#define CAN1_AMS_SLAVE2_LOG1_AMS_SLAVE_ID_V6_NAME "AMS_SlaveID_V6" +#define CAN1_AMS_SLAVE2_LOG1_AMS_SLAVE_ID_V7_NAME "AMS_SlaveID_V7" +#define CAN1_AMS_SLAVE2_LOG2_AMS_SLAVE_ID_V8_NAME "AMS_SlaveID_V8" +#define CAN1_AMS_SLAVE2_LOG2_AMS_SLAVE_ID_V9_NAME "AMS_SlaveID_V9" +#define CAN1_AMS_SLAVE2_LOG2_AMS_SLAVE_ID_V10_NAME "AMS_SlaveID_V10" +#define CAN1_AMS_SLAVE2_LOG2_AMS_SLAVE_ID_V11_NAME "AMS_SlaveID_V11" +#define CAN1_AMS_SLAVE2_LOG3_AMS_SLAVE_ID_V12_NAME "AMS_SlaveID_V12" +#define CAN1_AMS_SLAVE2_LOG3_AMS_SLAVE_ID_V13_NAME "AMS_SlaveID_V13" +#define CAN1_AMS_SLAVE2_LOG3_AMS_SLAVE_ID_V14_NAME "AMS_SlaveID_V14" +#define CAN1_AMS_SLAVE2_LOG3_AMS_SLAVE_ID_V15_NAME "AMS_SlaveID_V15" +#define CAN1_AMS_SLAVE2_LOG4_AMS_SLAVE_ID_FAILED_SENSORS_NAME "AMS_SlaveID_FailedSensors" +#define CAN1_AMS_SLAVE2_LOG5_AMS_SLAVE_ID_T0_NAME "AMS_SlaveID_T0" +#define CAN1_AMS_SLAVE2_LOG5_AMS_SLAVE_ID_T1_NAME "AMS_SlaveID_T1" +#define CAN1_AMS_SLAVE2_LOG5_AMS_SLAVE_ID_T2_NAME "AMS_SlaveID_T2" +#define CAN1_AMS_SLAVE2_LOG5_AMS_SLAVE_ID_T3_NAME "AMS_SlaveID_T3" +#define CAN1_AMS_SLAVE2_LOG5_AMS_SLAVE_ID_T4_NAME "AMS_SlaveID_T4" +#define CAN1_AMS_SLAVE2_LOG5_AMS_SLAVE_ID_T5_NAME "AMS_SlaveID_T5" +#define CAN1_AMS_SLAVE2_LOG5_AMS_SLAVE_ID_T6_NAME "AMS_SlaveID_T6" +#define CAN1_AMS_SLAVE2_LOG5_AMS_SLAVE_ID_T7_NAME "AMS_SlaveID_T7" +#define CAN1_AMS_SLAVE5_LOG6_AMS_SLAVE_ID_T8_NAME "AMS_SlaveID_T8" +#define CAN1_AMS_SLAVE5_LOG6_AMS_SLAVE_ID_T9_NAME "AMS_SlaveID_T9" +#define CAN1_AMS_SLAVE4_LOG6_AMS_SLAVE_ID_T8_NAME "AMS_SlaveID_T8" +#define CAN1_AMS_SLAVE4_LOG6_AMS_SLAVE_ID_T9_NAME "AMS_SlaveID_T9" +#define CAN1_AMS_SLAVE3_LOG6_AMS_SLAVE_ID_T8_NAME "AMS_SlaveID_T8" +#define CAN1_AMS_SLAVE3_LOG6_AMS_SLAVE_ID_T9_NAME "AMS_SlaveID_T9" +#define CAN1_AMS_SLAVE2_LOG6_AMS_SLAVE_ID_T8_NAME "AMS_SlaveID_T8" +#define CAN1_AMS_SLAVE2_LOG6_AMS_SLAVE_ID_T9_NAME "AMS_SlaveID_T9" +#define CAN1_AMS_SLAVE1_LOG6_AMS_SLAVE_ID_T8_NAME "AMS_SlaveID_T8" +#define CAN1_AMS_SLAVE1_LOG6_AMS_SLAVE_ID_T9_NAME "AMS_SlaveID_T9" +#define CAN1_AMS_SLAVE5_LOG5_AMS_SLAVE_ID_T0_NAME "AMS_SlaveID_T0" +#define CAN1_AMS_SLAVE5_LOG5_AMS_SLAVE_ID_T1_NAME "AMS_SlaveID_T1" +#define CAN1_AMS_SLAVE5_LOG5_AMS_SLAVE_ID_T2_NAME "AMS_SlaveID_T2" +#define CAN1_AMS_SLAVE5_LOG5_AMS_SLAVE_ID_T3_NAME "AMS_SlaveID_T3" +#define CAN1_AMS_SLAVE5_LOG5_AMS_SLAVE_ID_T4_NAME "AMS_SlaveID_T4" +#define CAN1_AMS_SLAVE5_LOG5_AMS_SLAVE_ID_T5_NAME "AMS_SlaveID_T5" +#define CAN1_AMS_SLAVE5_LOG5_AMS_SLAVE_ID_T6_NAME "AMS_SlaveID_T6" +#define CAN1_AMS_SLAVE5_LOG5_AMS_SLAVE_ID_T7_NAME "AMS_SlaveID_T7" +#define CAN1_AMS_SLAVE4_LOG5_AMS_SLAVE_ID_T0_NAME "AMS_SlaveID_T0" +#define CAN1_AMS_SLAVE4_LOG5_AMS_SLAVE_ID_T1_NAME "AMS_SlaveID_T1" +#define CAN1_AMS_SLAVE4_LOG5_AMS_SLAVE_ID_T2_NAME "AMS_SlaveID_T2" +#define CAN1_AMS_SLAVE4_LOG5_AMS_SLAVE_ID_T3_NAME "AMS_SlaveID_T3" +#define CAN1_AMS_SLAVE4_LOG5_AMS_SLAVE_ID_T4_NAME "AMS_SlaveID_T4" +#define CAN1_AMS_SLAVE4_LOG5_AMS_SLAVE_ID_T5_NAME "AMS_SlaveID_T5" +#define CAN1_AMS_SLAVE4_LOG5_AMS_SLAVE_ID_T6_NAME "AMS_SlaveID_T6" +#define CAN1_AMS_SLAVE4_LOG5_AMS_SLAVE_ID_T7_NAME "AMS_SlaveID_T7" +#define CAN1_AMS_SLAVE3_LOG5_AMS_SLAVE_ID_T0_NAME "AMS_SlaveID_T0" +#define CAN1_AMS_SLAVE3_LOG5_AMS_SLAVE_ID_T1_NAME "AMS_SlaveID_T1" +#define CAN1_AMS_SLAVE3_LOG5_AMS_SLAVE_ID_T2_NAME "AMS_SlaveID_T2" +#define CAN1_AMS_SLAVE3_LOG5_AMS_SLAVE_ID_T3_NAME "AMS_SlaveID_T3" +#define CAN1_AMS_SLAVE3_LOG5_AMS_SLAVE_ID_T4_NAME "AMS_SlaveID_T4" +#define CAN1_AMS_SLAVE3_LOG5_AMS_SLAVE_ID_T5_NAME "AMS_SlaveID_T5" +#define CAN1_AMS_SLAVE3_LOG5_AMS_SLAVE_ID_T6_NAME "AMS_SlaveID_T6" +#define CAN1_AMS_SLAVE3_LOG5_AMS_SLAVE_ID_T7_NAME "AMS_SlaveID_T7" +#define CAN1_AMS_SLAVE1_LOG5_AMS_SLAVE_ID_T0_NAME "AMS_SlaveID_T0" +#define CAN1_AMS_SLAVE1_LOG5_AMS_SLAVE_ID_T1_NAME "AMS_SlaveID_T1" +#define CAN1_AMS_SLAVE1_LOG5_AMS_SLAVE_ID_T2_NAME "AMS_SlaveID_T2" +#define CAN1_AMS_SLAVE1_LOG5_AMS_SLAVE_ID_T3_NAME "AMS_SlaveID_T3" +#define CAN1_AMS_SLAVE1_LOG5_AMS_SLAVE_ID_T4_NAME "AMS_SlaveID_T4" +#define CAN1_AMS_SLAVE1_LOG5_AMS_SLAVE_ID_T5_NAME "AMS_SlaveID_T5" +#define CAN1_AMS_SLAVE1_LOG5_AMS_SLAVE_ID_T6_NAME "AMS_SlaveID_T6" +#define CAN1_AMS_SLAVE1_LOG5_AMS_SLAVE_ID_T7_NAME "AMS_SlaveID_T7" +#define CAN1_AMS_SLAVE5_LOG4_AMS_SLAVE_ID_FAILED_SENSORS_NAME "AMS_SlaveID_FailedSensors" +#define CAN1_AMS_SLAVE4_LOG4_AMS_SLAVE_ID_FAILED_SENSORS_NAME "AMS_SlaveID_FailedSensors" +#define CAN1_AMS_SLAVE3_LOG4_AMS_SLAVE_ID_FAILED_SENSORS_NAME "AMS_SlaveID_FailedSensors" +#define CAN1_AMS_SLAVE1_LOG4_AMS_SLAVE_ID_FAILED_SENSORS_NAME "AMS_SlaveID_FailedSensors" +#define CAN1_AMS_SLAVE5_LOG3_AMS_SLAVE_ID_V12_NAME "AMS_SlaveID_V12" +#define CAN1_AMS_SLAVE5_LOG3_AMS_SLAVE_ID_V13_NAME "AMS_SlaveID_V13" +#define CAN1_AMS_SLAVE5_LOG3_AMS_SLAVE_ID_V14_NAME "AMS_SlaveID_V14" +#define CAN1_AMS_SLAVE5_LOG3_AMS_SLAVE_ID_V15_NAME "AMS_SlaveID_V15" +#define CAN1_AMS_SLAVE4_LOG3_AMS_SLAVE_ID_V12_NAME "AMS_SlaveID_V12" +#define CAN1_AMS_SLAVE4_LOG3_AMS_SLAVE_ID_V13_NAME "AMS_SlaveID_V13" +#define CAN1_AMS_SLAVE4_LOG3_AMS_SLAVE_ID_V14_NAME "AMS_SlaveID_V14" +#define CAN1_AMS_SLAVE4_LOG3_AMS_SLAVE_ID_V15_NAME "AMS_SlaveID_V15" +#define CAN1_AMS_SLAVE3_LOG3_AMS_SLAVE_ID_V12_NAME "AMS_SlaveID_V12" +#define CAN1_AMS_SLAVE3_LOG3_AMS_SLAVE_ID_V13_NAME "AMS_SlaveID_V13" +#define CAN1_AMS_SLAVE3_LOG3_AMS_SLAVE_ID_V14_NAME "AMS_SlaveID_V14" +#define CAN1_AMS_SLAVE3_LOG3_AMS_SLAVE_ID_V15_NAME "AMS_SlaveID_V15" +#define CAN1_AMS_SLAVE1_LOG3_AMS_SLAVE_ID_V12_NAME "AMS_SlaveID_V12" +#define CAN1_AMS_SLAVE1_LOG3_AMS_SLAVE_ID_V13_NAME "AMS_SlaveID_V13" +#define CAN1_AMS_SLAVE1_LOG3_AMS_SLAVE_ID_V14_NAME "AMS_SlaveID_V14" +#define CAN1_AMS_SLAVE1_LOG3_AMS_SLAVE_ID_V15_NAME "AMS_SlaveID_V15" +#define CAN1_AMS_SLAVE5_LOG2_AMS_SLAVE_ID_V8_NAME "AMS_SlaveID_V8" +#define CAN1_AMS_SLAVE5_LOG2_AMS_SLAVE_ID_V9_NAME "AMS_SlaveID_V9" +#define CAN1_AMS_SLAVE5_LOG2_AMS_SLAVE_ID_V10_NAME "AMS_SlaveID_V10" +#define CAN1_AMS_SLAVE5_LOG2_AMS_SLAVE_ID_V11_NAME "AMS_SlaveID_V11" +#define CAN1_AMS_SLAVE4_LOG2_AMS_SLAVE_ID_V8_NAME "AMS_SlaveID_V8" +#define CAN1_AMS_SLAVE4_LOG2_AMS_SLAVE_ID_V9_NAME "AMS_SlaveID_V9" +#define CAN1_AMS_SLAVE4_LOG2_AMS_SLAVE_ID_V10_NAME "AMS_SlaveID_V10" +#define CAN1_AMS_SLAVE4_LOG2_AMS_SLAVE_ID_V11_NAME "AMS_SlaveID_V11" +#define CAN1_AMS_SLAVE3_LOG2_AMS_SLAVE_ID_V8_NAME "AMS_SlaveID_V8" +#define CAN1_AMS_SLAVE3_LOG2_AMS_SLAVE_ID_V9_NAME "AMS_SlaveID_V9" +#define CAN1_AMS_SLAVE3_LOG2_AMS_SLAVE_ID_V10_NAME "AMS_SlaveID_V10" +#define CAN1_AMS_SLAVE3_LOG2_AMS_SLAVE_ID_V11_NAME "AMS_SlaveID_V11" +#define CAN1_AMS_SLAVE1_LOG2_AMS_SLAVE_ID_V8_NAME "AMS_SlaveID_V8" +#define CAN1_AMS_SLAVE1_LOG2_AMS_SLAVE_ID_V9_NAME "AMS_SlaveID_V9" +#define CAN1_AMS_SLAVE1_LOG2_AMS_SLAVE_ID_V10_NAME "AMS_SlaveID_V10" +#define CAN1_AMS_SLAVE1_LOG2_AMS_SLAVE_ID_V11_NAME "AMS_SlaveID_V11" +#define CAN1_AMS_SLAVE5_LOG1_AMS_SLAVE_ID_V4_NAME "AMS_SlaveID_V4" +#define CAN1_AMS_SLAVE5_LOG1_AMS_SLAVE_ID_V5_NAME "AMS_SlaveID_V5" +#define CAN1_AMS_SLAVE5_LOG1_AMS_SLAVE_ID_V6_NAME "AMS_SlaveID_V6" +#define CAN1_AMS_SLAVE5_LOG1_AMS_SLAVE_ID_V7_NAME "AMS_SlaveID_V7" +#define CAN1_AMS_SLAVE4_LOG1_AMS_SLAVE_ID_V4_NAME "AMS_SlaveID_V4" +#define CAN1_AMS_SLAVE4_LOG1_AMS_SLAVE_ID_V5_NAME "AMS_SlaveID_V5" +#define CAN1_AMS_SLAVE4_LOG1_AMS_SLAVE_ID_V6_NAME "AMS_SlaveID_V6" +#define CAN1_AMS_SLAVE4_LOG1_AMS_SLAVE_ID_V7_NAME "AMS_SlaveID_V7" +#define CAN1_AMS_SLAVE3_LOG1_AMS_SLAVE_ID_V4_NAME "AMS_SlaveID_V4" +#define CAN1_AMS_SLAVE3_LOG1_AMS_SLAVE_ID_V5_NAME "AMS_SlaveID_V5" +#define CAN1_AMS_SLAVE3_LOG1_AMS_SLAVE_ID_V6_NAME "AMS_SlaveID_V6" +#define CAN1_AMS_SLAVE3_LOG1_AMS_SLAVE_ID_V7_NAME "AMS_SlaveID_V7" +#define CAN1_AMS_SLAVE1_LOG1_AMS_SLAVE_ID_V4_NAME "AMS_SlaveID_V4" +#define CAN1_AMS_SLAVE1_LOG1_AMS_SLAVE_ID_V5_NAME "AMS_SlaveID_V5" +#define CAN1_AMS_SLAVE1_LOG1_AMS_SLAVE_ID_V6_NAME "AMS_SlaveID_V6" +#define CAN1_AMS_SLAVE1_LOG1_AMS_SLAVE_ID_V7_NAME "AMS_SlaveID_V7" +#define CAN1_AMS_SLAVE5_LOG0_AMS_SLAVE_ID_V0_NAME "AMS_SlaveID_V0" +#define CAN1_AMS_SLAVE5_LOG0_AMS_SLAVE_ID_V1_NAME "AMS_SlaveID_V1" +#define CAN1_AMS_SLAVE5_LOG0_AMS_SLAVE_ID_V2_NAME "AMS_SlaveID_V2" +#define CAN1_AMS_SLAVE5_LOG0_AMS_SLAVE_ID_V3_NAME "AMS_SlaveID_V3" +#define CAN1_AMS_SLAVE4_LOG0_AMS_SLAVE_ID_V0_NAME "AMS_SlaveID_V0" +#define CAN1_AMS_SLAVE4_LOG0_AMS_SLAVE_ID_V1_NAME "AMS_SlaveID_V1" +#define CAN1_AMS_SLAVE4_LOG0_AMS_SLAVE_ID_V2_NAME "AMS_SlaveID_V2" +#define CAN1_AMS_SLAVE4_LOG0_AMS_SLAVE_ID_V3_NAME "AMS_SlaveID_V3" +#define CAN1_AMS_SLAVE3_LOG0_AMS_SLAVE_ID_V0_NAME "AMS_SlaveID_V0" +#define CAN1_AMS_SLAVE3_LOG0_AMS_SLAVE_ID_V1_NAME "AMS_SlaveID_V1" +#define CAN1_AMS_SLAVE3_LOG0_AMS_SLAVE_ID_V2_NAME "AMS_SlaveID_V2" +#define CAN1_AMS_SLAVE3_LOG0_AMS_SLAVE_ID_V3_NAME "AMS_SlaveID_V3" +#define CAN1_AMS_SLAVE1_LOG0_AMS_SLAVE_ID_V0_NAME "AMS_SlaveID_V0" +#define CAN1_AMS_SLAVE1_LOG0_AMS_SLAVE_ID_V1_NAME "AMS_SlaveID_V1" +#define CAN1_AMS_SLAVE1_LOG0_AMS_SLAVE_ID_V2_NAME "AMS_SlaveID_V2" +#define CAN1_AMS_SLAVE1_LOG0_AMS_SLAVE_ID_V3_NAME "AMS_SlaveID_V3" +#define CAN1_PDU_HEARTBEAT_PDU_HEARTBEAT_NAME "PDU_Heartbeat" +#define CAN1_FTCU_PNEUMATIK_FTCU_TANK_PRESSURE_1_NAME "FTCU_Tank_Pressure_1" +#define CAN1_FTCU_PNEUMATIK_FTCU_TANK_PRESSURE_2_NAME "FTCU_Tank_Pressure_2" +#define CAN1_ACU_TX_COMMANDS_ABX_SPEED_FL_NAME "ABX_Speed_FL" +#define CAN1_ACU_TX_COMMANDS_ABX_SPEED_FR_NAME "ABX_Speed_FR" +#define CAN1_ACU_TX_COMMANDS_ABX_SPEED_RL_NAME "ABX_Speed_RL" +#define CAN1_ACU_TX_COMMANDS_ABX_SPEED_RR_NAME "ABX_Speed_RR" +#define CAN1_ACU_TX_COMMANDS_ABX_STEERING_ANGLE_LEFT_NAME "ABX_Steering_Angle_Left" +#define CAN1_ACU_TX_COMMANDS_ABX_STEERING_ANGLE_RIGHT_NAME "ABX_Steering_Angle_Right" +#define CAN1_ACU_RX_COMMANDS_ACU_SPEED_TARGET_LEFT_NAME "ACU_Speed_Target_left" +#define CAN1_ACU_RX_COMMANDS_ACU_SPEED_TARGET_RIGHT_NAME "ACU_Speed_Target_right" +#define CAN1_ACU_RX_COMMANDS_ACU_STEERING_ANGLE_RIGHT_NAME "ACU_Steering_Angle_Right" +#define CAN1_ACU_RX_COMMANDS_ACU_STEERING_ANGLE_LEFT_NAME "ACU_Steering_Angle_Left" +#define CAN1_ACU_RX_ACU_AS_MISSION_COMPLETE_NAME "ACU_AS_Mission_Complete" +#define CAN1_ACU_RX_ACU_AS_OK_NAME "ACU_AS_OK" +#define CAN1_ACU_RX_ACU_DRS_NAME "ACU_DRS" +#define CAN1_ACU_RX_ACU_LAP_COUNT_NAME "ACU_Lap_Count" +#define CAN1_ACU_RX_ACU_CONES_ALL_NAME "ACU_Cones_All" +#define CAN1_ACU_RX_ACU_CONES_ACTUAL_NAME "ACU_Cones_Actual" +#define CAN1_AMS_SLAVE0_LOG0_AMS_SLAVE_ID_V0_NAME "AMS_SlaveID_V0" +#define CAN1_AMS_SLAVE0_LOG0_AMS_SLAVE_ID_V1_NAME "AMS_SlaveID_V1" +#define CAN1_AMS_SLAVE0_LOG0_AMS_SLAVE_ID_V2_NAME "AMS_SlaveID_V2" +#define CAN1_AMS_SLAVE0_LOG0_AMS_SLAVE_ID_V3_NAME "AMS_SlaveID_V3" +#define CAN1_AMS_SLAVE0_LOG1_AMS_SLAVE_ID_V4_NAME "AMS_SlaveID_V4" +#define CAN1_AMS_SLAVE0_LOG1_AMS_SLAVE_ID_V5_NAME "AMS_SlaveID_V5" +#define CAN1_AMS_SLAVE0_LOG1_AMS_SLAVE_ID_V6_NAME "AMS_SlaveID_V6" +#define CAN1_AMS_SLAVE0_LOG1_AMS_SLAVE_ID_V7_NAME "AMS_SlaveID_V7" +#define CAN1_AMS_SLAVE0_LOG3_AMS_SLAVE_ID_V12_NAME "AMS_SlaveID_V12" +#define CAN1_AMS_SLAVE0_LOG3_AMS_SLAVE_ID_V13_NAME "AMS_SlaveID_V13" +#define CAN1_AMS_SLAVE0_LOG3_AMS_SLAVE_ID_V14_NAME "AMS_SlaveID_V14" +#define CAN1_AMS_SLAVE0_LOG3_AMS_SLAVE_ID_V15_NAME "AMS_SlaveID_V15" +#define CAN1_AMS_SLAVE0_LOG4_AMS_SLAVE_ID_FAILED_SENSORS_NAME "AMS_SlaveID_FailedSensors" +#define CAN1_AMS_SLAVE0_LOG5_AMS_SLAVE_ID_T0_NAME "AMS_SlaveID_T0" +#define CAN1_AMS_SLAVE0_LOG5_AMS_SLAVE_ID_T1_NAME "AMS_SlaveID_T1" +#define CAN1_AMS_SLAVE0_LOG5_AMS_SLAVE_ID_T2_NAME "AMS_SlaveID_T2" +#define CAN1_AMS_SLAVE0_LOG5_AMS_SLAVE_ID_T3_NAME "AMS_SlaveID_T3" +#define CAN1_AMS_SLAVE0_LOG5_AMS_SLAVE_ID_T4_NAME "AMS_SlaveID_T4" +#define CAN1_AMS_SLAVE0_LOG5_AMS_SLAVE_ID_T5_NAME "AMS_SlaveID_T5" +#define CAN1_AMS_SLAVE0_LOG5_AMS_SLAVE_ID_T6_NAME "AMS_SlaveID_T6" +#define CAN1_AMS_SLAVE0_LOG5_AMS_SLAVE_ID_T7_NAME "AMS_SlaveID_T7" +#define CAN1_AMS_SLAVE0_LOG6_AMS_SLAVE_ID_T8_NAME "AMS_SlaveID_T8" +#define CAN1_AMS_SLAVE0_LOG6_AMS_SLAVE_ID_T9_NAME "AMS_SlaveID_T9" +#define CAN1_ACU_TX_ACU_AS_MISSION_NAME "ACU_AS_Mission" +#define CAN1_ACU_TX_ACU_AS_STATE_NAME "ACU_AS_State" +#define CAN1_ACU_TX_ACU_POWER_OFF_NAME "ACU_Power_Off" +#define CAN1_ACU_TX_ACU_RESET_NAME "ACU_Reset" +#define CAN1_ACU_TX_ACU_ALLOW_TORQUE_NAME "ACU_AllowTorque" +#define CAN1_ACU_TX_ABX_CON_MON_ERROR_NAME "ABX_ConMon_Error" +#define CAN1_AMS_SLAVE5_STATUS_AMS_SLAVE_STATUS_ERROR_NAME "AMS_SlaveStatus_Error" +#define CAN1_AMS_SLAVE5_STATUS_AMS_SLAVE_STATUS_ID_NAME "AMS_SlaveStatus_ID" +#define CAN1_AMS_SLAVE5_STATUS_AMS_SLAVE_STATUS_TEMP_SENSOR_NAME "AMS_SlaveStatus_Temp_sensor" +#define CAN1_AMS_SLAVE5_STATUS_AMS_SLAVE_STATUS_MIN_CELL_VOLT_NAME "AMS_SlaveStatus_MinCellVolt" +#define CAN1_AMS_SLAVE5_STATUS_AMS_SLAVE_STATUS_MAX_CELL_VOLT_NAME "AMS_SlaveStatus_MaxCellVolt" +#define CAN1_AMS_SLAVE5_STATUS_AMS_SLAVE_STATUS_MAX_TEMP_NAME "AMS_SlaveStatus_MaxTemp" +#define CAN1_AMS_SLAVE4_STATUS_AMS_SLAVE_STATUS_ERROR_NAME "AMS_SlaveStatus_Error" +#define CAN1_AMS_SLAVE4_STATUS_AMS_SLAVE_STATUS_ID_NAME "AMS_SlaveStatus_ID" +#define CAN1_AMS_SLAVE4_STATUS_AMS_SLAVE_STATUS_TEMP_SENSOR_NAME "AMS_SlaveStatus_Temp_sensor" +#define CAN1_AMS_SLAVE4_STATUS_AMS_SLAVE_STATUS_MIN_CELL_VOLT_NAME "AMS_SlaveStatus_MinCellVolt" +#define CAN1_AMS_SLAVE4_STATUS_AMS_SLAVE_STATUS_MAX_CELL_VOLT_NAME "AMS_SlaveStatus_MaxCellVolt" +#define CAN1_AMS_SLAVE4_STATUS_AMS_SLAVE_STATUS_MAX_TEMP_NAME "AMS_SlaveStatus_MaxTemp" +#define CAN1_AMS_SLAVE3_STATUS_AMS_SLAVE_STATUS_ERROR_NAME "AMS_SlaveStatus_Error" +#define CAN1_AMS_SLAVE3_STATUS_AMS_SLAVE_STATUS_ID_NAME "AMS_SlaveStatus_ID" +#define CAN1_AMS_SLAVE3_STATUS_AMS_SLAVE_STATUS_TEMP_SENSOR_NAME "AMS_SlaveStatus_Temp_sensor" +#define CAN1_AMS_SLAVE3_STATUS_AMS_SLAVE_STATUS_MIN_CELL_VOLT_NAME "AMS_SlaveStatus_MinCellVolt" +#define CAN1_AMS_SLAVE3_STATUS_AMS_SLAVE_STATUS_MAX_CELL_VOLT_NAME "AMS_SlaveStatus_MaxCellVolt" +#define CAN1_AMS_SLAVE3_STATUS_AMS_SLAVE_STATUS_MAX_TEMP_NAME "AMS_SlaveStatus_MaxTemp" +#define CAN1_AMS_SLAVE2_STATUS_AMS_SLAVE_STATUS_ERROR_NAME "AMS_SlaveStatus_Error" +#define CAN1_AMS_SLAVE2_STATUS_AMS_SLAVE_STATUS_ID_NAME "AMS_SlaveStatus_ID" +#define CAN1_AMS_SLAVE2_STATUS_AMS_SLAVE_STATUS_TEMP_SENSOR_NAME "AMS_SlaveStatus_Temp_sensor" +#define CAN1_AMS_SLAVE2_STATUS_AMS_SLAVE_STATUS_MIN_CELL_VOLT_NAME "AMS_SlaveStatus_MinCellVolt" +#define CAN1_AMS_SLAVE2_STATUS_AMS_SLAVE_STATUS_MAX_CELL_VOLT_NAME "AMS_SlaveStatus_MaxCellVolt" +#define CAN1_AMS_SLAVE2_STATUS_AMS_SLAVE_STATUS_MAX_TEMP_NAME "AMS_SlaveStatus_MaxTemp" +#define CAN1_AMS_ERROR_AMS_ERROR_KIND_NAME "AMS_Error_Kind" +#define CAN1_AMS_ERROR_AMS_ERROR_ARG_NAME "AMS_Error_Arg" +#define CAN1_FTCU_COOLING_FTCU_WATER_PRESSURE_2_NAME "FTCU_Water_Pressure_2" +#define CAN1_FTCU_COOLING_FTCU_WATER_PRESSURE_1_NAME "FTCU_Water_Pressure_1" +#define CAN1_FTCU_COOLING_FTCU_WATER_TEMPERATURE_1_NAME "FTCU_Water_Temperature_1" +#define CAN1_FTCU_COOLING_FTCU_WATER_TEMPERATURE_2_NAME "FTCU_Water_Temperature_2" +#define CAN1_FTCU_COOLING_FTCU_FLOW_RATE_NAME "FTCU_Flow_rate" +#define CAN1_FTCU_BRAKE_T_FTCU_BRAKE_T_FL_NAME "FTCU_BrakeT_FL" +#define CAN1_FTCU_BRAKE_T_FTCU_BRAKE_T_FR_NAME "FTCU_BrakeT_FR" +#define CAN1_FTCU_BRAKE_T_FTCU_BRAKE_T_RL_NAME "FTCU_BrakeT_RL" +#define CAN1_FTCU_BRAKE_T_FTCU_BRAKE_T_RR_NAME "FTCU_BrakeT_RR" +#define CAN1_FTCU_WHEELSPEED_FTCU_WHEELSPEED_FL_NAME "FTCU_Wheelspeed_FL" +#define CAN1_FTCU_WHEELSPEED_FTCU_WHEELSPEED_FR_NAME "FTCU_Wheelspeed_FR" +#define CAN1_FTCU_WHEELSPEED_FTCU_WHEELSPEED_RL_NAME "FTCU_Wheelspeed_RL" +#define CAN1_FTCU_WHEELSPEED_FTCU_WHEELSPEED_RR_NAME "FTCU_Wheelspeed_RR" +#define CAN1_FTCU_WHEELSPEED_FTCU_DISTANCE_SESSION_NAME "FTCU_Distance_Session" +#define CAN1_FTCU_TIMINGS_FTCU_LAPTIME_BEST_NAME "FTCU_Laptime_best" +#define CAN1_FTCU_TIMINGS_FTCU_LAPTIME_LAST_NAME "FTCU_Laptime_last" +#define CAN1_FTCU_TIMINGS_FTCU_SECTORTIME_BEST_NAME "FTCU_Sectortime_best" +#define CAN1_FTCU_TIMINGS_FTCU_SECTORTIME_LAST_NAME "FTCU_Sectortime_last" +#define CAN1_FTCU_DRIVER_FTCU_APPS_PERCENT_NAME "FTCU_APPS_Percent" +#define CAN1_FTCU_DRIVER_FTCU_BRAKE_PRESSURE_F_NAME "FTCU_Brake_Pressure_F" +#define CAN1_FTCU_DRIVER_FTCU_BRAKE_PRESSURE_R_NAME "FTCU_Brake_Pressure_R" +#define CAN1_FTCU_DRIVER_FTCU_STEERING_ANGLE_NAME "FTCU_Steering_Angle" +#define CAN1_FTCU_DRIVER_FTCU_SPEED_NAME "FTCU_Speed" +#define CAN1_FTCU_DRIVER_FTCU_LAPCOUNTER_NAME "FTCU_Lapcounter" +#define CAN1_FTCU_DRIVER_FTCU_SECTORCOUNTER_NAME "FTCU_Sectorcounter" +#define CAN1_TTS_RR_TTS_OUTER_LEFT_NAME "TTS_OuterLeft" +#define CAN1_TTS_RR_TTS_CENTER_LEFT_NAME "TTS_CenterLeft" +#define CAN1_TTS_RR_TTS_CENTER_NAME "TTS_Center" +#define CAN1_TTS_RR_TTS_CENTER_RIGHT_NAME "TTS_CenterRight" +#define CAN1_TTS_RR_TTS_OUTET_RIGHT_NAME "TTS_OutetRight" +#define CAN1_TTS_RR_TTS_STATUS_NAME "TTS_Status" +#define CAN1_TTS_RL_TTS_OUTER_LEFT_NAME "TTS_OuterLeft" +#define CAN1_TTS_RL_TTS_CENTER_LEFT_NAME "TTS_CenterLeft" +#define CAN1_TTS_RL_TTS_CENTER_NAME "TTS_Center" +#define CAN1_TTS_RL_TTS_CENTER_RIGHT_NAME "TTS_CenterRight" +#define CAN1_TTS_RL_TTS_OUTER_RIGHT_NAME "TTS_OuterRight" +#define CAN1_TTS_RL_TTS_STATUS_NAME "TTS_Status" +#define CAN1_TTS_FR_TTS_OUTER_LEFT_NAME "TTS_OuterLeft" +#define CAN1_TTS_FR_TTS_CENTER_LEFT_NAME "TTS_CenterLeft" +#define CAN1_TTS_FR_TTS_CENTER_NAME "TTS_Center" +#define CAN1_TTS_FR_TTS_CENTER_RIGHT_NAME "TTS_CenterRight" +#define CAN1_TTS_FR_TTS_OUTER_RIGHT_NAME "TTS_OuterRight" +#define CAN1_TTS_FR_TTS_STATUS_NAME "TTS_Status" +#define CAN1_TTS_FL_TTS_OUTER_LEFT_NAME "TTS_OuterLeft" +#define CAN1_TTS_FL_TTS_CENTER_LEFT_NAME "TTS_CenterLeft" +#define CAN1_TTS_FL_TTS_CENTER_NAME "TTS_Center" +#define CAN1_TTS_FL_TTS_CENTER_RIGHT_NAME "TTS_CenterRight" +#define CAN1_TTS_FL_TTS_OUTER_RIGHT_NAME "TTS_OuterRight" +#define CAN1_TTS_FL_TTS_STATUS_NAME "TTS_Status" +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_NAME "STW_Param_Set" +#define CAN1_STW_PARAM_SET_STW_PARAM_TC_SLIPREF_NAME "STW_Param_TC_Slipref" +#define CAN1_STW_PARAM_SET_STW_PARAM_TC_MUMAX_NAME "STW_Param_TC_Mumax" +#define CAN1_STW_PARAM_SET_STW_PARAM_TC_I_NAME "STW_Param_TC_I" +#define CAN1_STW_PARAM_SET_STW_PARAM_PLIM_NAME "STW_Param_Plim" +#define CAN1_STW_PARAM_SET_STW_PARAM_TLIM_NAME "STW_Param_Tlim" +#define CAN1_STW_PARAM_SET_STW_PARAM_TC_P_NAME "STW_Param_TC_P" +#define CAN1_STW_PARAM_SET_STW_PARAM_REKU_NAME "STW_Param_Reku" +#define CAN1_STW_PARAM_SET_STW_PARAM_TC_ON_NAME "STW_Param_TC_on" +#define CAN1_STW_PARAM_SET_STW_PARAM_TV_ON_NAME "STW_Param_TV_on" +#define CAN1_STW_PARAM_SET_STW_PARAM_DISCIPLINE_NAME "STW_Param_Discipline" +#define CAN1_STW_PARAM_SET_STW_PARAM_SLIM_NAME "STW_Param_Slim" +#define CAN1_AMS_SLAVE0_STATUS_AMS_SLAVE_STATUS_ERROR_NAME "AMS_SlaveStatus_Error" +#define CAN1_AMS_SLAVE0_STATUS_AMS_SLAVE_STATUS_ID_NAME "AMS_SlaveStatus_ID" +#define CAN1_AMS_SLAVE0_STATUS_AMS_SLAVE_STATUS_TEMP_SENSOR_NAME "AMS_SlaveStatus_Temp_sensor" +#define CAN1_AMS_SLAVE0_STATUS_AMS_SLAVE_STATUS_MIN_CELL_VOLT_NAME "AMS_SlaveStatus_MinCellVolt" +#define CAN1_AMS_SLAVE0_STATUS_AMS_SLAVE_STATUS_MAX_CELL_VOLT_NAME "AMS_SlaveStatus_MaxCellVolt" +#define CAN1_AMS_SLAVE0_STATUS_AMS_SLAVE_STATUS_MAX_TEMP_NAME "AMS_SlaveStatus_MaxTemp" +#define CAN1_SSU_MESSAGE_SSU_PRESSURE_NAME "SSU_Pressure" +#define CAN1_SSU_MESSAGE_SSU_AIR_TEMP_NAME "SSU_AirTemp" +#define CAN1_AMS_STATUS_AMS_STATE_NAME "AMS_State" +#define CAN1_AMS_STATUS_SDC_CLOSED_NAME "SDC_Closed" +#define CAN1_AMS_STATUS_SOC_NAME "SOC" +#define CAN1_AMS_STATUS_MIN_CELL_VOLT_NAME "Min_cell_volt" +#define CAN1_AMS_STATUS_MAX_CELL_TEMP_NAME "Max_cell_temp" +#define CAN1_AMS_STATUS_AMS_IMD_STATE_NAME "AMS_IMD_State" +#define CAN1_AMS_STATUS_AMS_IMD_OK_NAME "AMS_IMD_ok" +#define CAN1_AMS_SLAVE_PANIC_AMS_SLAVE_PANIC_SLAVE_ID_NAME "AMS_SlavePanic_SlaveID" +#define CAN1_AMS_SLAVE_PANIC_AMS_SLAVE_PANIC_KIND_NAME "AMS_SlavePanic_Kind" +#define CAN1_AMS_SLAVE_PANIC_AMS_SLAVE_PANIC_ARG_NAME "AMS_SlavePanic_Arg" +#define CAN1_AMS_IN_TS_ACTIVATE_NAME "TS_activate" +#define CAN1_AMS_IN_INVERTERS_DISCHARGED_NAME "Inverters_discharged" +#define CAN1_AMS_IN_LAP_NUMBER_NAME "Lap_Number" +#define CAN1_SHUNT_CURRENT_SHUNT_CURRENT_NAME "Shunt_Current" +#define CAN1_SHUNT_VOLTAGE1_SHUNT_VOLTAGE1_NAME "Shunt_Voltage1" +#define CAN1_SHUNT_VOLTAGE2_SHUNT_VOLTAGE2_NAME "Shunt_Voltage2" +#define CAN1_SHUNT_VOLTAGE3_SHUNT_VOLTAGE3_NAME "Shunt_Voltage3" +#define CAN1_SHUNT_TEMPERATURE_SHUNT_TEMPERATURE_NAME "Shunt_Temperature" +#define CAN1_PDU_COMMAND_PDU_ENABLE_MISC_NAME "PDU_enable_misc" +#define CAN1_PDU_COMMAND_PDU_ENABLE_SDC_NAME "PDU_enable_sdc" +#define CAN1_PDU_COMMAND_PDU_ENABLE_INVERTER_NAME "PDU_enable_inverter" +#define CAN1_PDU_COMMAND_PDU_ENABLE_TS_COOLING_NAME "PDU_enable_TS_Cooling" +#define CAN1_PDU_COMMAND_PDU_ENABLE_ACC_COOLING_NAME "PDU_enable_ACC_Cooling" +#define CAN1_PDU_COMMAND_PDU_ENABLE_LLDAR_NAME "PDU_enable_lldar" +#define CAN1_PDU_COMMAND_PDU_ENABLE_DRS_NAME "PDU_enable_DRS" +#define CAN1_PDU_COMMAND_PDU_ENABLE_EPSC_NAME "PDU_enable_EPSC" +#define CAN1_PDU_COMMAND_PDU_ENABLE_ACU_NAME "PDU__enable_ACU" +#define CAN1_PDU_COMMAND_PDU_ENABLE_EBS_A_NAME "PDU_enable_EBS_A" +#define CAN1_PDU_COMMAND_PDU_ENABLE_EBS_B_NAME "PDU_enable_EBS_B" +#define CAN1_PDU_COMMAND_PDU_ENABLE_EBS_C_NAME "PDU_enable_EBS_C" +#define CAN1_PDU_RESPONSE_PDU_ALWAYSON_TX_NAME "PDU_alwayson_tx" +#define CAN1_PDU_RESPONSE_PDU_SHUTDOWN_CIRCUIT_TX_NAME "PDU_shutdown_circuit_tx" +#define CAN1_PDU_RESPONSE_PDU_LIDAR_TX_NAME "PDU_lidar_tx" +#define CAN1_PDU_RESPONSE_PDU_ACU_TX_NAME "PDU_ACU_tx" +#define CAN1_PDU_RESPONSE_PDU_SERVOS_REGLER_TX_NAME "PDU_servos_regler_tx" +#define CAN1_PDU_RESPONSE_PDU_INVERTER_TX_NAME "PDU_inverter_tx" +#define CAN1_PDU_RESPONSE_PDU_MISC_TX_NAME "PDU_misc_tx" +#define CAN1_PDU_RESPONSE_PDU_SERVO_TX_NAME "PDU_servo_tx" +#define CAN1_PDU_RESPONSE_PDU_EBS_VALVE_1_TX_NAME "PDU_ebs_valve_1_tx" +#define CAN1_PDU_RESPONSE_PDU_EBS_VALVE_2_TX_NAME "PDU_ebs_valve_2_tx" +#define CAN1_PDU_RESPONSE_PDU_CS_VALVE_TX_NAME "PDU_cs_valve_tx" +#define CAN1_PDU_RESPONSE_PDU_AGGREGAT_TX_NAME "PDU_aggregat_tx" +#define CAN1_PDU_RESPONSE_PDU_STEERING_TX_NAME "PDU_steering_tx" +#define CAN1_PDU_RESPONSE_PDU_PWM_TSAC_FANS_NAME "PDU_PWM_TSAC_fans" +#define CAN1_PDU_RESPONSE_PDU_PWM_RADIATOT_FANS_TX_NAME "PDU_PWM_radiatot_fans_tx" +#define CAN1_PDU_RESPONSE_PDU_PWM_AGGREGAT_NAME "PDU_PWM_aggregat" +#define CAN1_PDU_RESPONSE_PDU_PWM_PUMP_NAME "PDU_PWM_pump" +#define CAN1_PDU_RESPONSE_PDU_HEARTBEAT_OK_TX_NAME "PDU_heartbeat_ok_tx" +#define CAN1_AS_MISSION_FB_MISSION_SELECTION_NAME "Mission_selection" +#define CAN1_STW_MISSION_SELECTED_MISSION_SELECTION_NAME "Mission_selection" +#define CAN1_EPSC_OUT_EPSC_MEASURED_RPM_NAME "EPSC_measured_rpm" +#define CAN1_EPSC_OUT_EPSC_MEASURED_STEERING_ANGLE_NAME "EPSC_measured_steering_angle" +#define CAN1_EPSC_OUT_EPSC_MEASURED_MOSFET_TEMPERATURE_NAME "EPSC_measured_MOSFET_temperature" +#define CAN1_EPSC_OUT_EPSC_MEASURED_VOLTAGE_NAME "EPSC_measured_voltage" +#define CAN1_EPSC_OUT_EPSC_MEASURED_CURRENT_NAME "EPSC_measured_current" +#define CAN1_EPSC_STEERING_IN_EPSC_DESIRED_STEERING_ANGLE_NAME "EPSC_desired_steering_angle" +#define CAN1_STW_BUTTONS_STW_BUTTON_DRS_NAME "STW_button_DRS" +#define CAN1_STW_BUTTONS_STW_BUTTON_1_NAME "STW_button_1" +#define CAN1_STW_BUTTONS_STW_BUTTON_2_NAME "STW_button_2" +#define CAN1_STW_BUTTONS_STW_BUTTON_3_NAME "STW_button_3" +#define CAN1_STW_BUTTONS_STW_BUTTON_4_NAME "STW_button_4" +#define CAN1_STW_STATUS_LAP_COUNT_NAME "Lap_Count" +#define CAN1_STW_STATUS_ERR_PDU_NAME "ERR_PDU" +#define CAN1_STW_STATUS_ERR_RES_NAME "ERR_RES" +#define CAN1_STW_STATUS_R2_D_PROGRESS_NAME "R2D_Progress" +#define CAN1_STW_STATUS_AS_STATE_STW_NAME "AS_State_STW" +#define CAN1_STW_STATUS_ERR_AS_NAME "ERR_AS" +#define CAN1_STW_STATUS_ERR_APP_SP_NAME "ERR_APPSp" +#define CAN1_STW_STATUS_ERR_S_BSPD_NAME "ERR_sBSPD" +#define CAN1_STW_STATUS_ERR_SCS_NAME "ERR_SCS" +#define CAN1_STW_STATUS_ERR_CON_MON_NAME "ERR_ConMon" +#define CAN1_STW_STATUS_ERR_INI_CHK_NAME "ERR_IniChk" +#define CAN1_STW_STATUS_ERR_INV2_NAME "ERR_Inv2" +#define CAN1_STW_STATUS_ERR_INV1_NAME "ERR_Inv1" +#define CAN1_STW_STATUS_ERR_AMS_NAME "ERR_AMS" +#define CAN1_STW_STATUS_ERR_SDC_NAME "ERR_SDC" +#define CAN1_STW_STATUS_SDC_STATUS_NAME "SDC_Status" +#define CAN1_STW_STATUS_INV2_READY_NAME "Inv2_ready" +#define CAN1_STW_STATUS_INV1_READY_NAME "Inv1_ready" +#define CAN1_STW_STATUS_ENERGY_PER_LAP_NAME "Energy_per_Lap" +#define CAN1_STW_STATUS_INI_CHK_STATE_NAME "iniChk_state" +#define CAN1_PDU_CURRENT_1_PDU_ALWAYS_ON_CURRENT_NAME "PDU_always_on_current" +#define CAN1_PDU_CURRENT_1_PDU_LVMS_CURRENT_NAME "PDU_LVMS_current" +#define CAN1_PDU_CURRENT_1_PDU_ASMS_CURRENT_NAME "PDU_ASMS_current" +#define CAN1_PDU_CURRENT_1_PDU_MISC_CURRENT_NAME "PDU_MISC_current" +#define CAN1_PDU_CURRENT_2_PDU_SDC_CURRENT_NAME "PDU_SDC_current" +#define CAN1_PDU_CURRENT_2_PDU_INVERTER_CURRENT_NAME "PDU_Inverter_current" +#define CAN1_PDU_CURRENT_2_PDU_TS_COOLING_CURRENT_NAME "PDU_TS_Cooling_current" +#define CAN1_PDU_CURRENT_2_PDU_ACC_COOLING_CURRENT_NAME "PDU_ACC_Cooling_current" +#define CAN1_PDU_CURRENT_3_PDU_LIDAR_CURRENT_NAME "PDU_Lidar_current" +#define CAN1_PDU_CURRENT_3_PDU_DRS_CURRENT_NAME "PDU_DRS_current" +#define CAN1_PDU_CURRENT_3_PDU_EPSC_CURRENT_NAME "PDU_EPSC_current" +#define CAN1_PDU_CURRENT_3_PDU_ACU_CURRENT_NAME "PDU_ACU_current" +#define CAN1_PDU_CURRENT_4_PDU_EBS_A_CURRENT_NAME "PDU_EBS_A_current" +#define CAN1_PDU_CURRENT_4_PDU_EBS_B_CURRENT_NAME "PDU_EBS_B_current" +#define CAN1_EPSC_CONFIG_IN_EPSC_CONFIG_P_GAIN_NAME "EPSC_Config_P_Gain" +#define CAN1_EPSC_CONFIG_IN_EPSC_CONFIG_I_GAIN_NAME "EPSC_Config_I_Gain" +#define CAN1_EPSC_CONFIG_IN_EPSC_CONFIG_D_GAIN_NAME "EPSC_Config_D_Gain" + +/** + * Signals in message Inverter_Velocity. + * + * All signal values are as on the CAN bus. + */ +struct can1_inverter_velocity_t { + /** + * Range: -2147483648..2147483647 (-2147483.648..2147483.647 -) + * Scale: 0.001 + * Offset: 0 + */ + int32_t inverter_1_velocity; + + /** + * Range: -2147483648..2147483647 (-2147483.648..2147483.647 -) + * Scale: 0.001 + * Offset: 0 + */ + int32_t inverter_2_velocity; +}; + +/** + * Signals in message Inverter_Errors_Warnings. + * + * All signal values are as on the CAN bus. + */ +struct can1_inverter_errors_warnings_t { + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t inverter_1_errors; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t inverter_1_warnings; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t inverter_2_errors; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t inverter_2_warnings; +}; + +/** + * Signals in message Inverter_Torque_Actual_CW. + * + * All signal values are as on the CAN bus. + */ +struct can1_inverter_torque_actual_cw_t { + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t inverter_1_control_word; + + /** + * Range: -32768..32767 (-32768..32767 -) + * Scale: 1 + * Offset: 0 + */ + int16_t inverter_1_torque_actual; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t inverter_2_control_word; + + /** + * Range: -32768..32767 (-32768..32767 -) + * Scale: 1 + * Offset: 0 + */ + int16_t inverter_2_torque_actual; +}; + +/** + * Signals in message Inverter_Temperatur. + * + * All signal values are as on the CAN bus. + */ +struct can1_inverter_temperatur_t { + /** + * Range: -128..127 (-128..127 -) + * Scale: 1 + * Offset: 0 + */ + int16_t inverter_1_temp_inv; + + /** + * Range: -128..127 (-128..127 -) + * Scale: 1 + * Offset: 0 + */ + int16_t inverter_1_temp_mot; + + /** + * Range: -32768..32767 (-32768..32767 -) + * Scale: 1 + * Offset: 0 + */ + int16_t inverter_2_temp_inv; + + /** + * Range: -128..127 (-128..127 -) + * Scale: 1 + * Offset: 0 + */ + int16_t inverter_2_temp_mot; +}; + +/** + * Signals in message Inverter_Torque_wanted. + * + * All signal values are as on the CAN bus. + */ +struct can1_inverter_torque_wanted_t { + /** + * Range: -32768..32767 (-32768..32767 -) + * Scale: 1 + * Offset: 0 + */ + int16_t inverter_1_torque_demanded; + + /** + * Range: -32768..32767 (-32768..32767 -) + * Scale: 1 + * Offset: 0 + */ + int16_t inverter_2_torque_demanded; + + /** + * Range: -32768..32767 (-32768..32767 -) + * Scale: 1 + * Offset: 0 + */ + int16_t inverter_1_torque_desired; + + /** + * Range: -32768..32767 (-32768..32767 -) + * Scale: 1 + * Offset: 0 + */ + int16_t inverter_2_torque_desired; +}; + +/** + * Signals in message SDO_Telemetrie_Rx_Node1. + * + * All signal values are as on the CAN bus. + */ +struct can1_sdo_telemetrie_rx_node1_t { + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdo_command_byte; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t sdo_od_index; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdo_od_subindex; + + /** + * Range: 0..4294967295 (0..4294967295 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t sdo_data; +}; + +/** + * Signals in message SDO_Telemetrie_Rx_Node2. + * + * All signal values are as on the CAN bus. + */ +struct can1_sdo_telemetrie_rx_node2_t { + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdo_command_byte; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t sdo_od_index; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdo_od_subindex; + + /** + * Range: 0..4294967295 (0..4294967295 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t sdo_data; +}; + +/** + * Signals in message SDO_Telemetrie_Tx. + * + * All signal values are as on the CAN bus. + */ +struct can1_sdo_telemetrie_tx_t { + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdo_command_byte; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t sdo_od_index; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdo_od_subindex; + + /** + * Range: 0..4294967295 (0..4294967295 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t sdo_data; +}; + +/** + * Signals in message Laptop_SDO_Node. + * + * All signal values are as on the CAN bus. + */ +struct can1_laptop_sdo_node_t { + /** + * 0: beide Nodes + * 1: Node 1 + * 2: Node 2 + * + * Range: 0..3 (0..3 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t node_id_sdo; +}; + +/** + * Signals in message XSens_LongLat. + * + * All signal values are as on the CAN bus. + */ +struct can1_x_sens_long_lat_t { + /** + * Range: -2147483648..2147483647 (-127.9999..127.9999 deg) + * Scale: 5.96046e-08 + * Offset: 0 + */ + int32_t x_sens_latitude; + + /** + * Range: -2147483648..2147483647 (-255.99938..255.99938 deg) + * Scale: 1.19209e-07 + * Offset: 0 + */ + int32_t x_sens_longitude; +}; + +/** + * Signals in message XSens_rateofturn. + * + * All signal values are as on the CAN bus. + */ +struct can1_x_sens_rateofturn_t { + /** + * Range: -32768..32767 (-64.00016..63.99821 rad/s) + * Scale: 0.00195313 + * Offset: 0 + */ + int16_t x_sens_gyr_x; + + /** + * Range: -32768..32767 (-64.00016..63.99821 rad/s) + * Scale: 0.00195313 + * Offset: 0 + */ + int16_t x_sens_gy_y; + + /** + * Range: -32768..32767 (-64.00016..63.99821 rad/s) + * Scale: 0.00195313 + * Offset: 0 + */ + int16_t x_sens_gy_z; +}; + +/** + * Signals in message XSens_Acceleration. + * + * All signal values are as on the CAN bus. + */ +struct can1_x_sens_acceleration_t { + /** + * Range: -32768..32767 (-128..127.99609 m/s^2) + * Scale: 0.00390625 + * Offset: 0 + */ + int16_t x_sens_acc_x; + + /** + * Range: -32768..32767 (-128..127.99609 m/s^2) + * Scale: 0.00390625 + * Offset: 0 + */ + int16_t x_sens_acc_y; + + /** + * Range: -32768..32767 (-128..127.99609 m/s^2) + * Scale: 0.00390625 + * Offset: 0 + */ + int16_t x_sens_acc_z; +}; + +/** + * Signals in message XSens_Velocity. + * + * All signal values are as on the CAN bus. + */ +struct can1_x_sens_velocity_t { + /** + * Range: -32768..32767 (-512..511.98438 m/s) + * Scale: 0.015625 + * Offset: 0 + */ + int16_t x_sens_vel_x; + + /** + * Range: -32768..32767 (-512..511.98438 m/s) + * Scale: 0.015625 + * Offset: 0 + */ + int16_t x_sens_vel_y; + + /** + * Range: -32768..32767 (-512..511.98438 m/s) + * Scale: 0.015625 + * Offset: 0 + */ + int16_t x_sens_vel_z; +}; + +/** + * Signals in message Telemetrie. + * + * All signal values are as on the CAN bus. + */ +struct can1_telemetrie_t { + /** + * Range: 0..15 (0..15 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ini_check_error_state; + + /** + * Range: 0..7 (0..7 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t powermap; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t apps_ok; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t brake_ok; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t allow_torque; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t asp_ok; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pressure_sensor_ok; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t torque_vectoring_on; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t reku_on; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t traction_control_on; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ts_deactivate; + + /** + * Range: 0..255 (0..2550 -) + * Scale: 10 + * Offset: 0 + */ + uint8_t torque_limit; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t power_limit; + + /** + * Range: 0..255 (0..2550 -) + * Scale: 10 + * Offset: 0 + */ + uint8_t torque_limit_dynamisch; + + /** + * Range: 0..255 (0..2550 -) + * Scale: 10 + * Offset: 0 + */ + uint8_t torque_ohne_limit_l; + + /** + * Range: 0..255 (0..2550 -) + * Scale: 10 + * Offset: 0 + */ + uint8_t torque_ohne_limit_r; +}; + +/** + * Signals in message Override_Powermap. + * + * All signal values are as on the CAN bus. + */ +struct can1_override_powermap_t { + /** + * Range: 0..7 (0..7 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t laptopp_power_map; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t laptop_reku; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t laptop_tc; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t laptop_tv; + + /** + * Range: 0..255 (0..2.55 -) + * Scale: 0.01 + * Offset: 0 + */ + uint8_t laptop_slipref; + + /** + * Range: 0..65535 (0..6553.5 -) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t laptop_tc_i; + + /** + * Range: 0..655350 (0..65535 -) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t laptop_tc_p; + + /** + * Range: 0..255 (1..3.55 -) + * Scale: 0.01 + * Offset: 1 + */ + uint8_t laptop_tc_mumax; +}; + +/** + * Signals in message Override_Laptop_2. + * + * All signal values are as on the CAN bus. + */ +struct can1_override_laptop_2_t { + /** + * Range: 0..7 (0..7 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t as_mission; + + /** + * Range: 0..7 (0..7 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t as_state; + + /** + * Range: 0..4095 (0..4095 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t manual_input_torque; + + /** + * Range: 0..80 (0..80 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t laptop_powerlimit; + + /** + * Range: 0..150 (0..1500 -) + * Scale: 10 + * Offset: 0 + */ + uint8_t laptop_torque_lim; +}; + +/** + * Signals in message Override_EPSC_Cooling. + * + * All signal values are as on the CAN bus. + */ +struct can1_override_epsc_cooling_t { + /** + * Range: -512..511 (-512..511 -) + * Scale: 1 + * Offset: 0 + */ + int16_t epsc_manual_angle; + + /** + * Range: 0..3 (0..3 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t epsc_mode; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ac_cooling_enable; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ts_cooling_enable; + + /** + * Range: 0..255 (0..1.275 -) + * Scale: 0.005 + * Offset: 0 + */ + uint8_t ac_cooling_pwm; + + /** + * Range: 0..255 (0..1.275 -) + * Scale: 0.005 + * Offset: 0 + */ + uint8_t ts_cooling_pwm; +}; + +/** + * Signals in message Override_Laptop. + * + * All signal values are as on the CAN bus. + */ +struct can1_override_laptop_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t fake_r2_d; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t fake_soundbox_emergency; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t fake_soundbox_r2_d; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t fake_ts_active; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_apps; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_as_mission; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_as_state; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_epsc_mode; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_pdu_ac_cooling_enable; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_pdu_acu_enable; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_pdu_drs_enable; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_pdu_epsc_enable; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_pdu_heartbeat; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_pdu_lidar_enable; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_pdu_pn_v1_enable; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_pdu_pn_v2_enable; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_pdu_ts_cooling_enable; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_power_map; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_tc_parameter; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_torque_input; +}; + +/** + * Signals in message APPS_Override. + * + * All signal values are as on the CAN bus. + */ +struct can1_apps_override_t { + /** + * Range: 0..1023 (0..10.23 -) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t apps_0_max; + + /** + * Range: 0..1023 (0..10.23 -) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t apps_0_min; + + /** + * Range: 0..1023 (0..10.23 -) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t apps_1_max; + + /** + * Range: 0..1023 (0..10.23 -) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t apps_1_min; +}; + +/** + * Signals in message FTCU_Damper. + * + * All signal values are as on the CAN bus. + */ +struct can1_ftcu_damper_t { + /** + * Range: 0..7500 (0..75 mm) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_damper_fl; + + /** + * Range: 0..7500 (0..75 mm) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_damper_fr; + + /** + * Range: 0..7500 (0..75 mm) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_damper_rl; + + /** + * Range: 0..7500 (0..75 mm) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_damper_rr; +}; + +/** + * Signals in message FTCU_ParamConfirm. + * + * All signal values are as on the CAN bus. + */ +struct can1_ftcu_param_confirm_t { + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ftcu_param_confirm; +}; + +/** + * Signals in message Sensornode_F_10Hz. + * + * All signal values are as on the CAN bus. + */ +struct can1_sensornode_f_10_hz_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ls_l; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ls_r; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdc_m_pre_bots; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdc_m_post_ins; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdc_m_post_bspd; + + /** + * Range: 0..255 (0..510 degC) + * Scale: 2 + * Offset: 0 + */ + uint8_t bdts_fl; + + /** + * Range: 0..255 (0..510 degC) + * Scale: 2 + * Offset: 0 + */ + uint8_t bdts_fr; +}; + +/** + * Signals in message Sensornode_F_100Hz_1. + * + * All signal values are as on the CAN bus. + */ +struct can1_sensornode_f_100_hz_1_t { + /** + * Range: 0..255 (0..1 -) + * Scale: 0.00392157 + * Offset: 0 + */ + uint8_t apps_1; + + /** + * Range: 0..255 (0..1 -) + * Scale: 0.00392157 + * Offset: 0 + */ + uint8_t apps_2; + + /** + * Range: 0..255 (0..510 -) + * Scale: 2 + * Offset: 0 + */ + uint8_t bp_f; + + /** + * Range: 0..4095 (0..4095 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t sas; + + /** + * Range: 0..255 (0..255 notches) + * Scale: 1 + * Offset: 0 + */ + uint8_t wss_fl; + + /** + * Range: 0..255 (0..255 notches) + * Scale: 1 + * Offset: 0 + */ + uint8_t wss_fr; +}; + +/** + * Signals in message Sensornode_F_100Hz_2. + * + * All signal values are as on the CAN bus. + */ +struct can1_sensornode_f_100_hz_2_t { + /** + * Range: 0..4095 (0..4095 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t ds_fl; + + /** + * Range: 0..4095 (0..4095 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t ds_fr; +}; + +/** + * Signals in message Sensornode_F_1kHz. + * + * All signal values are as on the CAN bus. + */ +struct can1_sensornode_f_1k_hz_t { + /** + * Range: 0..4095 (0..4095 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t sls_fl; + + /** + * Range: 0..4095 (0..4095 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t sls_fr; +}; + +/** + * Signals in message Sensornode_R_10Hz. + * + * All signal values are as on the CAN bus. + */ +struct can1_sensornode_r_10_hz_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ext_ts_on; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdc_m_pre_tsms; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdc_m_post_tsms; + + /** + * Range: 0..255 (0..510 degC) + * Scale: 2 + * Offset: 0 + */ + uint8_t bdts_rl; + + /** + * Range: 0..255 (0..510 degC) + * Scale: 2 + * Offset: 0 + */ + uint8_t bdts_rr; + + /** + * Range: 0..255 (0..255 degC) + * Scale: 1 + * Offset: 0 + */ + uint8_t wt_bat; + + /** + * Range: 0..255 (0..255 degC) + * Scale: 1 + * Offset: 0 + */ + uint8_t wt_dt; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t wp_bat; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t wp_dt; +}; + +/** + * Signals in message Sensornode_R_100Hz. + * + * All signal values are as on the CAN bus. + */ +struct can1_sensornode_r_100_hz_t { + /** + * Range: 0..255 (0..25.5 -) + * Scale: 0.1 + * Offset: 0 + */ + uint8_t ebs_aps_1; + + /** + * Range: 0..255 (0..25.5 -) + * Scale: 0.1 + * Offset: 0 + */ + uint8_t ebs_aps_2; + + /** + * Range: 0..255 (0..510 -) + * Scale: 2 + * Offset: 0 + */ + uint8_t bp_r; + + /** + * Range: 0..255 (0..255 notches) + * Scale: 1 + * Offset: 0 + */ + uint8_t wss_rl; + + /** + * Range: 0..255 (0..255 notches) + * Scale: 1 + * Offset: 0 + */ + uint8_t wss_rr; + + /** + * Range: 0..4095 (0..4095 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t ds_rl; + + /** + * Range: 0..4095 (0..4095 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t ds_rr; +}; + +/** + * Signals in message Sensornode_R_1kHz. + * + * All signal values are as on the CAN bus. + */ +struct can1_sensornode_r_1k_hz_t { + /** + * Range: 0..4095 (0..4095 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t sls_rl; + + /** + * Range: 0..4095 (0..4095 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t sls_rr; +}; + +/** + * Signals in message PWM_DutyCycle. + * + * All signal values are as on the CAN bus. + */ +struct can1_pwm_duty_cycle_t { + /** + * Range: 0..255 (0..255 /255) + * Scale: 1 + * Offset: 0 + */ + uint8_t dc_drs; + + /** + * Range: 0..255 (0..255 /255) + * Scale: 1 + * Offset: 0 + */ + uint8_t dc_assi_y; + + /** + * Range: 0..255 (0..255 /255) + * Scale: 1 + * Offset: 0 + */ + uint8_t dc_assi_b; + + /** + * Range: 0..255 (0..255 /255) + * Scale: 1 + * Offset: 0 + */ + uint8_t dc_bl; + + /** + * Range: 0..255 (0..255 /255) + * Scale: 1 + * Offset: 0 + */ + uint8_t dc_fans_dt; + + /** + * Range: 0..255 (0..255 /255) + * Scale: 1 + * Offset: 0 + */ + uint8_t dc_fans_bat; + + /** + * Range: 0..255 (0..255 /255) + * Scale: 1 + * Offset: 0 + */ + uint8_t dc_sbx; +}; + +/** + * Signals in message PWM_Config. + * + * All signal values are as on the CAN bus. + */ +struct can1_pwm_config_t { + /** + * DRS+Lighting,Default=500Hz + * + * Range: 0..65535 (0..65535 Hz) + * Scale: 1 + * Offset: 0 + */ + uint16_t freq_pwm1_drs_lighting; + + /** + * Fans,Default=20kHz + * + * Range: 0..65535 (0..65535 Hz) + * Scale: 1 + * Offset: 0 + */ + uint16_t freq_pwm3_fans; + + /** + * SBX,Default=313Hz + * + * Range: 0..65535 (0..65535 Hz) + * Scale: 1 + * Offset: 0 + */ + uint16_t freq_pwm2_sbx; +}; + +/** + * Signals in message Dashboard_In. + * + * All signal values are as on the CAN bus. + */ +struct can1_dashboard_in_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t dashboard_r2_d_button; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t dashboard_ts_activate_button; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t dashboard_race_key; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t dashboard_sdc_in; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t dashboard_sdc_out; +}; + +/** + * Signals in message AMS_Slave1Status. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave1_status_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_error; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_id; + + /** + * Range: 0..1 (0..1 %) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_temp_sensor; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_min_cell_volt; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_max_cell_volt; + + /** + * Range: 0..16 (0..1 degC) + * Scale: 0.0625 + * Offset: 0 + */ + int16_t ams_slave_status_max_temp; +}; + +/** + * Signals in message AMS_Slave2_Log0. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave2_log0_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v0; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v1; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v2; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v3; +}; + +/** + * Signals in message AMS_Slave2_Log1. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave2_log1_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v4; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v5; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v6; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v7; +}; + +/** + * Signals in message AMS_Slave2_Log2. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave2_log2_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v8; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v9; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v10; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v11; +}; + +/** + * Signals in message AMS_Slave2_Log3. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave2_log3_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v12; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v13; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v14; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v15; +}; + +/** + * Signals in message AMS_Slave2_Log4. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave2_log4_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint32_t ams_slave_id_failed_sensors; +}; + +/** + * Signals in message AMS_Slave2_Log5. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave2_log5_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t0; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t1; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t2; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t3; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t4; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t5; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t6; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t7; +}; + +/** + * Signals in message AMS_Slave5_Log6. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave5_log6_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t8; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t9; +}; + +/** + * Signals in message AMS_Slave4_Log6. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave4_log6_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t8; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t9; +}; + +/** + * Signals in message AMS_Slave3_Log6. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave3_log6_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t8; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t9; +}; + +/** + * Signals in message AMS_Slave2_Log6. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave2_log6_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t8; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t9; +}; + +/** + * Signals in message AMS_Slave1_Log6. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave1_log6_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t8; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t9; +}; + +/** + * Signals in message AMS_Slave5_Log5. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave5_log5_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t0; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t1; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t2; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t3; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t4; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t5; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t6; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t7; +}; + +/** + * Signals in message AMS_Slave4_Log5. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave4_log5_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t0; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t1; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t2; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t3; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t4; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t5; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t6; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t7; +}; + +/** + * Signals in message AMS_Slave3_Log5. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave3_log5_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t0; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t1; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t2; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t3; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t4; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t5; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t6; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t7; +}; + +/** + * Signals in message AMS_Slave1_Log5. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave1_log5_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t0; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t1; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t2; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t3; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t4; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t5; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t6; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t7; +}; + +/** + * Signals in message AMS_Slave5_Log4. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave5_log4_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint32_t ams_slave_id_failed_sensors; +}; + +/** + * Signals in message AMS_Slave4_Log4. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave4_log4_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint32_t ams_slave_id_failed_sensors; +}; + +/** + * Signals in message AMS_Slave3_Log4. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave3_log4_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint32_t ams_slave_id_failed_sensors; +}; + +/** + * Signals in message AMS_Slave1_Log4. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave1_log4_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint32_t ams_slave_id_failed_sensors; +}; + +/** + * Signals in message AMS_Slave5_Log3. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave5_log3_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v12; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v13; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v14; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v15; +}; + +/** + * Signals in message AMS_Slave4_Log3. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave4_log3_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v12; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v13; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v14; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v15; +}; + +/** + * Signals in message AMS_Slave3_Log3. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave3_log3_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v12; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v13; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v14; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v15; +}; + +/** + * Signals in message AMS_Slave1_Log3. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave1_log3_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v12; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v13; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v14; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v15; +}; + +/** + * Signals in message AMS_Slave5_Log2. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave5_log2_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v8; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v9; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v10; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v11; +}; + +/** + * Signals in message AMS_Slave4_Log2. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave4_log2_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v8; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v9; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v10; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v11; +}; + +/** + * Signals in message AMS_Slave3_Log2. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave3_log2_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v8; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v9; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v10; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v11; +}; + +/** + * Signals in message AMS_Slave1_Log2. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave1_log2_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v8; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v9; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v10; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v11; +}; + +/** + * Signals in message AMS_Slave5_Log1. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave5_log1_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v4; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v5; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v6; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v7; +}; + +/** + * Signals in message AMS_Slave4_Log1. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave4_log1_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v4; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v5; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v6; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v7; +}; + +/** + * Signals in message AMS_Slave3_Log1. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave3_log1_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v4; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v5; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v6; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v7; +}; + +/** + * Signals in message AMS_Slave1_Log1. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave1_log1_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v4; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v5; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v6; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v7; +}; + +/** + * Signals in message AMS_Slave5_Log0. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave5_log0_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v0; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v1; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v2; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v3; +}; + +/** + * Signals in message AMS_Slave4_Log0. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave4_log0_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v0; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v1; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v2; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v3; +}; + +/** + * Signals in message AMS_Slave3_Log0. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave3_log0_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v0; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v1; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v2; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v3; +}; + +/** + * Signals in message AMS_Slave1_Log0. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave1_log0_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v0; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v1; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v2; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v3; +}; + +/** + * Signals in message PDU_Heartbeat. + * + * All signal values are as on the CAN bus. + */ +struct can1_pdu_heartbeat_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t pdu_heartbeat; +}; + +/** + * Signals in message FTCU_Pneumatik. + * + * All signal values are as on the CAN bus. + */ +struct can1_ftcu_pneumatik_t { + /** + * Range: 0..4095 (0..40.95 -) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_tank_pressure_1; + + /** + * Range: 0..40950 (0..409.5 -) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_tank_pressure_2; +}; + +/** + * Signals in message ACU_TX_Commands. + * + * All signal values are as on the CAN bus. + */ +struct can1_acu_tx_commands_t { + /** + * Range: 0..255 (0..51 -) + * Scale: 0.2 + * Offset: 0 + */ + uint8_t abx_speed_fl; + + /** + * Range: 0..255 (0..51 -) + * Scale: 0.2 + * Offset: 0 + */ + uint8_t abx_speed_fr; + + /** + * Range: 0..255 (0..51 -) + * Scale: 0.2 + * Offset: 0 + */ + uint8_t abx_speed_rl; + + /** + * Range: 0..255 (0..51 -) + * Scale: 0.2 + * Offset: 0 + */ + uint8_t abx_speed_rr; + + /** + * Range: -128..127 (-2.00784..1.99216 -) + * Scale: 0.0156863 + * Offset: 0 + */ + int8_t abx_steering_angle_left; + + /** + * Range: -128..127 (-2.00784..1.99216 -) + * Scale: 0.0156863 + * Offset: 0 + */ + int8_t abx_steering_angle_right; +}; + +/** + * Signals in message ACU_RX_Commands. + * + * All signal values are as on the CAN bus. + */ +struct can1_acu_rx_commands_t { + /** + * Range: 0..255 (0..306 -) + * Scale: 1.2 + * Offset: 0 + */ + uint8_t acu_speed_target_left; + + /** + * Range: 0..255 (0..306 m/s) + * Scale: 1.2 + * Offset: 0 + */ + uint8_t acu_speed_target_right; + + /** + * Range: -128..127 (-2.048..2.032 -) + * Scale: 0.016 + * Offset: 0 + */ + int8_t acu_steering_angle_right; + + /** + * Range: -128..127 (-2.048..2.032 -) + * Scale: 0.016 + * Offset: 0 + */ + int8_t acu_steering_angle_left; +}; + +/** + * Signals in message ACU_RX. + * + * Cycle Time: 100ms + * + * All signal values are as on the CAN bus. + */ +struct can1_acu_rx_t { + /** + * Range: 0..1 (0..1 Bool) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_as_mission_complete; + + /** + * Range: 0..1 (0..1 Bool) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_as_ok; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_drs; + + /** + * Range: 0..15 (0..15 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_lap_count; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_cones_all; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_cones_actual; +}; + +/** + * Signals in message AMS_Slave0_Log0. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave0_log0_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v0; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v1; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v2; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v3; +}; + +/** + * Signals in message AMS_Slave0_Log1. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave0_log1_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v4; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v5; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v6; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v7; +}; + +/** + * Signals in message AMS_Slave0_Log3. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave0_log3_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v12; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v13; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v14; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v15; +}; + +/** + * Signals in message AMS_Slave0_Log4. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave0_log4_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint32_t ams_slave_id_failed_sensors; +}; + +/** + * Signals in message AMS_Slave0_Log5. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave0_log5_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t0; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t1; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t2; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t3; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t4; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t5; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t6; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t7; +}; + +/** + * Signals in message AMS_Slave0_Log6. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave0_log6_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t8; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t9; +}; + +/** + * Signals in message ACU_TX. + * + * Cycle Time: 50ms + * + * All signal values are as on the CAN bus. + */ +struct can1_acu_tx_t { + /** + * AS Mission Selection + * + * Range: 0..7 (0..7 int) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_as_mission; + + /** + * Range: 0..5 (0..5 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_as_state; + + /** + * Range: 0..1 (0..1 bool) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_power_off; + + /** + * Range: 0..1 (0..1 bool) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_reset; + + /** + * Range: 0..1 (0..1 bool) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_allow_torque; + + /** + * Range: 0..15 (0..15 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t abx_con_mon_error; +}; + +/** + * Signals in message AMS_Slave5Status. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave5_status_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_error; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_id; + + /** + * Range: 0..1 (0..1 %) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_temp_sensor; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_min_cell_volt; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_max_cell_volt; + + /** + * Range: 0..16 (0..1 degC) + * Scale: 0.0625 + * Offset: 0 + */ + int16_t ams_slave_status_max_temp; +}; + +/** + * Signals in message AMS_Slave4Status. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave4_status_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_error; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_id; + + /** + * Range: 0..1 (0..1 %) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_temp_sensor; + + /** + * Range: 0..1000 (0..1 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_min_cell_volt; + + /** + * Range: 0..1000 (0..1 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_max_cell_volt; + + /** + * Range: 0..16 (0..1 degC) + * Scale: 0.0625 + * Offset: 0 + */ + int16_t ams_slave_status_max_temp; +}; + +/** + * Signals in message AMS_Slave3Status. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave3_status_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_error; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_id; + + /** + * Range: 0..1 (0..1 %) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_temp_sensor; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_min_cell_volt; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_max_cell_volt; + + /** + * Range: 0..16 (0..1 degC) + * Scale: 0.0625 + * Offset: 0 + */ + int16_t ams_slave_status_max_temp; +}; + +/** + * Signals in message AMS_Slave2Status. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave2_status_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_error; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_id; + + /** + * Range: 0..1 (0..1 %) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_temp_sensor; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_min_cell_volt; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_max_cell_volt; + + /** + * Range: 0..16 (0..1 degC) + * Scale: 0.0625 + * Offset: 0 + */ + int16_t ams_slave_status_max_temp; +}; + +/** + * Signals in message AMS_Error. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_error_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_error_kind; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_error_arg; +}; + +/** + * Signals in message FTCU_Cooling. + * + * Cycle time: 100ms + * + * All signal values are as on the CAN bus. + */ +struct can1_ftcu_cooling_t { + /** + * Range: 0..255 (0..2.55 bar) + * Scale: 0.01 + * Offset: 0 + */ + uint8_t ftcu_water_pressure_2; + + /** + * Range: 0..255 (0..2.55 bar) + * Scale: 0.01 + * Offset: 0 + */ + uint8_t ftcu_water_pressure_1; + + /** + * Range: 0..1023 (0..102.3 Deg) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t ftcu_water_temperature_1; + + /** + * Range: 0..1023 (0..102.3 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t ftcu_water_temperature_2; + + /** + * Range: 0..1023 (0..102.3 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t ftcu_flow_rate; +}; + +/** + * Signals in message FTCU_BrakeT. + * + * Cycle time: 100ms + * + * All signal values are as on the CAN bus. + */ +struct can1_ftcu_brake_t_t { + /** + * Range: 0..65535 (0..655.35 degC) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_brake_t_fl; + + /** + * Range: 0..65535 (0..655.35 degC) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_brake_t_fr; + + /** + * Range: 0..65535 (0..655.35 degC) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_brake_t_rl; + + /** + * Range: 0..65535 (0..655.35 degC) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_brake_t_rr; +}; + +/** + * Signals in message FTCU_Wheelspeed. + * + * Cycle time: 10ms + * + * All signal values are as on the CAN bus. + */ +struct can1_ftcu_wheelspeed_t { + /** + * Range: -2048..2047 (-102.4..102.35 1/s) + * Scale: 0.05 + * Offset: 0 + */ + int16_t ftcu_wheelspeed_fl; + + /** + * Range: -2048..2047 (-102.4..102.35 1/s) + * Scale: 0.05 + * Offset: 0 + */ + int16_t ftcu_wheelspeed_fr; + + /** + * Range: -2048..2047 (-102.4..102.35 1/s) + * Scale: 0.05 + * Offset: 0 + */ + int16_t ftcu_wheelspeed_rl; + + /** + * Range: -2048..2047 (-102.4..102.35 1/s) + * Scale: 0.05 + * Offset: 0 + */ + int16_t ftcu_wheelspeed_rr; + + /** + * Range: 0..65535 (0..65535 m) + * Scale: 1 + * Offset: 0 + */ + uint16_t ftcu_distance_session; +}; + +/** + * Signals in message FTCU_Timings. + * + * Cycle time: 1s + * + * All signal values are as on the CAN bus. + */ +struct can1_ftcu_timings_t { + /** + * Range: 0..65535 (0..655.35 s) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_laptime_best; + + /** + * Range: 0..65535 (0..655.35 s) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_laptime_last; + + /** + * Range: 0..65535 (0..655.35 s) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_sectortime_best; + + /** + * Range: 0..65535 (0..655.35 s) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_sectortime_last; +}; + +/** + * Signals in message FTCU_Driver. + * + * All signal values are as on the CAN bus. + */ +struct can1_ftcu_driver_t { + /** + * Range: 0..100 (0..100 %) + * Scale: 1 + * Offset: 0 + */ + uint8_t ftcu_apps_percent; + + /** + * Range: 0..1600 (0..160 bar) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t ftcu_brake_pressure_f; + + /** + * Range: 0..1600 (0..160 bar) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t ftcu_brake_pressure_r; + + /** + * Range: -128..127 (-128..127 Deg) + * Scale: 1 + * Offset: 0 + */ + int8_t ftcu_steering_angle; + + /** + * Range: 0..255 (0..51 m/s) + * Scale: 0.2 + * Offset: 0 + */ + uint8_t ftcu_speed; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ftcu_lapcounter; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ftcu_sectorcounter; +}; + +/** + * Signals in message TTS_RR. + * + * All signal values are as on the CAN bus. + */ +struct can1_tts_rr_t { + /** + * Range: -548..3547 (-54.8..354.7 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_outer_left; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center_left; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center; + + /** + * Range: -548..3547 (-54.8..354.7 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center_right; + + /** + * Range: -548..3547 (-54.8..354.7 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_outet_right; + + /** + * Range: 0..15 (0..15 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t tts_status; +}; + +/** + * Signals in message TTS_RL. + * + * All signal values are as on the CAN bus. + */ +struct can1_tts_rl_t { + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_outer_left; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center_left; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center_right; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_outer_right; + + /** + * Range: 0..15 (0..15 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t tts_status; +}; + +/** + * Signals in message TTS_FR. + * + * All signal values are as on the CAN bus. + */ +struct can1_tts_fr_t { + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_outer_left; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center_left; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center_right; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_outer_right; + + /** + * Range: 0..15 (0..15 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t tts_status; +}; + +/** + * Signals in message TTS_FL. + * + * All signal values are as on the CAN bus. + */ +struct can1_tts_fl_t { + /** + * Range: -548..3547 (-54.8..354.7 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_outer_left; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center_left; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center_right; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_outer_right; + + /** + * Range: 0..15 (0..15 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t tts_status; +}; + +/** + * Signals in message STW_Param_Set. + * + * All signal values are as on the CAN bus. + */ +struct can1_stw_param_set_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint16_t stw_param_set; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_tc_slipref; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_tc_mumax; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_tc_i; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_plim; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_tlim; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_tc_p; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_reku; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_tc_on; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_tv_on; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_discipline; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_slim; +}; + +/** + * Signals in message AMS_Slave0Status. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave0_status_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_error; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_id; + + /** + * Range: -128..127 (-128..127 %) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_temp_sensor; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_min_cell_volt; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_max_cell_volt; + + /** + * Range: 0..16 (0..1 degC) + * Scale: 0.0625 + * Offset: 0 + */ + int16_t ams_slave_status_max_temp; +}; + +/** + * Signals in message SSU_Message. + * + * All signal values are as on the CAN bus. + */ +struct can1_ssu_message_t { + /** + * Range: -32768..32767 (-32768..32767 -) + * Scale: 1 + * Offset: 0 + */ + int16_t ssu_pressure; + + /** + * Range: -200..800 (-20..80 degC) + * Scale: 0.1 + * Offset: 0 + */ + int16_t ssu_air_temp; +}; + +/** + * Signals in message AMS_Status. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_status_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_state; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdc_closed; + + /** + * Range: 0..100 (0..100 %) + * Scale: 1 + * Offset: 0 + */ + uint8_t soc; + + /** + * Range: 0..65535 (0..65.535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t min_cell_volt; + + /** + * Range: 0..65535 (0..4095.94 degC) + * Scale: 0.0625 + * Offset: 0 + */ + uint16_t max_cell_temp; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_imd_state; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_imd_ok; +}; + +/** + * Signals in message AMS_SlavePanic. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave_panic_t { + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_panic_slave_id; + + /** + * Range: 0..72057600000000000 (0..7.20576e+16 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_panic_kind; + + /** + * Range: 0..72057600000000000 (0..7.20576e+16 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t ams_slave_panic_arg; +}; + +/** + * Signals in message AMS_In. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_in_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ts_activate; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t inverters_discharged; + + /** + * Range: 0..64 (0..64 Laps) + * Scale: 1 + * Offset: 0 + */ + uint8_t lap_number; +}; + +/** + * Signals in message Shunt_Current. + * + * All signal values are as on the CAN bus. + */ +struct can1_shunt_current_t { + /** + * Range: -2000000000..2000000000 (-2000000..2000000 A) + * Scale: 0.001 + * Offset: 0 + */ + int32_t shunt_current; +}; + +/** + * Signals in message Shunt_Voltage1. + * + * All signal values are as on the CAN bus. + */ +struct can1_shunt_voltage1_t { + /** + * Range: -2000000000..2000000000 (-2000000..2000000 V) + * Scale: 0.001 + * Offset: 0 + */ + int32_t shunt_voltage1; +}; + +/** + * Signals in message Shunt_Voltage2. + * + * All signal values are as on the CAN bus. + */ +struct can1_shunt_voltage2_t { + /** + * Range: -2000000000..2000000000 (-2000000..2000000 V) + * Scale: 0.001 + * Offset: 0 + */ + int32_t shunt_voltage2; +}; + +/** + * Signals in message Shunt_Voltage3. + * + * All signal values are as on the CAN bus. + */ +struct can1_shunt_voltage3_t { + /** + * Range: -2000000000..2000000000 (-2000000..2000000 V) + * Scale: 0.001 + * Offset: 0 + */ + int32_t shunt_voltage3; +}; + +/** + * Signals in message Shunt_Temperature. + * + * All signal values are as on the CAN bus. + */ +struct can1_shunt_temperature_t { + /** + * Range: 0..10000 (0..1000 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint32_t shunt_temperature; +}; + +/** + * Signals in message PDU_Command. + * + * All signal values are as on the CAN bus. + */ +struct can1_pdu_command_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_misc; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_sdc; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_inverter; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_ts_cooling; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_acc_cooling; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_lldar; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_drs; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_epsc; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_acu; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_ebs_a; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_ebs_b; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_ebs_c; +}; + +/** + * Signals in message PDU_Response. + * + * All signal values are as on the CAN bus. + */ +struct can1_pdu_response_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_alwayson_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_shutdown_circuit_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_lidar_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_acu_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_servos_regler_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_inverter_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_misc_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_servo_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_ebs_valve_1_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_ebs_valve_2_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_cs_valve_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_aggregat_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_steering_tx; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_pwm_tsac_fans; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_pwm_radiatot_fans_tx; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_pwm_aggregat; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_pwm_pump; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_heartbeat_ok_tx; +}; + +/** + * Signals in message AS_Mission_fb. + * + * All signal values are as on the CAN bus. + */ +struct can1_as_mission_fb_t { + /** + * Range: 1..7 (1..7 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t mission_selection; +}; + +/** + * Signals in message STW_mission_selected. + * + * All signal values are as on the CAN bus. + */ +struct can1_stw_mission_selected_t { + /** + * Range: 1..7 (1..7 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t mission_selection; +}; + +/** + * Signals in message EPSC_out. + * + * All signal values are as on the CAN bus. + */ +struct can1_epsc_out_t { + /** + * Range: -32768..32767 (-3276.8..3276.7 rpm) + * Scale: 0.1 + * Offset: 0 + */ + int16_t epsc_measured_rpm; + + /** + * Range: 0..36000 (0..360 deg) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t epsc_measured_steering_angle; + + /** + * Range: 0..1023 (0..102.3 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t epsc_measured_mosfet_temperature; + + /** + * Range: 0..1023 (0..102.3 V) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t epsc_measured_voltage; + + /** + * Range: 0..255 (0..25.5 A) + * Scale: 0.1 + * Offset: 0 + */ + uint8_t epsc_measured_current; +}; + +/** + * Signals in message EPSC_Steering_In. + * + * All signal values are as on the CAN bus. + */ +struct can1_epsc_steering_in_t { + /** + * Range: 0..0 (-0.0512..0.0511 -) + * Scale: 1 + * Offset: 0 + */ + int16_t epsc_desired_steering_angle; +}; + +/** + * Signals in message STW_buttons. + * + * All signal values are as on the CAN bus. + */ +struct can1_stw_buttons_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t stw_button_drs; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t stw_button_1; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t stw_button_2; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t stw_button_3; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t stw_button_4; +}; + +/** + * Signals in message STW_status. + * + * All signal values are as on the CAN bus. + */ +struct can1_stw_status_t { + /** + * Range: 0..64 (0..64 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t lap_count; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_pdu; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_res; + + /** + * Range: 0..15 (0..15 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t r2_d_progress; + + /** + * Range: 0..5 (0..5 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t as_state_stw; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_as; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_app_sp; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_s_bspd; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_scs; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_con_mon; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_ini_chk; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_inv2; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_inv1; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_ams; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_sdc; + + /** + * Range: 0..15 (0..15 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdc_status; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t inv2_ready; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t inv1_ready; + + /** + * Range: 0..65535 (0..65.535 kWh) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t energy_per_lap; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ini_chk_state; +}; + +/** + * Signals in message PDU_Current_1. + * + * All signal values are as on the CAN bus. + */ +struct can1_pdu_current_1_t { + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_always_on_current; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_lvms_current; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_asms_current; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_misc_current; +}; + +/** + * Signals in message PDU_Current_2. + * + * All signal values are as on the CAN bus. + */ +struct can1_pdu_current_2_t { + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_sdc_current; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_inverter_current; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_ts_cooling_current; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_acc_cooling_current; +}; + +/** + * Signals in message PDU_Current_3. + * + * All signal values are as on the CAN bus. + */ +struct can1_pdu_current_3_t { + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_lidar_current; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_drs_current; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_epsc_current; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_acu_current; +}; + +/** + * Signals in message PDU_Current_4. + * + * All signal values are as on the CAN bus. + */ +struct can1_pdu_current_4_t { + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_ebs_a_current; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_ebs_b_current; +}; + +/** + * Signals in message EPSC_Config_In. + * + * All signal values are as on the CAN bus. + */ +struct can1_epsc_config_in_t { + /** + * Range: 0..65535 (0..655.35 -) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t epsc_config_p_gain; + + /** + * Range: 0..65535 (0..655.35 -) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t epsc_config_i_gain; + + /** + * Range: 0..65535 (0..655.35 -) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t epsc_config_d_gain; +}; + +/** + * Pack message Inverter_Velocity. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_inverter_velocity_pack( + uint8_t *dst_p, + const struct can1_inverter_velocity_t *src_p, + size_t size); + +/** + * Unpack message Inverter_Velocity. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_inverter_velocity_unpack( + struct can1_inverter_velocity_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Inverter_Velocity. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_inverter_velocity_init(struct can1_inverter_velocity_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int32_t can1_inverter_velocity_inverter_1_velocity_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_velocity_inverter_1_velocity_decode(int32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_velocity_inverter_1_velocity_is_in_range(int32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int32_t can1_inverter_velocity_inverter_2_velocity_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_velocity_inverter_2_velocity_decode(int32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_velocity_inverter_2_velocity_is_in_range(int32_t value); + +/** + * Pack message Inverter_Errors_Warnings. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_inverter_errors_warnings_pack( + uint8_t *dst_p, + const struct can1_inverter_errors_warnings_t *src_p, + size_t size); + +/** + * Unpack message Inverter_Errors_Warnings. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_inverter_errors_warnings_unpack( + struct can1_inverter_errors_warnings_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Inverter_Errors_Warnings. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_inverter_errors_warnings_init(struct can1_inverter_errors_warnings_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_inverter_errors_warnings_inverter_1_errors_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_errors_warnings_inverter_1_errors_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_errors_warnings_inverter_1_errors_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_inverter_errors_warnings_inverter_1_warnings_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_errors_warnings_inverter_1_warnings_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_errors_warnings_inverter_1_warnings_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_inverter_errors_warnings_inverter_2_errors_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_errors_warnings_inverter_2_errors_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_errors_warnings_inverter_2_errors_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_inverter_errors_warnings_inverter_2_warnings_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_errors_warnings_inverter_2_warnings_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_errors_warnings_inverter_2_warnings_is_in_range(uint16_t value); + +/** + * Pack message Inverter_Torque_Actual_CW. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_inverter_torque_actual_cw_pack( + uint8_t *dst_p, + const struct can1_inverter_torque_actual_cw_t *src_p, + size_t size); + +/** + * Unpack message Inverter_Torque_Actual_CW. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_inverter_torque_actual_cw_unpack( + struct can1_inverter_torque_actual_cw_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Inverter_Torque_Actual_CW. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_inverter_torque_actual_cw_init(struct can1_inverter_torque_actual_cw_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_inverter_torque_actual_cw_inverter_1_control_word_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_torque_actual_cw_inverter_1_control_word_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_torque_actual_cw_inverter_1_control_word_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_inverter_torque_actual_cw_inverter_1_torque_actual_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_torque_actual_cw_inverter_1_torque_actual_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_torque_actual_cw_inverter_1_torque_actual_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_inverter_torque_actual_cw_inverter_2_control_word_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_torque_actual_cw_inverter_2_control_word_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_torque_actual_cw_inverter_2_control_word_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_inverter_torque_actual_cw_inverter_2_torque_actual_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_torque_actual_cw_inverter_2_torque_actual_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_torque_actual_cw_inverter_2_torque_actual_is_in_range(int16_t value); + +/** + * Pack message Inverter_Temperatur. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_inverter_temperatur_pack( + uint8_t *dst_p, + const struct can1_inverter_temperatur_t *src_p, + size_t size); + +/** + * Unpack message Inverter_Temperatur. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_inverter_temperatur_unpack( + struct can1_inverter_temperatur_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Inverter_Temperatur. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_inverter_temperatur_init(struct can1_inverter_temperatur_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_inverter_temperatur_inverter_1_temp_inv_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_temperatur_inverter_1_temp_inv_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_temperatur_inverter_1_temp_inv_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_inverter_temperatur_inverter_1_temp_mot_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_temperatur_inverter_1_temp_mot_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_temperatur_inverter_1_temp_mot_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_inverter_temperatur_inverter_2_temp_inv_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_temperatur_inverter_2_temp_inv_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_temperatur_inverter_2_temp_inv_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_inverter_temperatur_inverter_2_temp_mot_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_temperatur_inverter_2_temp_mot_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_temperatur_inverter_2_temp_mot_is_in_range(int16_t value); + +/** + * Pack message Inverter_Torque_wanted. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_inverter_torque_wanted_pack( + uint8_t *dst_p, + const struct can1_inverter_torque_wanted_t *src_p, + size_t size); + +/** + * Unpack message Inverter_Torque_wanted. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_inverter_torque_wanted_unpack( + struct can1_inverter_torque_wanted_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Inverter_Torque_wanted. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_inverter_torque_wanted_init(struct can1_inverter_torque_wanted_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_inverter_torque_wanted_inverter_1_torque_demanded_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_torque_wanted_inverter_1_torque_demanded_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_torque_wanted_inverter_1_torque_demanded_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_inverter_torque_wanted_inverter_2_torque_demanded_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_torque_wanted_inverter_2_torque_demanded_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_torque_wanted_inverter_2_torque_demanded_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_inverter_torque_wanted_inverter_1_torque_desired_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_torque_wanted_inverter_1_torque_desired_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_torque_wanted_inverter_1_torque_desired_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_inverter_torque_wanted_inverter_2_torque_desired_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_torque_wanted_inverter_2_torque_desired_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_torque_wanted_inverter_2_torque_desired_is_in_range(int16_t value); + +/** + * Pack message SDO_Telemetrie_Rx_Node1. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_sdo_telemetrie_rx_node1_pack( + uint8_t *dst_p, + const struct can1_sdo_telemetrie_rx_node1_t *src_p, + size_t size); + +/** + * Unpack message SDO_Telemetrie_Rx_Node1. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_sdo_telemetrie_rx_node1_unpack( + struct can1_sdo_telemetrie_rx_node1_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from SDO_Telemetrie_Rx_Node1. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_sdo_telemetrie_rx_node1_init(struct can1_sdo_telemetrie_rx_node1_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sdo_telemetrie_rx_node1_sdo_command_byte_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_rx_node1_sdo_command_byte_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_rx_node1_sdo_command_byte_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sdo_telemetrie_rx_node1_sdo_od_index_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_rx_node1_sdo_od_index_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_rx_node1_sdo_od_index_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sdo_telemetrie_rx_node1_sdo_od_subindex_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_rx_node1_sdo_od_subindex_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_rx_node1_sdo_od_subindex_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_sdo_telemetrie_rx_node1_sdo_data_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_rx_node1_sdo_data_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_rx_node1_sdo_data_is_in_range(uint32_t value); + +/** + * Pack message SDO_Telemetrie_Rx_Node2. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_sdo_telemetrie_rx_node2_pack( + uint8_t *dst_p, + const struct can1_sdo_telemetrie_rx_node2_t *src_p, + size_t size); + +/** + * Unpack message SDO_Telemetrie_Rx_Node2. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_sdo_telemetrie_rx_node2_unpack( + struct can1_sdo_telemetrie_rx_node2_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from SDO_Telemetrie_Rx_Node2. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_sdo_telemetrie_rx_node2_init(struct can1_sdo_telemetrie_rx_node2_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sdo_telemetrie_rx_node2_sdo_command_byte_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_rx_node2_sdo_command_byte_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_rx_node2_sdo_command_byte_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sdo_telemetrie_rx_node2_sdo_od_index_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_rx_node2_sdo_od_index_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_rx_node2_sdo_od_index_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sdo_telemetrie_rx_node2_sdo_od_subindex_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_rx_node2_sdo_od_subindex_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_rx_node2_sdo_od_subindex_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_sdo_telemetrie_rx_node2_sdo_data_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_rx_node2_sdo_data_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_rx_node2_sdo_data_is_in_range(uint32_t value); + +/** + * Pack message SDO_Telemetrie_Tx. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_sdo_telemetrie_tx_pack( + uint8_t *dst_p, + const struct can1_sdo_telemetrie_tx_t *src_p, + size_t size); + +/** + * Unpack message SDO_Telemetrie_Tx. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_sdo_telemetrie_tx_unpack( + struct can1_sdo_telemetrie_tx_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from SDO_Telemetrie_Tx. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_sdo_telemetrie_tx_init(struct can1_sdo_telemetrie_tx_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sdo_telemetrie_tx_sdo_command_byte_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_tx_sdo_command_byte_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_tx_sdo_command_byte_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sdo_telemetrie_tx_sdo_od_index_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_tx_sdo_od_index_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_tx_sdo_od_index_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sdo_telemetrie_tx_sdo_od_subindex_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_tx_sdo_od_subindex_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_tx_sdo_od_subindex_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_sdo_telemetrie_tx_sdo_data_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_tx_sdo_data_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_tx_sdo_data_is_in_range(uint32_t value); + +/** + * Pack message Laptop_SDO_Node. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_laptop_sdo_node_pack( + uint8_t *dst_p, + const struct can1_laptop_sdo_node_t *src_p, + size_t size); + +/** + * Unpack message Laptop_SDO_Node. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_laptop_sdo_node_unpack( + struct can1_laptop_sdo_node_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Laptop_SDO_Node. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_laptop_sdo_node_init(struct can1_laptop_sdo_node_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_laptop_sdo_node_node_id_sdo_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_laptop_sdo_node_node_id_sdo_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_laptop_sdo_node_node_id_sdo_is_in_range(uint8_t value); + +/** + * Pack message XSens_LongLat. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_x_sens_long_lat_pack( + uint8_t *dst_p, + const struct can1_x_sens_long_lat_t *src_p, + size_t size); + +/** + * Unpack message XSens_LongLat. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_x_sens_long_lat_unpack( + struct can1_x_sens_long_lat_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from XSens_LongLat. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_x_sens_long_lat_init(struct can1_x_sens_long_lat_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int32_t can1_x_sens_long_lat_x_sens_latitude_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_long_lat_x_sens_latitude_decode(int32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_long_lat_x_sens_latitude_is_in_range(int32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int32_t can1_x_sens_long_lat_x_sens_longitude_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_long_lat_x_sens_longitude_decode(int32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_long_lat_x_sens_longitude_is_in_range(int32_t value); + +/** + * Pack message XSens_rateofturn. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_x_sens_rateofturn_pack( + uint8_t *dst_p, + const struct can1_x_sens_rateofturn_t *src_p, + size_t size); + +/** + * Unpack message XSens_rateofturn. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_x_sens_rateofturn_unpack( + struct can1_x_sens_rateofturn_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from XSens_rateofturn. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_x_sens_rateofturn_init(struct can1_x_sens_rateofturn_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_x_sens_rateofturn_x_sens_gyr_x_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_rateofturn_x_sens_gyr_x_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_rateofturn_x_sens_gyr_x_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_x_sens_rateofturn_x_sens_gy_y_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_rateofturn_x_sens_gy_y_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_rateofturn_x_sens_gy_y_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_x_sens_rateofturn_x_sens_gy_z_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_rateofturn_x_sens_gy_z_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_rateofturn_x_sens_gy_z_is_in_range(int16_t value); + +/** + * Pack message XSens_Acceleration. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_x_sens_acceleration_pack( + uint8_t *dst_p, + const struct can1_x_sens_acceleration_t *src_p, + size_t size); + +/** + * Unpack message XSens_Acceleration. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_x_sens_acceleration_unpack( + struct can1_x_sens_acceleration_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from XSens_Acceleration. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_x_sens_acceleration_init(struct can1_x_sens_acceleration_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_x_sens_acceleration_x_sens_acc_x_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_acceleration_x_sens_acc_x_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_acceleration_x_sens_acc_x_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_x_sens_acceleration_x_sens_acc_y_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_acceleration_x_sens_acc_y_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_acceleration_x_sens_acc_y_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_x_sens_acceleration_x_sens_acc_z_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_acceleration_x_sens_acc_z_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_acceleration_x_sens_acc_z_is_in_range(int16_t value); + +/** + * Pack message XSens_Velocity. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_x_sens_velocity_pack( + uint8_t *dst_p, + const struct can1_x_sens_velocity_t *src_p, + size_t size); + +/** + * Unpack message XSens_Velocity. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_x_sens_velocity_unpack( + struct can1_x_sens_velocity_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from XSens_Velocity. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_x_sens_velocity_init(struct can1_x_sens_velocity_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_x_sens_velocity_x_sens_vel_x_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_velocity_x_sens_vel_x_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_velocity_x_sens_vel_x_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_x_sens_velocity_x_sens_vel_y_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_velocity_x_sens_vel_y_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_velocity_x_sens_vel_y_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_x_sens_velocity_x_sens_vel_z_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_velocity_x_sens_vel_z_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_velocity_x_sens_vel_z_is_in_range(int16_t value); + +/** + * Pack message Telemetrie. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_telemetrie_pack( + uint8_t *dst_p, + const struct can1_telemetrie_t *src_p, + size_t size); + +/** + * Unpack message Telemetrie. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_telemetrie_unpack( + struct can1_telemetrie_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Telemetrie. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_telemetrie_init(struct can1_telemetrie_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_ini_check_error_state_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_ini_check_error_state_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_ini_check_error_state_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_powermap_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_powermap_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_powermap_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_apps_ok_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_apps_ok_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_apps_ok_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_brake_ok_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_brake_ok_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_brake_ok_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_allow_torque_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_allow_torque_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_allow_torque_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_asp_ok_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_asp_ok_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_asp_ok_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_pressure_sensor_ok_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_pressure_sensor_ok_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_pressure_sensor_ok_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_torque_vectoring_on_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_torque_vectoring_on_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_torque_vectoring_on_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_reku_on_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_reku_on_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_reku_on_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_traction_control_on_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_traction_control_on_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_traction_control_on_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_ts_deactivate_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_ts_deactivate_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_ts_deactivate_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_torque_limit_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_torque_limit_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_torque_limit_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_power_limit_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_power_limit_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_power_limit_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_torque_limit_dynamisch_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_torque_limit_dynamisch_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_torque_limit_dynamisch_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_torque_ohne_limit_l_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_torque_ohne_limit_l_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_torque_ohne_limit_l_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_torque_ohne_limit_r_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_torque_ohne_limit_r_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_torque_ohne_limit_r_is_in_range(uint8_t value); + +/** + * Pack message Override_Powermap. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_override_powermap_pack( + uint8_t *dst_p, + const struct can1_override_powermap_t *src_p, + size_t size); + +/** + * Unpack message Override_Powermap. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_override_powermap_unpack( + struct can1_override_powermap_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Override_Powermap. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_override_powermap_init(struct can1_override_powermap_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_powermap_laptopp_power_map_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_powermap_laptopp_power_map_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_powermap_laptopp_power_map_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_powermap_laptop_reku_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_powermap_laptop_reku_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_powermap_laptop_reku_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_powermap_laptop_tc_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_powermap_laptop_tc_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_powermap_laptop_tc_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_powermap_laptop_tv_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_powermap_laptop_tv_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_powermap_laptop_tv_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_powermap_laptop_slipref_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_powermap_laptop_slipref_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_powermap_laptop_slipref_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_override_powermap_laptop_tc_i_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_powermap_laptop_tc_i_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_powermap_laptop_tc_i_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_override_powermap_laptop_tc_p_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_powermap_laptop_tc_p_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_powermap_laptop_tc_p_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_powermap_laptop_tc_mumax_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_powermap_laptop_tc_mumax_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_powermap_laptop_tc_mumax_is_in_range(uint8_t value); + +/** + * Pack message Override_Laptop_2. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_override_laptop_2_pack( + uint8_t *dst_p, + const struct can1_override_laptop_2_t *src_p, + size_t size); + +/** + * Unpack message Override_Laptop_2. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_override_laptop_2_unpack( + struct can1_override_laptop_2_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Override_Laptop_2. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_override_laptop_2_init(struct can1_override_laptop_2_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_2_as_mission_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_2_as_mission_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_2_as_mission_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_2_as_state_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_2_as_state_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_2_as_state_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_override_laptop_2_manual_input_torque_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_2_manual_input_torque_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_2_manual_input_torque_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_2_laptop_powerlimit_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_2_laptop_powerlimit_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_2_laptop_powerlimit_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_2_laptop_torque_lim_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_2_laptop_torque_lim_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_2_laptop_torque_lim_is_in_range(uint8_t value); + +/** + * Pack message Override_EPSC_Cooling. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_override_epsc_cooling_pack( + uint8_t *dst_p, + const struct can1_override_epsc_cooling_t *src_p, + size_t size); + +/** + * Unpack message Override_EPSC_Cooling. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_override_epsc_cooling_unpack( + struct can1_override_epsc_cooling_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Override_EPSC_Cooling. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_override_epsc_cooling_init(struct can1_override_epsc_cooling_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_override_epsc_cooling_epsc_manual_angle_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_epsc_cooling_epsc_manual_angle_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_epsc_cooling_epsc_manual_angle_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_epsc_cooling_epsc_mode_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_epsc_cooling_epsc_mode_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_epsc_cooling_epsc_mode_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_epsc_cooling_ac_cooling_enable_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_epsc_cooling_ac_cooling_enable_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_epsc_cooling_ac_cooling_enable_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_epsc_cooling_ts_cooling_enable_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_epsc_cooling_ts_cooling_enable_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_epsc_cooling_ts_cooling_enable_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_epsc_cooling_ac_cooling_pwm_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_epsc_cooling_ac_cooling_pwm_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_epsc_cooling_ac_cooling_pwm_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_epsc_cooling_ts_cooling_pwm_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_epsc_cooling_ts_cooling_pwm_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_epsc_cooling_ts_cooling_pwm_is_in_range(uint8_t value); + +/** + * Pack message Override_Laptop. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_override_laptop_pack( + uint8_t *dst_p, + const struct can1_override_laptop_t *src_p, + size_t size); + +/** + * Unpack message Override_Laptop. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_override_laptop_unpack( + struct can1_override_laptop_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Override_Laptop. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_override_laptop_init(struct can1_override_laptop_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_fake_r2_d_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_fake_r2_d_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_fake_r2_d_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_fake_soundbox_emergency_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_fake_soundbox_emergency_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_fake_soundbox_emergency_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_fake_soundbox_r2_d_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_fake_soundbox_r2_d_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_fake_soundbox_r2_d_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_fake_ts_active_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_fake_ts_active_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_fake_ts_active_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_apps_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_apps_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_apps_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_as_mission_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_as_mission_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_as_mission_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_as_state_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_as_state_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_as_state_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_epsc_mode_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_epsc_mode_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_epsc_mode_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_pdu_ac_cooling_enable_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_pdu_ac_cooling_enable_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_pdu_ac_cooling_enable_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_pdu_acu_enable_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_pdu_acu_enable_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_pdu_acu_enable_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_pdu_drs_enable_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_pdu_drs_enable_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_pdu_drs_enable_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_pdu_epsc_enable_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_pdu_epsc_enable_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_pdu_epsc_enable_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_pdu_heartbeat_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_pdu_heartbeat_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_pdu_heartbeat_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_pdu_lidar_enable_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_pdu_lidar_enable_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_pdu_lidar_enable_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_pdu_pn_v1_enable_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_pdu_pn_v1_enable_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_pdu_pn_v1_enable_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_pdu_pn_v2_enable_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_pdu_pn_v2_enable_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_pdu_pn_v2_enable_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_pdu_ts_cooling_enable_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_pdu_ts_cooling_enable_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_pdu_ts_cooling_enable_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_power_map_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_power_map_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_power_map_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_tc_parameter_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_tc_parameter_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_tc_parameter_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_torque_input_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_torque_input_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_torque_input_is_in_range(uint8_t value); + +/** + * Pack message APPS_Override. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_apps_override_pack( + uint8_t *dst_p, + const struct can1_apps_override_t *src_p, + size_t size); + +/** + * Unpack message APPS_Override. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_apps_override_unpack( + struct can1_apps_override_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from APPS_Override. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_apps_override_init(struct can1_apps_override_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_apps_override_apps_0_max_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_apps_override_apps_0_max_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_apps_override_apps_0_max_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_apps_override_apps_0_min_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_apps_override_apps_0_min_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_apps_override_apps_0_min_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_apps_override_apps_1_max_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_apps_override_apps_1_max_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_apps_override_apps_1_max_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_apps_override_apps_1_min_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_apps_override_apps_1_min_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_apps_override_apps_1_min_is_in_range(uint16_t value); + +/** + * Pack message FTCU_Damper. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ftcu_damper_pack( + uint8_t *dst_p, + const struct can1_ftcu_damper_t *src_p, + size_t size); + +/** + * Unpack message FTCU_Damper. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ftcu_damper_unpack( + struct can1_ftcu_damper_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from FTCU_Damper. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ftcu_damper_init(struct can1_ftcu_damper_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_damper_ftcu_damper_fl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_damper_ftcu_damper_fl_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_damper_ftcu_damper_fl_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_damper_ftcu_damper_fr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_damper_ftcu_damper_fr_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_damper_ftcu_damper_fr_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_damper_ftcu_damper_rl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_damper_ftcu_damper_rl_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_damper_ftcu_damper_rl_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_damper_ftcu_damper_rr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_damper_ftcu_damper_rr_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_damper_ftcu_damper_rr_is_in_range(uint16_t value); + +/** + * Pack message FTCU_ParamConfirm. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ftcu_param_confirm_pack( + uint8_t *dst_p, + const struct can1_ftcu_param_confirm_t *src_p, + size_t size); + +/** + * Unpack message FTCU_ParamConfirm. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ftcu_param_confirm_unpack( + struct can1_ftcu_param_confirm_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from FTCU_ParamConfirm. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ftcu_param_confirm_init(struct can1_ftcu_param_confirm_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ftcu_param_confirm_ftcu_param_confirm_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_param_confirm_ftcu_param_confirm_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_param_confirm_ftcu_param_confirm_is_in_range(uint8_t value); + +/** + * Pack message Sensornode_F_10Hz. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_sensornode_f_10_hz_pack( + uint8_t *dst_p, + const struct can1_sensornode_f_10_hz_t *src_p, + size_t size); + +/** + * Unpack message Sensornode_F_10Hz. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_sensornode_f_10_hz_unpack( + struct can1_sensornode_f_10_hz_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Sensornode_F_10Hz. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_sensornode_f_10_hz_init(struct can1_sensornode_f_10_hz_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_10_hz_ls_l_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_10_hz_ls_l_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_10_hz_ls_l_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_10_hz_ls_r_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_10_hz_ls_r_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_10_hz_ls_r_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_10_hz_sdc_m_pre_bots_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_10_hz_sdc_m_pre_bots_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_10_hz_sdc_m_pre_bots_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_10_hz_sdc_m_post_ins_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_10_hz_sdc_m_post_ins_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_10_hz_sdc_m_post_ins_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_10_hz_sdc_m_post_bspd_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_10_hz_sdc_m_post_bspd_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_10_hz_sdc_m_post_bspd_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_10_hz_bdts_fl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_10_hz_bdts_fl_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_10_hz_bdts_fl_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_10_hz_bdts_fr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_10_hz_bdts_fr_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_10_hz_bdts_fr_is_in_range(uint8_t value); + +/** + * Pack message Sensornode_F_100Hz_1. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_sensornode_f_100_hz_1_pack( + uint8_t *dst_p, + const struct can1_sensornode_f_100_hz_1_t *src_p, + size_t size); + +/** + * Unpack message Sensornode_F_100Hz_1. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_sensornode_f_100_hz_1_unpack( + struct can1_sensornode_f_100_hz_1_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Sensornode_F_100Hz_1. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_sensornode_f_100_hz_1_init(struct can1_sensornode_f_100_hz_1_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_100_hz_1_apps_1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_100_hz_1_apps_1_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_100_hz_1_apps_1_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_100_hz_1_apps_2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_100_hz_1_apps_2_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_100_hz_1_apps_2_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_100_hz_1_bp_f_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_100_hz_1_bp_f_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_100_hz_1_bp_f_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sensornode_f_100_hz_1_sas_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_100_hz_1_sas_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_100_hz_1_sas_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_100_hz_1_wss_fl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_100_hz_1_wss_fl_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_100_hz_1_wss_fl_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_100_hz_1_wss_fr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_100_hz_1_wss_fr_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_100_hz_1_wss_fr_is_in_range(uint8_t value); + +/** + * Pack message Sensornode_F_100Hz_2. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_sensornode_f_100_hz_2_pack( + uint8_t *dst_p, + const struct can1_sensornode_f_100_hz_2_t *src_p, + size_t size); + +/** + * Unpack message Sensornode_F_100Hz_2. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_sensornode_f_100_hz_2_unpack( + struct can1_sensornode_f_100_hz_2_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Sensornode_F_100Hz_2. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_sensornode_f_100_hz_2_init(struct can1_sensornode_f_100_hz_2_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sensornode_f_100_hz_2_ds_fl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_100_hz_2_ds_fl_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_100_hz_2_ds_fl_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sensornode_f_100_hz_2_ds_fr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_100_hz_2_ds_fr_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_100_hz_2_ds_fr_is_in_range(uint16_t value); + +/** + * Pack message Sensornode_F_1kHz. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_sensornode_f_1k_hz_pack( + uint8_t *dst_p, + const struct can1_sensornode_f_1k_hz_t *src_p, + size_t size); + +/** + * Unpack message Sensornode_F_1kHz. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_sensornode_f_1k_hz_unpack( + struct can1_sensornode_f_1k_hz_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Sensornode_F_1kHz. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_sensornode_f_1k_hz_init(struct can1_sensornode_f_1k_hz_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sensornode_f_1k_hz_sls_fl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_1k_hz_sls_fl_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_1k_hz_sls_fl_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sensornode_f_1k_hz_sls_fr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_1k_hz_sls_fr_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_1k_hz_sls_fr_is_in_range(uint16_t value); + +/** + * Pack message Sensornode_R_10Hz. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_sensornode_r_10_hz_pack( + uint8_t *dst_p, + const struct can1_sensornode_r_10_hz_t *src_p, + size_t size); + +/** + * Unpack message Sensornode_R_10Hz. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_sensornode_r_10_hz_unpack( + struct can1_sensornode_r_10_hz_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Sensornode_R_10Hz. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_sensornode_r_10_hz_init(struct can1_sensornode_r_10_hz_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_10_hz_ext_ts_on_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_10_hz_ext_ts_on_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_10_hz_ext_ts_on_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_10_hz_sdc_m_pre_tsms_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_10_hz_sdc_m_pre_tsms_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_10_hz_sdc_m_pre_tsms_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_10_hz_sdc_m_post_tsms_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_10_hz_sdc_m_post_tsms_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_10_hz_sdc_m_post_tsms_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_10_hz_bdts_rl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_10_hz_bdts_rl_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_10_hz_bdts_rl_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_10_hz_bdts_rr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_10_hz_bdts_rr_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_10_hz_bdts_rr_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_10_hz_wt_bat_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_10_hz_wt_bat_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_10_hz_wt_bat_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_10_hz_wt_dt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_10_hz_wt_dt_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_10_hz_wt_dt_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_10_hz_wp_bat_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_10_hz_wp_bat_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_10_hz_wp_bat_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_10_hz_wp_dt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_10_hz_wp_dt_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_10_hz_wp_dt_is_in_range(uint8_t value); + +/** + * Pack message Sensornode_R_100Hz. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_sensornode_r_100_hz_pack( + uint8_t *dst_p, + const struct can1_sensornode_r_100_hz_t *src_p, + size_t size); + +/** + * Unpack message Sensornode_R_100Hz. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_sensornode_r_100_hz_unpack( + struct can1_sensornode_r_100_hz_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Sensornode_R_100Hz. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_sensornode_r_100_hz_init(struct can1_sensornode_r_100_hz_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_100_hz_ebs_aps_1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_100_hz_ebs_aps_1_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_100_hz_ebs_aps_1_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_100_hz_ebs_aps_2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_100_hz_ebs_aps_2_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_100_hz_ebs_aps_2_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_100_hz_bp_r_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_100_hz_bp_r_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_100_hz_bp_r_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_100_hz_wss_rl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_100_hz_wss_rl_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_100_hz_wss_rl_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_100_hz_wss_rr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_100_hz_wss_rr_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_100_hz_wss_rr_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sensornode_r_100_hz_ds_rl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_100_hz_ds_rl_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_100_hz_ds_rl_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sensornode_r_100_hz_ds_rr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_100_hz_ds_rr_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_100_hz_ds_rr_is_in_range(uint16_t value); + +/** + * Pack message Sensornode_R_1kHz. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_sensornode_r_1k_hz_pack( + uint8_t *dst_p, + const struct can1_sensornode_r_1k_hz_t *src_p, + size_t size); + +/** + * Unpack message Sensornode_R_1kHz. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_sensornode_r_1k_hz_unpack( + struct can1_sensornode_r_1k_hz_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Sensornode_R_1kHz. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_sensornode_r_1k_hz_init(struct can1_sensornode_r_1k_hz_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sensornode_r_1k_hz_sls_rl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_1k_hz_sls_rl_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_1k_hz_sls_rl_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sensornode_r_1k_hz_sls_rr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_1k_hz_sls_rr_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_1k_hz_sls_rr_is_in_range(uint16_t value); + +/** + * Pack message PWM_DutyCycle. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_pwm_duty_cycle_pack( + uint8_t *dst_p, + const struct can1_pwm_duty_cycle_t *src_p, + size_t size); + +/** + * Unpack message PWM_DutyCycle. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_pwm_duty_cycle_unpack( + struct can1_pwm_duty_cycle_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from PWM_DutyCycle. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_pwm_duty_cycle_init(struct can1_pwm_duty_cycle_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pwm_duty_cycle_dc_drs_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pwm_duty_cycle_dc_drs_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pwm_duty_cycle_dc_drs_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pwm_duty_cycle_dc_assi_y_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pwm_duty_cycle_dc_assi_y_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pwm_duty_cycle_dc_assi_y_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pwm_duty_cycle_dc_assi_b_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pwm_duty_cycle_dc_assi_b_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pwm_duty_cycle_dc_assi_b_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pwm_duty_cycle_dc_bl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pwm_duty_cycle_dc_bl_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pwm_duty_cycle_dc_bl_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pwm_duty_cycle_dc_fans_dt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pwm_duty_cycle_dc_fans_dt_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pwm_duty_cycle_dc_fans_dt_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pwm_duty_cycle_dc_fans_bat_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pwm_duty_cycle_dc_fans_bat_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pwm_duty_cycle_dc_fans_bat_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pwm_duty_cycle_dc_sbx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pwm_duty_cycle_dc_sbx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pwm_duty_cycle_dc_sbx_is_in_range(uint8_t value); + +/** + * Pack message PWM_Config. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_pwm_config_pack( + uint8_t *dst_p, + const struct can1_pwm_config_t *src_p, + size_t size); + +/** + * Unpack message PWM_Config. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_pwm_config_unpack( + struct can1_pwm_config_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from PWM_Config. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_pwm_config_init(struct can1_pwm_config_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pwm_config_freq_pwm1_drs_lighting_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pwm_config_freq_pwm1_drs_lighting_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pwm_config_freq_pwm1_drs_lighting_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pwm_config_freq_pwm3_fans_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pwm_config_freq_pwm3_fans_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pwm_config_freq_pwm3_fans_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pwm_config_freq_pwm2_sbx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pwm_config_freq_pwm2_sbx_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pwm_config_freq_pwm2_sbx_is_in_range(uint16_t value); + +/** + * Pack message Dashboard_In. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_dashboard_in_pack( + uint8_t *dst_p, + const struct can1_dashboard_in_t *src_p, + size_t size); + +/** + * Unpack message Dashboard_In. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_dashboard_in_unpack( + struct can1_dashboard_in_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Dashboard_In. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_dashboard_in_init(struct can1_dashboard_in_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_dashboard_in_dashboard_r2_d_button_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_dashboard_in_dashboard_r2_d_button_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_dashboard_in_dashboard_r2_d_button_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_dashboard_in_dashboard_ts_activate_button_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_dashboard_in_dashboard_ts_activate_button_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_dashboard_in_dashboard_ts_activate_button_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_dashboard_in_dashboard_race_key_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_dashboard_in_dashboard_race_key_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_dashboard_in_dashboard_race_key_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_dashboard_in_dashboard_sdc_in_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_dashboard_in_dashboard_sdc_in_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_dashboard_in_dashboard_sdc_in_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_dashboard_in_dashboard_sdc_out_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_dashboard_in_dashboard_sdc_out_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_dashboard_in_dashboard_sdc_out_is_in_range(uint8_t value); + +/** + * Pack message AMS_Slave1Status. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave1_status_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_status_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave1Status. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave1_status_unpack( + struct can1_ams_slave1_status_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave1Status. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave1_status_init(struct can1_ams_slave1_status_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave1_status_ams_slave_status_error_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_status_ams_slave_status_error_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_status_ams_slave_status_error_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave1_status_ams_slave_status_id_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_status_ams_slave_status_id_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_status_ams_slave_status_id_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave1_status_ams_slave_status_temp_sensor_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_status_ams_slave_status_temp_sensor_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_status_ams_slave_status_temp_sensor_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_status_ams_slave_status_min_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_status_ams_slave_status_min_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_status_ams_slave_status_min_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_status_ams_slave_status_max_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_status_ams_slave_status_max_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_status_ams_slave_status_max_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ams_slave1_status_ams_slave_status_max_temp_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_status_ams_slave_status_max_temp_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_status_ams_slave_status_max_temp_is_in_range(int16_t value); + +/** + * Pack message AMS_Slave2_Log0. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave2_log0_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log0_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave2_Log0. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave2_log0_unpack( + struct can1_ams_slave2_log0_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave2_Log0. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave2_log0_init(struct can1_ams_slave2_log0_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log0_ams_slave_id_v0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log0_ams_slave_id_v0_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log0_ams_slave_id_v0_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log0_ams_slave_id_v1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log0_ams_slave_id_v1_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log0_ams_slave_id_v1_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log0_ams_slave_id_v2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log0_ams_slave_id_v2_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log0_ams_slave_id_v2_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log0_ams_slave_id_v3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log0_ams_slave_id_v3_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log0_ams_slave_id_v3_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave2_Log1. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave2_log1_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log1_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave2_Log1. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave2_log1_unpack( + struct can1_ams_slave2_log1_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave2_Log1. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave2_log1_init(struct can1_ams_slave2_log1_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log1_ams_slave_id_v4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log1_ams_slave_id_v4_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log1_ams_slave_id_v4_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log1_ams_slave_id_v5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log1_ams_slave_id_v5_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log1_ams_slave_id_v5_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log1_ams_slave_id_v6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log1_ams_slave_id_v6_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log1_ams_slave_id_v6_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log1_ams_slave_id_v7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log1_ams_slave_id_v7_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log1_ams_slave_id_v7_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave2_Log2. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave2_log2_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log2_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave2_Log2. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave2_log2_unpack( + struct can1_ams_slave2_log2_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave2_Log2. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave2_log2_init(struct can1_ams_slave2_log2_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log2_ams_slave_id_v8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log2_ams_slave_id_v8_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log2_ams_slave_id_v8_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log2_ams_slave_id_v9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log2_ams_slave_id_v9_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log2_ams_slave_id_v9_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log2_ams_slave_id_v10_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log2_ams_slave_id_v10_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log2_ams_slave_id_v10_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log2_ams_slave_id_v11_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log2_ams_slave_id_v11_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log2_ams_slave_id_v11_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave2_Log3. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave2_log3_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log3_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave2_Log3. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave2_log3_unpack( + struct can1_ams_slave2_log3_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave2_Log3. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave2_log3_init(struct can1_ams_slave2_log3_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log3_ams_slave_id_v12_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log3_ams_slave_id_v12_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log3_ams_slave_id_v12_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log3_ams_slave_id_v13_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log3_ams_slave_id_v13_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log3_ams_slave_id_v13_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log3_ams_slave_id_v14_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log3_ams_slave_id_v14_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log3_ams_slave_id_v14_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log3_ams_slave_id_v15_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log3_ams_slave_id_v15_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log3_ams_slave_id_v15_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave2_Log4. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave2_log4_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log4_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave2_Log4. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave2_log4_unpack( + struct can1_ams_slave2_log4_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave2_Log4. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave2_log4_init(struct can1_ams_slave2_log4_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_ams_slave2_log4_ams_slave_id_failed_sensors_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log4_ams_slave_id_failed_sensors_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log4_ams_slave_id_failed_sensors_is_in_range(uint32_t value); + +/** + * Pack message AMS_Slave2_Log5. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave2_log5_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log5_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave2_Log5. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave2_log5_unpack( + struct can1_ams_slave2_log5_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave2_Log5. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave2_log5_init(struct can1_ams_slave2_log5_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave2_log5_ams_slave_id_t0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log5_ams_slave_id_t0_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log5_ams_slave_id_t0_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave2_log5_ams_slave_id_t1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log5_ams_slave_id_t1_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log5_ams_slave_id_t1_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave2_log5_ams_slave_id_t2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log5_ams_slave_id_t2_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log5_ams_slave_id_t2_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave2_log5_ams_slave_id_t3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log5_ams_slave_id_t3_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log5_ams_slave_id_t3_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave2_log5_ams_slave_id_t4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log5_ams_slave_id_t4_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log5_ams_slave_id_t4_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave2_log5_ams_slave_id_t5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log5_ams_slave_id_t5_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log5_ams_slave_id_t5_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave2_log5_ams_slave_id_t6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log5_ams_slave_id_t6_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log5_ams_slave_id_t6_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave2_log5_ams_slave_id_t7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log5_ams_slave_id_t7_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log5_ams_slave_id_t7_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave5_Log6. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave5_log6_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log6_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave5_Log6. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave5_log6_unpack( + struct can1_ams_slave5_log6_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave5_Log6. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave5_log6_init(struct can1_ams_slave5_log6_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave5_log6_ams_slave_id_t8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log6_ams_slave_id_t8_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log6_ams_slave_id_t8_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave5_log6_ams_slave_id_t9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log6_ams_slave_id_t9_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log6_ams_slave_id_t9_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave4_Log6. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave4_log6_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log6_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave4_Log6. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave4_log6_unpack( + struct can1_ams_slave4_log6_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave4_Log6. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave4_log6_init(struct can1_ams_slave4_log6_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave4_log6_ams_slave_id_t8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log6_ams_slave_id_t8_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log6_ams_slave_id_t8_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave4_log6_ams_slave_id_t9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log6_ams_slave_id_t9_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log6_ams_slave_id_t9_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave3_Log6. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave3_log6_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log6_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave3_Log6. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave3_log6_unpack( + struct can1_ams_slave3_log6_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave3_Log6. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave3_log6_init(struct can1_ams_slave3_log6_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave3_log6_ams_slave_id_t8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log6_ams_slave_id_t8_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log6_ams_slave_id_t8_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave3_log6_ams_slave_id_t9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log6_ams_slave_id_t9_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log6_ams_slave_id_t9_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave2_Log6. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave2_log6_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log6_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave2_Log6. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave2_log6_unpack( + struct can1_ams_slave2_log6_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave2_Log6. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave2_log6_init(struct can1_ams_slave2_log6_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave2_log6_ams_slave_id_t8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log6_ams_slave_id_t8_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log6_ams_slave_id_t8_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave2_log6_ams_slave_id_t9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log6_ams_slave_id_t9_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log6_ams_slave_id_t9_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave1_Log6. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave1_log6_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log6_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave1_Log6. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave1_log6_unpack( + struct can1_ams_slave1_log6_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave1_Log6. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave1_log6_init(struct can1_ams_slave1_log6_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave1_log6_ams_slave_id_t8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log6_ams_slave_id_t8_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log6_ams_slave_id_t8_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave1_log6_ams_slave_id_t9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log6_ams_slave_id_t9_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log6_ams_slave_id_t9_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave5_Log5. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave5_log5_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log5_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave5_Log5. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave5_log5_unpack( + struct can1_ams_slave5_log5_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave5_Log5. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave5_log5_init(struct can1_ams_slave5_log5_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave5_log5_ams_slave_id_t0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log5_ams_slave_id_t0_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log5_ams_slave_id_t0_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave5_log5_ams_slave_id_t1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log5_ams_slave_id_t1_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log5_ams_slave_id_t1_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave5_log5_ams_slave_id_t2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log5_ams_slave_id_t2_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log5_ams_slave_id_t2_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave5_log5_ams_slave_id_t3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log5_ams_slave_id_t3_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log5_ams_slave_id_t3_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave5_log5_ams_slave_id_t4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log5_ams_slave_id_t4_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log5_ams_slave_id_t4_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave5_log5_ams_slave_id_t5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log5_ams_slave_id_t5_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log5_ams_slave_id_t5_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave5_log5_ams_slave_id_t6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log5_ams_slave_id_t6_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log5_ams_slave_id_t6_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave5_log5_ams_slave_id_t7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log5_ams_slave_id_t7_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log5_ams_slave_id_t7_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave4_Log5. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave4_log5_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log5_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave4_Log5. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave4_log5_unpack( + struct can1_ams_slave4_log5_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave4_Log5. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave4_log5_init(struct can1_ams_slave4_log5_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave4_log5_ams_slave_id_t0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log5_ams_slave_id_t0_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log5_ams_slave_id_t0_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave4_log5_ams_slave_id_t1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log5_ams_slave_id_t1_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log5_ams_slave_id_t1_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave4_log5_ams_slave_id_t2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log5_ams_slave_id_t2_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log5_ams_slave_id_t2_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave4_log5_ams_slave_id_t3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log5_ams_slave_id_t3_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log5_ams_slave_id_t3_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave4_log5_ams_slave_id_t4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log5_ams_slave_id_t4_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log5_ams_slave_id_t4_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave4_log5_ams_slave_id_t5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log5_ams_slave_id_t5_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log5_ams_slave_id_t5_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave4_log5_ams_slave_id_t6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log5_ams_slave_id_t6_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log5_ams_slave_id_t6_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave4_log5_ams_slave_id_t7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log5_ams_slave_id_t7_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log5_ams_slave_id_t7_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave3_Log5. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave3_log5_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log5_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave3_Log5. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave3_log5_unpack( + struct can1_ams_slave3_log5_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave3_Log5. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave3_log5_init(struct can1_ams_slave3_log5_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave3_log5_ams_slave_id_t0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log5_ams_slave_id_t0_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log5_ams_slave_id_t0_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave3_log5_ams_slave_id_t1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log5_ams_slave_id_t1_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log5_ams_slave_id_t1_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave3_log5_ams_slave_id_t2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log5_ams_slave_id_t2_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log5_ams_slave_id_t2_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave3_log5_ams_slave_id_t3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log5_ams_slave_id_t3_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log5_ams_slave_id_t3_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave3_log5_ams_slave_id_t4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log5_ams_slave_id_t4_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log5_ams_slave_id_t4_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave3_log5_ams_slave_id_t5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log5_ams_slave_id_t5_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log5_ams_slave_id_t5_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave3_log5_ams_slave_id_t6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log5_ams_slave_id_t6_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log5_ams_slave_id_t6_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave3_log5_ams_slave_id_t7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log5_ams_slave_id_t7_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log5_ams_slave_id_t7_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave1_Log5. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave1_log5_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log5_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave1_Log5. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave1_log5_unpack( + struct can1_ams_slave1_log5_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave1_Log5. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave1_log5_init(struct can1_ams_slave1_log5_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave1_log5_ams_slave_id_t0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log5_ams_slave_id_t0_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log5_ams_slave_id_t0_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave1_log5_ams_slave_id_t1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log5_ams_slave_id_t1_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log5_ams_slave_id_t1_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave1_log5_ams_slave_id_t2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log5_ams_slave_id_t2_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log5_ams_slave_id_t2_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave1_log5_ams_slave_id_t3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log5_ams_slave_id_t3_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log5_ams_slave_id_t3_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave1_log5_ams_slave_id_t4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log5_ams_slave_id_t4_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log5_ams_slave_id_t4_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave1_log5_ams_slave_id_t5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log5_ams_slave_id_t5_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log5_ams_slave_id_t5_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave1_log5_ams_slave_id_t6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log5_ams_slave_id_t6_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log5_ams_slave_id_t6_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave1_log5_ams_slave_id_t7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log5_ams_slave_id_t7_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log5_ams_slave_id_t7_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave5_Log4. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave5_log4_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log4_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave5_Log4. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave5_log4_unpack( + struct can1_ams_slave5_log4_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave5_Log4. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave5_log4_init(struct can1_ams_slave5_log4_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_ams_slave5_log4_ams_slave_id_failed_sensors_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log4_ams_slave_id_failed_sensors_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log4_ams_slave_id_failed_sensors_is_in_range(uint32_t value); + +/** + * Pack message AMS_Slave4_Log4. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave4_log4_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log4_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave4_Log4. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave4_log4_unpack( + struct can1_ams_slave4_log4_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave4_Log4. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave4_log4_init(struct can1_ams_slave4_log4_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_ams_slave4_log4_ams_slave_id_failed_sensors_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log4_ams_slave_id_failed_sensors_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log4_ams_slave_id_failed_sensors_is_in_range(uint32_t value); + +/** + * Pack message AMS_Slave3_Log4. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave3_log4_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log4_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave3_Log4. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave3_log4_unpack( + struct can1_ams_slave3_log4_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave3_Log4. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave3_log4_init(struct can1_ams_slave3_log4_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_ams_slave3_log4_ams_slave_id_failed_sensors_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log4_ams_slave_id_failed_sensors_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log4_ams_slave_id_failed_sensors_is_in_range(uint32_t value); + +/** + * Pack message AMS_Slave1_Log4. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave1_log4_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log4_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave1_Log4. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave1_log4_unpack( + struct can1_ams_slave1_log4_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave1_Log4. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave1_log4_init(struct can1_ams_slave1_log4_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_ams_slave1_log4_ams_slave_id_failed_sensors_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log4_ams_slave_id_failed_sensors_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log4_ams_slave_id_failed_sensors_is_in_range(uint32_t value); + +/** + * Pack message AMS_Slave5_Log3. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave5_log3_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log3_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave5_Log3. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave5_log3_unpack( + struct can1_ams_slave5_log3_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave5_Log3. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave5_log3_init(struct can1_ams_slave5_log3_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log3_ams_slave_id_v12_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log3_ams_slave_id_v12_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log3_ams_slave_id_v12_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log3_ams_slave_id_v13_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log3_ams_slave_id_v13_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log3_ams_slave_id_v13_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log3_ams_slave_id_v14_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log3_ams_slave_id_v14_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log3_ams_slave_id_v14_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log3_ams_slave_id_v15_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log3_ams_slave_id_v15_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log3_ams_slave_id_v15_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave4_Log3. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave4_log3_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log3_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave4_Log3. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave4_log3_unpack( + struct can1_ams_slave4_log3_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave4_Log3. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave4_log3_init(struct can1_ams_slave4_log3_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log3_ams_slave_id_v12_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log3_ams_slave_id_v12_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log3_ams_slave_id_v12_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log3_ams_slave_id_v13_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log3_ams_slave_id_v13_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log3_ams_slave_id_v13_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log3_ams_slave_id_v14_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log3_ams_slave_id_v14_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log3_ams_slave_id_v14_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log3_ams_slave_id_v15_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log3_ams_slave_id_v15_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log3_ams_slave_id_v15_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave3_Log3. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave3_log3_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log3_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave3_Log3. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave3_log3_unpack( + struct can1_ams_slave3_log3_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave3_Log3. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave3_log3_init(struct can1_ams_slave3_log3_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log3_ams_slave_id_v12_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log3_ams_slave_id_v12_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log3_ams_slave_id_v12_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log3_ams_slave_id_v13_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log3_ams_slave_id_v13_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log3_ams_slave_id_v13_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log3_ams_slave_id_v14_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log3_ams_slave_id_v14_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log3_ams_slave_id_v14_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log3_ams_slave_id_v15_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log3_ams_slave_id_v15_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log3_ams_slave_id_v15_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave1_Log3. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave1_log3_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log3_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave1_Log3. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave1_log3_unpack( + struct can1_ams_slave1_log3_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave1_Log3. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave1_log3_init(struct can1_ams_slave1_log3_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log3_ams_slave_id_v12_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log3_ams_slave_id_v12_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log3_ams_slave_id_v12_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log3_ams_slave_id_v13_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log3_ams_slave_id_v13_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log3_ams_slave_id_v13_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log3_ams_slave_id_v14_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log3_ams_slave_id_v14_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log3_ams_slave_id_v14_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log3_ams_slave_id_v15_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log3_ams_slave_id_v15_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log3_ams_slave_id_v15_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave5_Log2. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave5_log2_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log2_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave5_Log2. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave5_log2_unpack( + struct can1_ams_slave5_log2_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave5_Log2. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave5_log2_init(struct can1_ams_slave5_log2_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log2_ams_slave_id_v8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log2_ams_slave_id_v8_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log2_ams_slave_id_v8_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log2_ams_slave_id_v9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log2_ams_slave_id_v9_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log2_ams_slave_id_v9_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log2_ams_slave_id_v10_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log2_ams_slave_id_v10_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log2_ams_slave_id_v10_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log2_ams_slave_id_v11_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log2_ams_slave_id_v11_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log2_ams_slave_id_v11_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave4_Log2. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave4_log2_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log2_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave4_Log2. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave4_log2_unpack( + struct can1_ams_slave4_log2_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave4_Log2. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave4_log2_init(struct can1_ams_slave4_log2_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log2_ams_slave_id_v8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log2_ams_slave_id_v8_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log2_ams_slave_id_v8_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log2_ams_slave_id_v9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log2_ams_slave_id_v9_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log2_ams_slave_id_v9_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log2_ams_slave_id_v10_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log2_ams_slave_id_v10_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log2_ams_slave_id_v10_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log2_ams_slave_id_v11_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log2_ams_slave_id_v11_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log2_ams_slave_id_v11_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave3_Log2. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave3_log2_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log2_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave3_Log2. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave3_log2_unpack( + struct can1_ams_slave3_log2_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave3_Log2. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave3_log2_init(struct can1_ams_slave3_log2_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log2_ams_slave_id_v8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log2_ams_slave_id_v8_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log2_ams_slave_id_v8_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log2_ams_slave_id_v9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log2_ams_slave_id_v9_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log2_ams_slave_id_v9_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log2_ams_slave_id_v10_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log2_ams_slave_id_v10_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log2_ams_slave_id_v10_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log2_ams_slave_id_v11_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log2_ams_slave_id_v11_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log2_ams_slave_id_v11_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave1_Log2. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave1_log2_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log2_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave1_Log2. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave1_log2_unpack( + struct can1_ams_slave1_log2_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave1_Log2. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave1_log2_init(struct can1_ams_slave1_log2_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log2_ams_slave_id_v8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log2_ams_slave_id_v8_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log2_ams_slave_id_v8_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log2_ams_slave_id_v9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log2_ams_slave_id_v9_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log2_ams_slave_id_v9_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log2_ams_slave_id_v10_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log2_ams_slave_id_v10_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log2_ams_slave_id_v10_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log2_ams_slave_id_v11_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log2_ams_slave_id_v11_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log2_ams_slave_id_v11_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave5_Log1. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave5_log1_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log1_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave5_Log1. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave5_log1_unpack( + struct can1_ams_slave5_log1_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave5_Log1. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave5_log1_init(struct can1_ams_slave5_log1_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log1_ams_slave_id_v4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log1_ams_slave_id_v4_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log1_ams_slave_id_v4_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log1_ams_slave_id_v5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log1_ams_slave_id_v5_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log1_ams_slave_id_v5_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log1_ams_slave_id_v6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log1_ams_slave_id_v6_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log1_ams_slave_id_v6_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log1_ams_slave_id_v7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log1_ams_slave_id_v7_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log1_ams_slave_id_v7_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave4_Log1. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave4_log1_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log1_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave4_Log1. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave4_log1_unpack( + struct can1_ams_slave4_log1_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave4_Log1. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave4_log1_init(struct can1_ams_slave4_log1_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log1_ams_slave_id_v4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log1_ams_slave_id_v4_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log1_ams_slave_id_v4_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log1_ams_slave_id_v5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log1_ams_slave_id_v5_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log1_ams_slave_id_v5_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log1_ams_slave_id_v6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log1_ams_slave_id_v6_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log1_ams_slave_id_v6_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log1_ams_slave_id_v7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log1_ams_slave_id_v7_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log1_ams_slave_id_v7_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave3_Log1. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave3_log1_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log1_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave3_Log1. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave3_log1_unpack( + struct can1_ams_slave3_log1_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave3_Log1. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave3_log1_init(struct can1_ams_slave3_log1_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log1_ams_slave_id_v4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log1_ams_slave_id_v4_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log1_ams_slave_id_v4_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log1_ams_slave_id_v5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log1_ams_slave_id_v5_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log1_ams_slave_id_v5_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log1_ams_slave_id_v6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log1_ams_slave_id_v6_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log1_ams_slave_id_v6_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log1_ams_slave_id_v7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log1_ams_slave_id_v7_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log1_ams_slave_id_v7_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave1_Log1. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave1_log1_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log1_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave1_Log1. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave1_log1_unpack( + struct can1_ams_slave1_log1_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave1_Log1. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave1_log1_init(struct can1_ams_slave1_log1_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log1_ams_slave_id_v4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log1_ams_slave_id_v4_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log1_ams_slave_id_v4_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log1_ams_slave_id_v5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log1_ams_slave_id_v5_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log1_ams_slave_id_v5_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log1_ams_slave_id_v6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log1_ams_slave_id_v6_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log1_ams_slave_id_v6_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log1_ams_slave_id_v7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log1_ams_slave_id_v7_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log1_ams_slave_id_v7_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave5_Log0. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave5_log0_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log0_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave5_Log0. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave5_log0_unpack( + struct can1_ams_slave5_log0_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave5_Log0. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave5_log0_init(struct can1_ams_slave5_log0_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log0_ams_slave_id_v0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log0_ams_slave_id_v0_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log0_ams_slave_id_v0_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log0_ams_slave_id_v1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log0_ams_slave_id_v1_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log0_ams_slave_id_v1_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log0_ams_slave_id_v2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log0_ams_slave_id_v2_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log0_ams_slave_id_v2_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log0_ams_slave_id_v3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log0_ams_slave_id_v3_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log0_ams_slave_id_v3_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave4_Log0. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave4_log0_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log0_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave4_Log0. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave4_log0_unpack( + struct can1_ams_slave4_log0_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave4_Log0. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave4_log0_init(struct can1_ams_slave4_log0_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log0_ams_slave_id_v0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log0_ams_slave_id_v0_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log0_ams_slave_id_v0_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log0_ams_slave_id_v1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log0_ams_slave_id_v1_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log0_ams_slave_id_v1_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log0_ams_slave_id_v2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log0_ams_slave_id_v2_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log0_ams_slave_id_v2_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log0_ams_slave_id_v3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log0_ams_slave_id_v3_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log0_ams_slave_id_v3_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave3_Log0. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave3_log0_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log0_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave3_Log0. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave3_log0_unpack( + struct can1_ams_slave3_log0_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave3_Log0. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave3_log0_init(struct can1_ams_slave3_log0_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log0_ams_slave_id_v0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log0_ams_slave_id_v0_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log0_ams_slave_id_v0_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log0_ams_slave_id_v1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log0_ams_slave_id_v1_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log0_ams_slave_id_v1_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log0_ams_slave_id_v2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log0_ams_slave_id_v2_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log0_ams_slave_id_v2_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log0_ams_slave_id_v3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log0_ams_slave_id_v3_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log0_ams_slave_id_v3_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave1_Log0. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave1_log0_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log0_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave1_Log0. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave1_log0_unpack( + struct can1_ams_slave1_log0_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave1_Log0. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave1_log0_init(struct can1_ams_slave1_log0_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log0_ams_slave_id_v0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log0_ams_slave_id_v0_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log0_ams_slave_id_v0_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log0_ams_slave_id_v1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log0_ams_slave_id_v1_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log0_ams_slave_id_v1_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log0_ams_slave_id_v2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log0_ams_slave_id_v2_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log0_ams_slave_id_v2_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log0_ams_slave_id_v3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log0_ams_slave_id_v3_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log0_ams_slave_id_v3_is_in_range(uint16_t value); + +/** + * Pack message PDU_Heartbeat. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_pdu_heartbeat_pack( + uint8_t *dst_p, + const struct can1_pdu_heartbeat_t *src_p, + size_t size); + +/** + * Unpack message PDU_Heartbeat. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_pdu_heartbeat_unpack( + struct can1_pdu_heartbeat_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from PDU_Heartbeat. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_pdu_heartbeat_init(struct can1_pdu_heartbeat_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_pdu_heartbeat_pdu_heartbeat_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_heartbeat_pdu_heartbeat_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_heartbeat_pdu_heartbeat_is_in_range(int8_t value); + +/** + * Pack message FTCU_Pneumatik. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ftcu_pneumatik_pack( + uint8_t *dst_p, + const struct can1_ftcu_pneumatik_t *src_p, + size_t size); + +/** + * Unpack message FTCU_Pneumatik. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ftcu_pneumatik_unpack( + struct can1_ftcu_pneumatik_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from FTCU_Pneumatik. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ftcu_pneumatik_init(struct can1_ftcu_pneumatik_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_pneumatik_ftcu_tank_pressure_1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_pneumatik_ftcu_tank_pressure_1_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_pneumatik_ftcu_tank_pressure_1_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_pneumatik_ftcu_tank_pressure_2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_pneumatik_ftcu_tank_pressure_2_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_pneumatik_ftcu_tank_pressure_2_is_in_range(uint16_t value); + +/** + * Pack message ACU_TX_Commands. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_acu_tx_commands_pack( + uint8_t *dst_p, + const struct can1_acu_tx_commands_t *src_p, + size_t size); + +/** + * Unpack message ACU_TX_Commands. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_acu_tx_commands_unpack( + struct can1_acu_tx_commands_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from ACU_TX_Commands. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_acu_tx_commands_init(struct can1_acu_tx_commands_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_tx_commands_abx_speed_fl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_commands_abx_speed_fl_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_commands_abx_speed_fl_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_tx_commands_abx_speed_fr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_commands_abx_speed_fr_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_commands_abx_speed_fr_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_tx_commands_abx_speed_rl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_commands_abx_speed_rl_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_commands_abx_speed_rl_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_tx_commands_abx_speed_rr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_commands_abx_speed_rr_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_commands_abx_speed_rr_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_acu_tx_commands_abx_steering_angle_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_commands_abx_steering_angle_left_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_commands_abx_steering_angle_left_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_acu_tx_commands_abx_steering_angle_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_commands_abx_steering_angle_right_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_commands_abx_steering_angle_right_is_in_range(int8_t value); + +/** + * Pack message ACU_RX_Commands. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_acu_rx_commands_pack( + uint8_t *dst_p, + const struct can1_acu_rx_commands_t *src_p, + size_t size); + +/** + * Unpack message ACU_RX_Commands. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_acu_rx_commands_unpack( + struct can1_acu_rx_commands_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from ACU_RX_Commands. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_acu_rx_commands_init(struct can1_acu_rx_commands_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_rx_commands_acu_speed_target_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_rx_commands_acu_speed_target_left_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_rx_commands_acu_speed_target_left_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_rx_commands_acu_speed_target_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_rx_commands_acu_speed_target_right_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_rx_commands_acu_speed_target_right_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_acu_rx_commands_acu_steering_angle_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_rx_commands_acu_steering_angle_right_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_rx_commands_acu_steering_angle_right_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_acu_rx_commands_acu_steering_angle_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_rx_commands_acu_steering_angle_left_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_rx_commands_acu_steering_angle_left_is_in_range(int8_t value); + +/** + * Pack message ACU_RX. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_acu_rx_pack( + uint8_t *dst_p, + const struct can1_acu_rx_t *src_p, + size_t size); + +/** + * Unpack message ACU_RX. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_acu_rx_unpack( + struct can1_acu_rx_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from ACU_RX. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_acu_rx_init(struct can1_acu_rx_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_rx_acu_as_mission_complete_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_rx_acu_as_mission_complete_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_rx_acu_as_mission_complete_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_rx_acu_as_ok_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_rx_acu_as_ok_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_rx_acu_as_ok_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_rx_acu_drs_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_rx_acu_drs_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_rx_acu_drs_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_rx_acu_lap_count_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_rx_acu_lap_count_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_rx_acu_lap_count_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_rx_acu_cones_all_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_rx_acu_cones_all_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_rx_acu_cones_all_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_rx_acu_cones_actual_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_rx_acu_cones_actual_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_rx_acu_cones_actual_is_in_range(uint8_t value); + +/** + * Pack message AMS_Slave0_Log0. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave0_log0_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_log0_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave0_Log0. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave0_log0_unpack( + struct can1_ams_slave0_log0_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave0_Log0. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave0_log0_init(struct can1_ams_slave0_log0_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log0_ams_slave_id_v0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log0_ams_slave_id_v0_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log0_ams_slave_id_v0_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log0_ams_slave_id_v1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log0_ams_slave_id_v1_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log0_ams_slave_id_v1_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log0_ams_slave_id_v2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log0_ams_slave_id_v2_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log0_ams_slave_id_v2_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log0_ams_slave_id_v3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log0_ams_slave_id_v3_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log0_ams_slave_id_v3_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave0_Log1. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave0_log1_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_log1_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave0_Log1. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave0_log1_unpack( + struct can1_ams_slave0_log1_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave0_Log1. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave0_log1_init(struct can1_ams_slave0_log1_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log1_ams_slave_id_v4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log1_ams_slave_id_v4_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log1_ams_slave_id_v4_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log1_ams_slave_id_v5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log1_ams_slave_id_v5_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log1_ams_slave_id_v5_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log1_ams_slave_id_v6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log1_ams_slave_id_v6_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log1_ams_slave_id_v6_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log1_ams_slave_id_v7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log1_ams_slave_id_v7_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log1_ams_slave_id_v7_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave0_Log3. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave0_log3_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_log3_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave0_Log3. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave0_log3_unpack( + struct can1_ams_slave0_log3_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave0_Log3. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave0_log3_init(struct can1_ams_slave0_log3_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log3_ams_slave_id_v12_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log3_ams_slave_id_v12_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log3_ams_slave_id_v12_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log3_ams_slave_id_v13_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log3_ams_slave_id_v13_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log3_ams_slave_id_v13_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log3_ams_slave_id_v14_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log3_ams_slave_id_v14_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log3_ams_slave_id_v14_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log3_ams_slave_id_v15_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log3_ams_slave_id_v15_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log3_ams_slave_id_v15_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave0_Log4. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave0_log4_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_log4_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave0_Log4. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave0_log4_unpack( + struct can1_ams_slave0_log4_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave0_Log4. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave0_log4_init(struct can1_ams_slave0_log4_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_ams_slave0_log4_ams_slave_id_failed_sensors_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log4_ams_slave_id_failed_sensors_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log4_ams_slave_id_failed_sensors_is_in_range(uint32_t value); + +/** + * Pack message AMS_Slave0_Log5. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave0_log5_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_log5_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave0_Log5. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave0_log5_unpack( + struct can1_ams_slave0_log5_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave0_Log5. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave0_log5_init(struct can1_ams_slave0_log5_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave0_log5_ams_slave_id_t0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log5_ams_slave_id_t0_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log5_ams_slave_id_t0_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave0_log5_ams_slave_id_t1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log5_ams_slave_id_t1_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log5_ams_slave_id_t1_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave0_log5_ams_slave_id_t2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log5_ams_slave_id_t2_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log5_ams_slave_id_t2_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave0_log5_ams_slave_id_t3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log5_ams_slave_id_t3_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log5_ams_slave_id_t3_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave0_log5_ams_slave_id_t4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log5_ams_slave_id_t4_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log5_ams_slave_id_t4_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave0_log5_ams_slave_id_t5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log5_ams_slave_id_t5_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log5_ams_slave_id_t5_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave0_log5_ams_slave_id_t6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log5_ams_slave_id_t6_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log5_ams_slave_id_t6_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave0_log5_ams_slave_id_t7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log5_ams_slave_id_t7_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log5_ams_slave_id_t7_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave0_Log6. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave0_log6_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_log6_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave0_Log6. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave0_log6_unpack( + struct can1_ams_slave0_log6_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave0_Log6. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave0_log6_init(struct can1_ams_slave0_log6_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave0_log6_ams_slave_id_t8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log6_ams_slave_id_t8_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log6_ams_slave_id_t8_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave0_log6_ams_slave_id_t9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log6_ams_slave_id_t9_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log6_ams_slave_id_t9_is_in_range(int8_t value); + +/** + * Pack message ACU_TX. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_acu_tx_pack( + uint8_t *dst_p, + const struct can1_acu_tx_t *src_p, + size_t size); + +/** + * Unpack message ACU_TX. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_acu_tx_unpack( + struct can1_acu_tx_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from ACU_TX. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_acu_tx_init(struct can1_acu_tx_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_tx_acu_as_mission_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_acu_as_mission_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_acu_as_mission_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_tx_acu_as_state_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_acu_as_state_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_acu_as_state_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_tx_acu_power_off_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_acu_power_off_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_acu_power_off_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_tx_acu_reset_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_acu_reset_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_acu_reset_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_tx_acu_allow_torque_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_acu_allow_torque_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_acu_allow_torque_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_tx_abx_con_mon_error_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_abx_con_mon_error_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_abx_con_mon_error_is_in_range(uint8_t value); + +/** + * Pack message AMS_Slave5Status. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave5_status_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_status_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave5Status. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave5_status_unpack( + struct can1_ams_slave5_status_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave5Status. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave5_status_init(struct can1_ams_slave5_status_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave5_status_ams_slave_status_error_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_status_ams_slave_status_error_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_status_ams_slave_status_error_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave5_status_ams_slave_status_id_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_status_ams_slave_status_id_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_status_ams_slave_status_id_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave5_status_ams_slave_status_temp_sensor_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_status_ams_slave_status_temp_sensor_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_status_ams_slave_status_temp_sensor_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_status_ams_slave_status_min_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_status_ams_slave_status_min_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_status_ams_slave_status_min_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_status_ams_slave_status_max_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_status_ams_slave_status_max_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_status_ams_slave_status_max_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ams_slave5_status_ams_slave_status_max_temp_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_status_ams_slave_status_max_temp_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_status_ams_slave_status_max_temp_is_in_range(int16_t value); + +/** + * Pack message AMS_Slave4Status. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave4_status_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_status_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave4Status. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave4_status_unpack( + struct can1_ams_slave4_status_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave4Status. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave4_status_init(struct can1_ams_slave4_status_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave4_status_ams_slave_status_error_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_status_ams_slave_status_error_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_status_ams_slave_status_error_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave4_status_ams_slave_status_id_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_status_ams_slave_status_id_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_status_ams_slave_status_id_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave4_status_ams_slave_status_temp_sensor_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_status_ams_slave_status_temp_sensor_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_status_ams_slave_status_temp_sensor_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_status_ams_slave_status_min_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_status_ams_slave_status_min_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_status_ams_slave_status_min_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_status_ams_slave_status_max_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_status_ams_slave_status_max_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_status_ams_slave_status_max_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ams_slave4_status_ams_slave_status_max_temp_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_status_ams_slave_status_max_temp_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_status_ams_slave_status_max_temp_is_in_range(int16_t value); + +/** + * Pack message AMS_Slave3Status. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave3_status_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_status_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave3Status. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave3_status_unpack( + struct can1_ams_slave3_status_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave3Status. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave3_status_init(struct can1_ams_slave3_status_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave3_status_ams_slave_status_error_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_status_ams_slave_status_error_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_status_ams_slave_status_error_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave3_status_ams_slave_status_id_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_status_ams_slave_status_id_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_status_ams_slave_status_id_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave3_status_ams_slave_status_temp_sensor_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_status_ams_slave_status_temp_sensor_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_status_ams_slave_status_temp_sensor_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_status_ams_slave_status_min_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_status_ams_slave_status_min_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_status_ams_slave_status_min_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_status_ams_slave_status_max_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_status_ams_slave_status_max_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_status_ams_slave_status_max_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ams_slave3_status_ams_slave_status_max_temp_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_status_ams_slave_status_max_temp_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_status_ams_slave_status_max_temp_is_in_range(int16_t value); + +/** + * Pack message AMS_Slave2Status. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave2_status_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_status_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave2Status. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave2_status_unpack( + struct can1_ams_slave2_status_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave2Status. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave2_status_init(struct can1_ams_slave2_status_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave2_status_ams_slave_status_error_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_status_ams_slave_status_error_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_status_ams_slave_status_error_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave2_status_ams_slave_status_id_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_status_ams_slave_status_id_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_status_ams_slave_status_id_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave2_status_ams_slave_status_temp_sensor_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_status_ams_slave_status_temp_sensor_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_status_ams_slave_status_temp_sensor_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_status_ams_slave_status_min_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_status_ams_slave_status_min_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_status_ams_slave_status_min_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_status_ams_slave_status_max_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_status_ams_slave_status_max_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_status_ams_slave_status_max_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ams_slave2_status_ams_slave_status_max_temp_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_status_ams_slave_status_max_temp_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_status_ams_slave_status_max_temp_is_in_range(int16_t value); + +/** + * Pack message AMS_Error. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_error_pack( + uint8_t *dst_p, + const struct can1_ams_error_t *src_p, + size_t size); + +/** + * Unpack message AMS_Error. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_error_unpack( + struct can1_ams_error_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Error. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_error_init(struct can1_ams_error_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_error_ams_error_kind_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_error_ams_error_kind_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_error_ams_error_kind_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_error_ams_error_arg_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_error_ams_error_arg_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_error_ams_error_arg_is_in_range(int8_t value); + +/** + * Pack message FTCU_Cooling. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ftcu_cooling_pack( + uint8_t *dst_p, + const struct can1_ftcu_cooling_t *src_p, + size_t size); + +/** + * Unpack message FTCU_Cooling. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ftcu_cooling_unpack( + struct can1_ftcu_cooling_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from FTCU_Cooling. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ftcu_cooling_init(struct can1_ftcu_cooling_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ftcu_cooling_ftcu_water_pressure_2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_cooling_ftcu_water_pressure_2_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_cooling_ftcu_water_pressure_2_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ftcu_cooling_ftcu_water_pressure_1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_cooling_ftcu_water_pressure_1_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_cooling_ftcu_water_pressure_1_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_cooling_ftcu_water_temperature_1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_cooling_ftcu_water_temperature_1_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_cooling_ftcu_water_temperature_1_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_cooling_ftcu_water_temperature_2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_cooling_ftcu_water_temperature_2_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_cooling_ftcu_water_temperature_2_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_cooling_ftcu_flow_rate_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_cooling_ftcu_flow_rate_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_cooling_ftcu_flow_rate_is_in_range(uint16_t value); + +/** + * Pack message FTCU_BrakeT. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ftcu_brake_t_pack( + uint8_t *dst_p, + const struct can1_ftcu_brake_t_t *src_p, + size_t size); + +/** + * Unpack message FTCU_BrakeT. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ftcu_brake_t_unpack( + struct can1_ftcu_brake_t_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from FTCU_BrakeT. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ftcu_brake_t_init(struct can1_ftcu_brake_t_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_brake_t_ftcu_brake_t_fl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_brake_t_ftcu_brake_t_fl_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_brake_t_ftcu_brake_t_fl_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_brake_t_ftcu_brake_t_fr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_brake_t_ftcu_brake_t_fr_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_brake_t_ftcu_brake_t_fr_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_brake_t_ftcu_brake_t_rl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_brake_t_ftcu_brake_t_rl_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_brake_t_ftcu_brake_t_rl_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_brake_t_ftcu_brake_t_rr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_brake_t_ftcu_brake_t_rr_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_brake_t_ftcu_brake_t_rr_is_in_range(uint16_t value); + +/** + * Pack message FTCU_Wheelspeed. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ftcu_wheelspeed_pack( + uint8_t *dst_p, + const struct can1_ftcu_wheelspeed_t *src_p, + size_t size); + +/** + * Unpack message FTCU_Wheelspeed. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ftcu_wheelspeed_unpack( + struct can1_ftcu_wheelspeed_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from FTCU_Wheelspeed. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ftcu_wheelspeed_init(struct can1_ftcu_wheelspeed_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ftcu_wheelspeed_ftcu_wheelspeed_fl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_wheelspeed_ftcu_wheelspeed_fl_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_wheelspeed_ftcu_wheelspeed_fl_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ftcu_wheelspeed_ftcu_wheelspeed_fr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_wheelspeed_ftcu_wheelspeed_fr_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_wheelspeed_ftcu_wheelspeed_fr_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ftcu_wheelspeed_ftcu_wheelspeed_rl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_wheelspeed_ftcu_wheelspeed_rl_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_wheelspeed_ftcu_wheelspeed_rl_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ftcu_wheelspeed_ftcu_wheelspeed_rr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_wheelspeed_ftcu_wheelspeed_rr_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_wheelspeed_ftcu_wheelspeed_rr_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_wheelspeed_ftcu_distance_session_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_wheelspeed_ftcu_distance_session_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_wheelspeed_ftcu_distance_session_is_in_range(uint16_t value); + +/** + * Pack message FTCU_Timings. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ftcu_timings_pack( + uint8_t *dst_p, + const struct can1_ftcu_timings_t *src_p, + size_t size); + +/** + * Unpack message FTCU_Timings. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ftcu_timings_unpack( + struct can1_ftcu_timings_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from FTCU_Timings. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ftcu_timings_init(struct can1_ftcu_timings_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_timings_ftcu_laptime_best_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_timings_ftcu_laptime_best_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_timings_ftcu_laptime_best_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_timings_ftcu_laptime_last_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_timings_ftcu_laptime_last_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_timings_ftcu_laptime_last_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_timings_ftcu_sectortime_best_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_timings_ftcu_sectortime_best_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_timings_ftcu_sectortime_best_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_timings_ftcu_sectortime_last_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_timings_ftcu_sectortime_last_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_timings_ftcu_sectortime_last_is_in_range(uint16_t value); + +/** + * Pack message FTCU_Driver. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ftcu_driver_pack( + uint8_t *dst_p, + const struct can1_ftcu_driver_t *src_p, + size_t size); + +/** + * Unpack message FTCU_Driver. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ftcu_driver_unpack( + struct can1_ftcu_driver_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from FTCU_Driver. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ftcu_driver_init(struct can1_ftcu_driver_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ftcu_driver_ftcu_apps_percent_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_driver_ftcu_apps_percent_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_driver_ftcu_apps_percent_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_driver_ftcu_brake_pressure_f_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_driver_ftcu_brake_pressure_f_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_driver_ftcu_brake_pressure_f_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_driver_ftcu_brake_pressure_r_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_driver_ftcu_brake_pressure_r_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_driver_ftcu_brake_pressure_r_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ftcu_driver_ftcu_steering_angle_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_driver_ftcu_steering_angle_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_driver_ftcu_steering_angle_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ftcu_driver_ftcu_speed_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_driver_ftcu_speed_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_driver_ftcu_speed_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ftcu_driver_ftcu_lapcounter_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_driver_ftcu_lapcounter_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_driver_ftcu_lapcounter_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ftcu_driver_ftcu_sectorcounter_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_driver_ftcu_sectorcounter_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_driver_ftcu_sectorcounter_is_in_range(uint8_t value); + +/** + * Pack message TTS_RR. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_tts_rr_pack( + uint8_t *dst_p, + const struct can1_tts_rr_t *src_p, + size_t size); + +/** + * Unpack message TTS_RR. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_tts_rr_unpack( + struct can1_tts_rr_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from TTS_RR. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_tts_rr_init(struct can1_tts_rr_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_rr_tts_outer_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rr_tts_outer_left_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rr_tts_outer_left_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_rr_tts_center_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rr_tts_center_left_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rr_tts_center_left_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_rr_tts_center_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rr_tts_center_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rr_tts_center_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_rr_tts_center_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rr_tts_center_right_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rr_tts_center_right_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_rr_tts_outet_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rr_tts_outet_right_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rr_tts_outet_right_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_tts_rr_tts_status_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rr_tts_status_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rr_tts_status_is_in_range(uint8_t value); + +/** + * Pack message TTS_RL. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_tts_rl_pack( + uint8_t *dst_p, + const struct can1_tts_rl_t *src_p, + size_t size); + +/** + * Unpack message TTS_RL. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_tts_rl_unpack( + struct can1_tts_rl_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from TTS_RL. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_tts_rl_init(struct can1_tts_rl_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_rl_tts_outer_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rl_tts_outer_left_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rl_tts_outer_left_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_rl_tts_center_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rl_tts_center_left_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rl_tts_center_left_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_rl_tts_center_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rl_tts_center_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rl_tts_center_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_rl_tts_center_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rl_tts_center_right_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rl_tts_center_right_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_rl_tts_outer_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rl_tts_outer_right_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rl_tts_outer_right_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_tts_rl_tts_status_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rl_tts_status_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rl_tts_status_is_in_range(uint8_t value); + +/** + * Pack message TTS_FR. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_tts_fr_pack( + uint8_t *dst_p, + const struct can1_tts_fr_t *src_p, + size_t size); + +/** + * Unpack message TTS_FR. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_tts_fr_unpack( + struct can1_tts_fr_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from TTS_FR. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_tts_fr_init(struct can1_tts_fr_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_fr_tts_outer_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fr_tts_outer_left_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fr_tts_outer_left_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_fr_tts_center_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fr_tts_center_left_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fr_tts_center_left_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_fr_tts_center_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fr_tts_center_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fr_tts_center_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_fr_tts_center_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fr_tts_center_right_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fr_tts_center_right_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_fr_tts_outer_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fr_tts_outer_right_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fr_tts_outer_right_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_tts_fr_tts_status_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fr_tts_status_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fr_tts_status_is_in_range(uint8_t value); + +/** + * Pack message TTS_FL. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_tts_fl_pack( + uint8_t *dst_p, + const struct can1_tts_fl_t *src_p, + size_t size); + +/** + * Unpack message TTS_FL. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_tts_fl_unpack( + struct can1_tts_fl_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from TTS_FL. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_tts_fl_init(struct can1_tts_fl_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_fl_tts_outer_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fl_tts_outer_left_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fl_tts_outer_left_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_fl_tts_center_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fl_tts_center_left_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fl_tts_center_left_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_fl_tts_center_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fl_tts_center_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fl_tts_center_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_fl_tts_center_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fl_tts_center_right_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fl_tts_center_right_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_fl_tts_outer_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fl_tts_outer_right_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fl_tts_outer_right_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_tts_fl_tts_status_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fl_tts_status_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fl_tts_status_is_in_range(uint8_t value); + +/** + * Pack message STW_Param_Set. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_stw_param_set_pack( + uint8_t *dst_p, + const struct can1_stw_param_set_t *src_p, + size_t size); + +/** + * Unpack message STW_Param_Set. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_stw_param_set_unpack( + struct can1_stw_param_set_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from STW_Param_Set. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_stw_param_set_init(struct can1_stw_param_set_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_stw_param_set_stw_param_set_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_set_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_set_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_tc_slipref_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_tc_slipref_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_tc_slipref_is_in_range(uint32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_tc_mumax_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_tc_mumax_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_tc_mumax_is_in_range(uint32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_tc_i_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_tc_i_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_tc_i_is_in_range(uint32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_plim_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_plim_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_plim_is_in_range(uint32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_tlim_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_tlim_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_tlim_is_in_range(uint32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_tc_p_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_tc_p_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_tc_p_is_in_range(uint32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_reku_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_reku_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_reku_is_in_range(uint32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_tc_on_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_tc_on_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_tc_on_is_in_range(uint32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_tv_on_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_tv_on_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_tv_on_is_in_range(uint32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_discipline_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_discipline_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_discipline_is_in_range(uint32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_slim_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_slim_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_slim_is_in_range(uint32_t value); + +/** + * Pack message AMS_Slave0Status. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave0_status_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_status_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave0Status. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave0_status_unpack( + struct can1_ams_slave0_status_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave0Status. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave0_status_init(struct can1_ams_slave0_status_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave0_status_ams_slave_status_error_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_status_ams_slave_status_error_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_status_ams_slave_status_error_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave0_status_ams_slave_status_id_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_status_ams_slave_status_id_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_status_ams_slave_status_id_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave0_status_ams_slave_status_temp_sensor_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_status_ams_slave_status_temp_sensor_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_status_ams_slave_status_temp_sensor_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_status_ams_slave_status_min_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_status_ams_slave_status_min_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_status_ams_slave_status_min_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_status_ams_slave_status_max_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_status_ams_slave_status_max_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_status_ams_slave_status_max_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ams_slave0_status_ams_slave_status_max_temp_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_status_ams_slave_status_max_temp_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_status_ams_slave_status_max_temp_is_in_range(int16_t value); + +/** + * Pack message SSU_Message. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ssu_message_pack( + uint8_t *dst_p, + const struct can1_ssu_message_t *src_p, + size_t size); + +/** + * Unpack message SSU_Message. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ssu_message_unpack( + struct can1_ssu_message_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from SSU_Message. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ssu_message_init(struct can1_ssu_message_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ssu_message_ssu_pressure_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ssu_message_ssu_pressure_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ssu_message_ssu_pressure_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ssu_message_ssu_air_temp_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ssu_message_ssu_air_temp_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ssu_message_ssu_air_temp_is_in_range(int16_t value); + +/** + * Pack message AMS_Status. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_status_pack( + uint8_t *dst_p, + const struct can1_ams_status_t *src_p, + size_t size); + +/** + * Unpack message AMS_Status. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_status_unpack( + struct can1_ams_status_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Status. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_status_init(struct can1_ams_status_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_status_ams_state_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_status_ams_state_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_status_ams_state_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_status_sdc_closed_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_status_sdc_closed_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_status_sdc_closed_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_status_soc_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_status_soc_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_status_soc_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_status_min_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_status_min_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_status_min_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_status_max_cell_temp_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_status_max_cell_temp_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_status_max_cell_temp_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_status_ams_imd_state_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_status_ams_imd_state_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_status_ams_imd_state_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_status_ams_imd_ok_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_status_ams_imd_ok_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_status_ams_imd_ok_is_in_range(uint8_t value); + +/** + * Pack message AMS_SlavePanic. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave_panic_pack( + uint8_t *dst_p, + const struct can1_ams_slave_panic_t *src_p, + size_t size); + +/** + * Unpack message AMS_SlavePanic. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave_panic_unpack( + struct can1_ams_slave_panic_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_SlavePanic. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave_panic_init(struct can1_ams_slave_panic_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave_panic_ams_slave_panic_slave_id_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave_panic_ams_slave_panic_slave_id_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave_panic_ams_slave_panic_slave_id_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave_panic_ams_slave_panic_kind_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave_panic_ams_slave_panic_kind_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave_panic_ams_slave_panic_kind_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_ams_slave_panic_ams_slave_panic_arg_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave_panic_ams_slave_panic_arg_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave_panic_ams_slave_panic_arg_is_in_range(uint32_t value); + +/** + * Pack message AMS_In. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_in_pack( + uint8_t *dst_p, + const struct can1_ams_in_t *src_p, + size_t size); + +/** + * Unpack message AMS_In. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_in_unpack( + struct can1_ams_in_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_In. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_in_init(struct can1_ams_in_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_in_ts_activate_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_in_ts_activate_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_in_ts_activate_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_in_inverters_discharged_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_in_inverters_discharged_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_in_inverters_discharged_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_in_lap_number_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_in_lap_number_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_in_lap_number_is_in_range(uint8_t value); + +/** + * Pack message Shunt_Current. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_shunt_current_pack( + uint8_t *dst_p, + const struct can1_shunt_current_t *src_p, + size_t size); + +/** + * Unpack message Shunt_Current. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_shunt_current_unpack( + struct can1_shunt_current_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Shunt_Current. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_shunt_current_init(struct can1_shunt_current_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int32_t can1_shunt_current_shunt_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_shunt_current_shunt_current_decode(int32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_shunt_current_shunt_current_is_in_range(int32_t value); + +/** + * Pack message Shunt_Voltage1. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_shunt_voltage1_pack( + uint8_t *dst_p, + const struct can1_shunt_voltage1_t *src_p, + size_t size); + +/** + * Unpack message Shunt_Voltage1. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_shunt_voltage1_unpack( + struct can1_shunt_voltage1_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Shunt_Voltage1. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_shunt_voltage1_init(struct can1_shunt_voltage1_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int32_t can1_shunt_voltage1_shunt_voltage1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_shunt_voltage1_shunt_voltage1_decode(int32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_shunt_voltage1_shunt_voltage1_is_in_range(int32_t value); + +/** + * Pack message Shunt_Voltage2. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_shunt_voltage2_pack( + uint8_t *dst_p, + const struct can1_shunt_voltage2_t *src_p, + size_t size); + +/** + * Unpack message Shunt_Voltage2. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_shunt_voltage2_unpack( + struct can1_shunt_voltage2_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Shunt_Voltage2. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_shunt_voltage2_init(struct can1_shunt_voltage2_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int32_t can1_shunt_voltage2_shunt_voltage2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_shunt_voltage2_shunt_voltage2_decode(int32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_shunt_voltage2_shunt_voltage2_is_in_range(int32_t value); + +/** + * Pack message Shunt_Voltage3. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_shunt_voltage3_pack( + uint8_t *dst_p, + const struct can1_shunt_voltage3_t *src_p, + size_t size); + +/** + * Unpack message Shunt_Voltage3. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_shunt_voltage3_unpack( + struct can1_shunt_voltage3_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Shunt_Voltage3. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_shunt_voltage3_init(struct can1_shunt_voltage3_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int32_t can1_shunt_voltage3_shunt_voltage3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_shunt_voltage3_shunt_voltage3_decode(int32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_shunt_voltage3_shunt_voltage3_is_in_range(int32_t value); + +/** + * Pack message Shunt_Temperature. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_shunt_temperature_pack( + uint8_t *dst_p, + const struct can1_shunt_temperature_t *src_p, + size_t size); + +/** + * Unpack message Shunt_Temperature. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_shunt_temperature_unpack( + struct can1_shunt_temperature_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Shunt_Temperature. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_shunt_temperature_init(struct can1_shunt_temperature_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_shunt_temperature_shunt_temperature_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_shunt_temperature_shunt_temperature_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_shunt_temperature_shunt_temperature_is_in_range(uint32_t value); + +/** + * Pack message PDU_Command. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_pdu_command_pack( + uint8_t *dst_p, + const struct can1_pdu_command_t *src_p, + size_t size); + +/** + * Unpack message PDU_Command. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_pdu_command_unpack( + struct can1_pdu_command_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from PDU_Command. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_pdu_command_init(struct can1_pdu_command_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_misc_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_misc_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_misc_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_sdc_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_sdc_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_sdc_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_inverter_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_inverter_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_inverter_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_ts_cooling_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_ts_cooling_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_ts_cooling_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_acc_cooling_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_acc_cooling_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_acc_cooling_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_lldar_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_lldar_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_lldar_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_drs_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_drs_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_drs_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_epsc_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_epsc_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_epsc_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_acu_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_acu_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_acu_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_ebs_a_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_ebs_a_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_ebs_a_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_ebs_b_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_ebs_b_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_ebs_b_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_ebs_c_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_ebs_c_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_ebs_c_is_in_range(uint8_t value); + +/** + * Pack message PDU_Response. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_pdu_response_pack( + uint8_t *dst_p, + const struct can1_pdu_response_t *src_p, + size_t size); + +/** + * Unpack message PDU_Response. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_pdu_response_unpack( + struct can1_pdu_response_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from PDU_Response. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_pdu_response_init(struct can1_pdu_response_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_alwayson_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_alwayson_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_alwayson_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_shutdown_circuit_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_shutdown_circuit_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_shutdown_circuit_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_lidar_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_lidar_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_lidar_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_acu_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_acu_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_acu_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_servos_regler_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_servos_regler_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_servos_regler_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_inverter_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_inverter_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_inverter_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_misc_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_misc_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_misc_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_servo_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_servo_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_servo_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_ebs_valve_1_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_ebs_valve_1_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_ebs_valve_1_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_ebs_valve_2_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_ebs_valve_2_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_ebs_valve_2_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_cs_valve_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_cs_valve_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_cs_valve_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_aggregat_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_aggregat_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_aggregat_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_steering_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_steering_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_steering_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_pwm_tsac_fans_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_pwm_tsac_fans_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_pwm_tsac_fans_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_pwm_radiatot_fans_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_pwm_radiatot_fans_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_pwm_radiatot_fans_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_pwm_aggregat_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_pwm_aggregat_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_pwm_aggregat_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_pwm_pump_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_pwm_pump_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_pwm_pump_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_heartbeat_ok_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_heartbeat_ok_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_heartbeat_ok_tx_is_in_range(uint8_t value); + +/** + * Pack message AS_Mission_fb. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_as_mission_fb_pack( + uint8_t *dst_p, + const struct can1_as_mission_fb_t *src_p, + size_t size); + +/** + * Unpack message AS_Mission_fb. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_as_mission_fb_unpack( + struct can1_as_mission_fb_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AS_Mission_fb. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_as_mission_fb_init(struct can1_as_mission_fb_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_as_mission_fb_mission_selection_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_as_mission_fb_mission_selection_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_as_mission_fb_mission_selection_is_in_range(uint8_t value); + +/** + * Pack message STW_mission_selected. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_stw_mission_selected_pack( + uint8_t *dst_p, + const struct can1_stw_mission_selected_t *src_p, + size_t size); + +/** + * Unpack message STW_mission_selected. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_stw_mission_selected_unpack( + struct can1_stw_mission_selected_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from STW_mission_selected. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_stw_mission_selected_init(struct can1_stw_mission_selected_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_mission_selected_mission_selection_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_mission_selected_mission_selection_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_mission_selected_mission_selection_is_in_range(uint8_t value); + +/** + * Pack message EPSC_out. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_epsc_out_pack( + uint8_t *dst_p, + const struct can1_epsc_out_t *src_p, + size_t size); + +/** + * Unpack message EPSC_out. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_epsc_out_unpack( + struct can1_epsc_out_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from EPSC_out. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_epsc_out_init(struct can1_epsc_out_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_epsc_out_epsc_measured_rpm_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_epsc_out_epsc_measured_rpm_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_epsc_out_epsc_measured_rpm_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_epsc_out_epsc_measured_steering_angle_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_epsc_out_epsc_measured_steering_angle_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_epsc_out_epsc_measured_steering_angle_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_epsc_out_epsc_measured_mosfet_temperature_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_epsc_out_epsc_measured_mosfet_temperature_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_epsc_out_epsc_measured_mosfet_temperature_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_epsc_out_epsc_measured_voltage_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_epsc_out_epsc_measured_voltage_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_epsc_out_epsc_measured_voltage_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_epsc_out_epsc_measured_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_epsc_out_epsc_measured_current_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_epsc_out_epsc_measured_current_is_in_range(uint8_t value); + +/** + * Pack message EPSC_Steering_In. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_epsc_steering_in_pack( + uint8_t *dst_p, + const struct can1_epsc_steering_in_t *src_p, + size_t size); + +/** + * Unpack message EPSC_Steering_In. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_epsc_steering_in_unpack( + struct can1_epsc_steering_in_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from EPSC_Steering_In. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_epsc_steering_in_init(struct can1_epsc_steering_in_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_epsc_steering_in_epsc_desired_steering_angle_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_epsc_steering_in_epsc_desired_steering_angle_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_epsc_steering_in_epsc_desired_steering_angle_is_in_range(int16_t value); + +/** + * Pack message STW_buttons. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_stw_buttons_pack( + uint8_t *dst_p, + const struct can1_stw_buttons_t *src_p, + size_t size); + +/** + * Unpack message STW_buttons. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_stw_buttons_unpack( + struct can1_stw_buttons_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from STW_buttons. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_stw_buttons_init(struct can1_stw_buttons_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_buttons_stw_button_drs_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_buttons_stw_button_drs_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_buttons_stw_button_drs_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_buttons_stw_button_1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_buttons_stw_button_1_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_buttons_stw_button_1_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_buttons_stw_button_2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_buttons_stw_button_2_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_buttons_stw_button_2_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_buttons_stw_button_3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_buttons_stw_button_3_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_buttons_stw_button_3_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_buttons_stw_button_4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_buttons_stw_button_4_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_buttons_stw_button_4_is_in_range(uint8_t value); + +/** + * Pack message STW_status. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_stw_status_pack( + uint8_t *dst_p, + const struct can1_stw_status_t *src_p, + size_t size); + +/** + * Unpack message STW_status. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_stw_status_unpack( + struct can1_stw_status_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from STW_status. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_stw_status_init(struct can1_stw_status_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_lap_count_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_lap_count_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_lap_count_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_pdu_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_pdu_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_pdu_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_res_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_res_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_res_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_r2_d_progress_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_r2_d_progress_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_r2_d_progress_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_as_state_stw_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_as_state_stw_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_as_state_stw_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_as_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_as_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_as_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_app_sp_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_app_sp_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_app_sp_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_s_bspd_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_s_bspd_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_s_bspd_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_scs_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_scs_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_scs_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_con_mon_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_con_mon_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_con_mon_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_ini_chk_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_ini_chk_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_ini_chk_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_inv2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_inv2_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_inv2_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_inv1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_inv1_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_inv1_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_ams_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_ams_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_ams_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_sdc_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_sdc_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_sdc_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_sdc_status_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_sdc_status_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_sdc_status_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_inv2_ready_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_inv2_ready_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_inv2_ready_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_inv1_ready_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_inv1_ready_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_inv1_ready_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_stw_status_energy_per_lap_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_energy_per_lap_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_energy_per_lap_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_ini_chk_state_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_ini_chk_state_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_ini_chk_state_is_in_range(uint8_t value); + +/** + * Pack message PDU_Current_1. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_pdu_current_1_pack( + uint8_t *dst_p, + const struct can1_pdu_current_1_t *src_p, + size_t size); + +/** + * Unpack message PDU_Current_1. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_pdu_current_1_unpack( + struct can1_pdu_current_1_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from PDU_Current_1. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_pdu_current_1_init(struct can1_pdu_current_1_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_1_pdu_always_on_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_1_pdu_always_on_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_1_pdu_always_on_current_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_1_pdu_lvms_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_1_pdu_lvms_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_1_pdu_lvms_current_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_1_pdu_asms_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_1_pdu_asms_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_1_pdu_asms_current_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_1_pdu_misc_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_1_pdu_misc_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_1_pdu_misc_current_is_in_range(uint16_t value); + +/** + * Pack message PDU_Current_2. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_pdu_current_2_pack( + uint8_t *dst_p, + const struct can1_pdu_current_2_t *src_p, + size_t size); + +/** + * Unpack message PDU_Current_2. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_pdu_current_2_unpack( + struct can1_pdu_current_2_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from PDU_Current_2. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_pdu_current_2_init(struct can1_pdu_current_2_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_2_pdu_sdc_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_2_pdu_sdc_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_2_pdu_sdc_current_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_2_pdu_inverter_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_2_pdu_inverter_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_2_pdu_inverter_current_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_2_pdu_ts_cooling_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_2_pdu_ts_cooling_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_2_pdu_ts_cooling_current_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_2_pdu_acc_cooling_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_2_pdu_acc_cooling_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_2_pdu_acc_cooling_current_is_in_range(uint16_t value); + +/** + * Pack message PDU_Current_3. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_pdu_current_3_pack( + uint8_t *dst_p, + const struct can1_pdu_current_3_t *src_p, + size_t size); + +/** + * Unpack message PDU_Current_3. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_pdu_current_3_unpack( + struct can1_pdu_current_3_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from PDU_Current_3. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_pdu_current_3_init(struct can1_pdu_current_3_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_3_pdu_lidar_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_3_pdu_lidar_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_3_pdu_lidar_current_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_3_pdu_drs_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_3_pdu_drs_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_3_pdu_drs_current_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_3_pdu_epsc_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_3_pdu_epsc_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_3_pdu_epsc_current_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_3_pdu_acu_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_3_pdu_acu_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_3_pdu_acu_current_is_in_range(uint16_t value); + +/** + * Pack message PDU_Current_4. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_pdu_current_4_pack( + uint8_t *dst_p, + const struct can1_pdu_current_4_t *src_p, + size_t size); + +/** + * Unpack message PDU_Current_4. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_pdu_current_4_unpack( + struct can1_pdu_current_4_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from PDU_Current_4. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_pdu_current_4_init(struct can1_pdu_current_4_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_4_pdu_ebs_a_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_4_pdu_ebs_a_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_4_pdu_ebs_a_current_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_4_pdu_ebs_b_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_4_pdu_ebs_b_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_4_pdu_ebs_b_current_is_in_range(uint16_t value); + +/** + * Pack message EPSC_Config_In. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_epsc_config_in_pack( + uint8_t *dst_p, + const struct can1_epsc_config_in_t *src_p, + size_t size); + +/** + * Unpack message EPSC_Config_In. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_epsc_config_in_unpack( + struct can1_epsc_config_in_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from EPSC_Config_In. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_epsc_config_in_init(struct can1_epsc_config_in_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_epsc_config_in_epsc_config_p_gain_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_epsc_config_in_epsc_config_p_gain_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_epsc_config_in_epsc_config_p_gain_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_epsc_config_in_epsc_config_i_gain_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_epsc_config_in_epsc_config_i_gain_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_epsc_config_in_epsc_config_i_gain_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_epsc_config_in_epsc_config_d_gain_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_epsc_config_in_epsc_config_d_gain_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_epsc_config_in_epsc_config_d_gain_is_in_range(uint16_t value); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/ros2_ws/src/ft_can_transceiver_lib/include/ft_can_transceiver_lib/endec.hpp b/ros2_ws/src/ft_can_transceiver_lib/include/ft_can_transceiver_lib/endec.hpp new file mode 100644 index 0000000..ca30c8a --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/include/ft_can_transceiver_lib/endec.hpp @@ -0,0 +1,5489 @@ +#ifndef _ENDEC_HPP_ +#define _ENDEC_HPP_ + +#include "can1.h" +#include + +namespace canlib { +// frame structures +namespace frame { +namespace decoded { +namespace can1 { +struct inverter_velocity_t { + double inverter_1_velocity; + double inverter_2_velocity; +inverter_velocity_t() { + this->inverter_1_velocity = 0.0; + this->inverter_2_velocity = 0.0; +} + +inverter_velocity_t( + double inverter_1_velocity, + double inverter_2_velocity) { + this->inverter_1_velocity = inverter_1_velocity; + this->inverter_2_velocity = inverter_2_velocity; +} + +}; +struct inverter_errors_warnings_t { + double inverter_1_errors; + double inverter_1_warnings; + double inverter_2_errors; + double inverter_2_warnings; +inverter_errors_warnings_t() { + this->inverter_1_errors = 0.0; + this->inverter_1_warnings = 0.0; + this->inverter_2_errors = 0.0; + this->inverter_2_warnings = 0.0; +} + +inverter_errors_warnings_t( + double inverter_1_errors, + double inverter_1_warnings, + double inverter_2_errors, + double inverter_2_warnings) { + this->inverter_1_errors = inverter_1_errors; + this->inverter_1_warnings = inverter_1_warnings; + this->inverter_2_errors = inverter_2_errors; + this->inverter_2_warnings = inverter_2_warnings; +} + +}; +struct inverter_torque_actual_cw_t { + double inverter_1_control_word; + double inverter_1_torque_actual; + double inverter_2_control_word; + double inverter_2_torque_actual; +inverter_torque_actual_cw_t() { + this->inverter_1_control_word = 0.0; + this->inverter_1_torque_actual = 0.0; + this->inverter_2_control_word = 0.0; + this->inverter_2_torque_actual = 0.0; +} + +inverter_torque_actual_cw_t( + double inverter_1_control_word, + double inverter_1_torque_actual, + double inverter_2_control_word, + double inverter_2_torque_actual) { + this->inverter_1_control_word = inverter_1_control_word; + this->inverter_1_torque_actual = inverter_1_torque_actual; + this->inverter_2_control_word = inverter_2_control_word; + this->inverter_2_torque_actual = inverter_2_torque_actual; +} + +}; +struct inverter_temperatur_t { + double inverter_1_temp_inv; + double inverter_1_temp_mot; + double inverter_2_temp_inv; + double inverter_2_temp_mot; +inverter_temperatur_t() { + this->inverter_1_temp_inv = 0.0; + this->inverter_1_temp_mot = 0.0; + this->inverter_2_temp_inv = 0.0; + this->inverter_2_temp_mot = 0.0; +} + +inverter_temperatur_t( + double inverter_1_temp_inv, + double inverter_1_temp_mot, + double inverter_2_temp_inv, + double inverter_2_temp_mot) { + this->inverter_1_temp_inv = inverter_1_temp_inv; + this->inverter_1_temp_mot = inverter_1_temp_mot; + this->inverter_2_temp_inv = inverter_2_temp_inv; + this->inverter_2_temp_mot = inverter_2_temp_mot; +} + +}; +struct inverter_torque_wanted_t { + double inverter_1_torque_demanded; + double inverter_2_torque_demanded; + double inverter_1_torque_desired; + double inverter_2_torque_desired; +inverter_torque_wanted_t() { + this->inverter_1_torque_demanded = 0.0; + this->inverter_2_torque_demanded = 0.0; + this->inverter_1_torque_desired = 0.0; + this->inverter_2_torque_desired = 0.0; +} + +inverter_torque_wanted_t( + double inverter_1_torque_demanded, + double inverter_2_torque_demanded, + double inverter_1_torque_desired, + double inverter_2_torque_desired) { + this->inverter_1_torque_demanded = inverter_1_torque_demanded; + this->inverter_2_torque_demanded = inverter_2_torque_demanded; + this->inverter_1_torque_desired = inverter_1_torque_desired; + this->inverter_2_torque_desired = inverter_2_torque_desired; +} + +}; +struct sdo_telemetrie_rx_node1_t { + double sdo_command_byte; + double sdo_od_index; + double sdo_od_subindex; + double sdo_data; +sdo_telemetrie_rx_node1_t() { + this->sdo_command_byte = 0.0; + this->sdo_od_index = 0.0; + this->sdo_od_subindex = 0.0; + this->sdo_data = 0.0; +} + +sdo_telemetrie_rx_node1_t( + double sdo_command_byte, + double sdo_od_index, + double sdo_od_subindex, + double sdo_data) { + this->sdo_command_byte = sdo_command_byte; + this->sdo_od_index = sdo_od_index; + this->sdo_od_subindex = sdo_od_subindex; + this->sdo_data = sdo_data; +} + +}; +struct sdo_telemetrie_rx_node2_t { + double sdo_command_byte; + double sdo_od_index; + double sdo_od_subindex; + double sdo_data; +sdo_telemetrie_rx_node2_t() { + this->sdo_command_byte = 0.0; + this->sdo_od_index = 0.0; + this->sdo_od_subindex = 0.0; + this->sdo_data = 0.0; +} + +sdo_telemetrie_rx_node2_t( + double sdo_command_byte, + double sdo_od_index, + double sdo_od_subindex, + double sdo_data) { + this->sdo_command_byte = sdo_command_byte; + this->sdo_od_index = sdo_od_index; + this->sdo_od_subindex = sdo_od_subindex; + this->sdo_data = sdo_data; +} + +}; +struct sdo_telemetrie_tx_t { + double sdo_command_byte; + double sdo_od_index; + double sdo_od_subindex; + double sdo_data; +sdo_telemetrie_tx_t() { + this->sdo_command_byte = 0.0; + this->sdo_od_index = 0.0; + this->sdo_od_subindex = 0.0; + this->sdo_data = 0.0; +} + +sdo_telemetrie_tx_t( + double sdo_command_byte, + double sdo_od_index, + double sdo_od_subindex, + double sdo_data) { + this->sdo_command_byte = sdo_command_byte; + this->sdo_od_index = sdo_od_index; + this->sdo_od_subindex = sdo_od_subindex; + this->sdo_data = sdo_data; +} + +}; +struct laptop_sdo_node_t { + double node_id_sdo; +laptop_sdo_node_t() { + this->node_id_sdo = 0.0; +} + +laptop_sdo_node_t( + double node_id_sdo) { + this->node_id_sdo = node_id_sdo; +} + +}; +struct x_sens_long_lat_t { + double x_sens_latitude; + double x_sens_longitude; +x_sens_long_lat_t() { + this->x_sens_latitude = 0.0; + this->x_sens_longitude = 0.0; +} + +x_sens_long_lat_t( + double x_sens_latitude, + double x_sens_longitude) { + this->x_sens_latitude = x_sens_latitude; + this->x_sens_longitude = x_sens_longitude; +} + +}; +struct x_sens_rateofturn_t { + double x_sens_gyr_x; + double x_sens_gy_y; + double x_sens_gy_z; +x_sens_rateofturn_t() { + this->x_sens_gyr_x = 0.0; + this->x_sens_gy_y = 0.0; + this->x_sens_gy_z = 0.0; +} + +x_sens_rateofturn_t( + double x_sens_gyr_x, + double x_sens_gy_y, + double x_sens_gy_z) { + this->x_sens_gyr_x = x_sens_gyr_x; + this->x_sens_gy_y = x_sens_gy_y; + this->x_sens_gy_z = x_sens_gy_z; +} + +}; +struct x_sens_acceleration_t { + double x_sens_acc_x; + double x_sens_acc_y; + double x_sens_acc_z; +x_sens_acceleration_t() { + this->x_sens_acc_x = 0.0; + this->x_sens_acc_y = 0.0; + this->x_sens_acc_z = 0.0; +} + +x_sens_acceleration_t( + double x_sens_acc_x, + double x_sens_acc_y, + double x_sens_acc_z) { + this->x_sens_acc_x = x_sens_acc_x; + this->x_sens_acc_y = x_sens_acc_y; + this->x_sens_acc_z = x_sens_acc_z; +} + +}; +struct x_sens_velocity_t { + double x_sens_vel_x; + double x_sens_vel_y; + double x_sens_vel_z; +x_sens_velocity_t() { + this->x_sens_vel_x = 0.0; + this->x_sens_vel_y = 0.0; + this->x_sens_vel_z = 0.0; +} + +x_sens_velocity_t( + double x_sens_vel_x, + double x_sens_vel_y, + double x_sens_vel_z) { + this->x_sens_vel_x = x_sens_vel_x; + this->x_sens_vel_y = x_sens_vel_y; + this->x_sens_vel_z = x_sens_vel_z; +} + +}; +struct telemetrie_t { + double ini_check_error_state; + double powermap; + double apps_ok; + double brake_ok; + double allow_torque; + double asp_ok; + double pressure_sensor_ok; + double torque_vectoring_on; + double reku_on; + double traction_control_on; + double ts_deactivate; + double torque_limit; + double power_limit; + double torque_limit_dynamisch; + double torque_ohne_limit_l; + double torque_ohne_limit_r; +telemetrie_t() { + this->ini_check_error_state = 0.0; + this->powermap = 0.0; + this->apps_ok = 0.0; + this->brake_ok = 0.0; + this->allow_torque = 0.0; + this->asp_ok = 0.0; + this->pressure_sensor_ok = 0.0; + this->torque_vectoring_on = 0.0; + this->reku_on = 0.0; + this->traction_control_on = 0.0; + this->ts_deactivate = 0.0; + this->torque_limit = 0.0; + this->power_limit = 0.0; + this->torque_limit_dynamisch = 0.0; + this->torque_ohne_limit_l = 0.0; + this->torque_ohne_limit_r = 0.0; +} + +telemetrie_t( + double ini_check_error_state, + double powermap, + double apps_ok, + double brake_ok, + double allow_torque, + double asp_ok, + double pressure_sensor_ok, + double torque_vectoring_on, + double reku_on, + double traction_control_on, + double ts_deactivate, + double torque_limit, + double power_limit, + double torque_limit_dynamisch, + double torque_ohne_limit_l, + double torque_ohne_limit_r) { + this->ini_check_error_state = ini_check_error_state; + this->powermap = powermap; + this->apps_ok = apps_ok; + this->brake_ok = brake_ok; + this->allow_torque = allow_torque; + this->asp_ok = asp_ok; + this->pressure_sensor_ok = pressure_sensor_ok; + this->torque_vectoring_on = torque_vectoring_on; + this->reku_on = reku_on; + this->traction_control_on = traction_control_on; + this->ts_deactivate = ts_deactivate; + this->torque_limit = torque_limit; + this->power_limit = power_limit; + this->torque_limit_dynamisch = torque_limit_dynamisch; + this->torque_ohne_limit_l = torque_ohne_limit_l; + this->torque_ohne_limit_r = torque_ohne_limit_r; +} + +}; +struct override_powermap_t { + double laptopp_power_map; + double laptop_reku; + double laptop_tc; + double laptop_tv; + double laptop_slipref; + double laptop_tc_i; + double laptop_tc_p; + double laptop_tc_mumax; +override_powermap_t() { + this->laptopp_power_map = 0.0; + this->laptop_reku = 0.0; + this->laptop_tc = 0.0; + this->laptop_tv = 0.0; + this->laptop_slipref = 0.0; + this->laptop_tc_i = 0.0; + this->laptop_tc_p = 0.0; + this->laptop_tc_mumax = 0.0; +} + +override_powermap_t( + double laptopp_power_map, + double laptop_reku, + double laptop_tc, + double laptop_tv, + double laptop_slipref, + double laptop_tc_i, + double laptop_tc_p, + double laptop_tc_mumax) { + this->laptopp_power_map = laptopp_power_map; + this->laptop_reku = laptop_reku; + this->laptop_tc = laptop_tc; + this->laptop_tv = laptop_tv; + this->laptop_slipref = laptop_slipref; + this->laptop_tc_i = laptop_tc_i; + this->laptop_tc_p = laptop_tc_p; + this->laptop_tc_mumax = laptop_tc_mumax; +} + +}; +struct override_laptop_2_t { + double as_mission; + double as_state; + double manual_input_torque; + double laptop_powerlimit; + double laptop_torque_lim; +override_laptop_2_t() { + this->as_mission = 0.0; + this->as_state = 0.0; + this->manual_input_torque = 0.0; + this->laptop_powerlimit = 0.0; + this->laptop_torque_lim = 0.0; +} + +override_laptop_2_t( + double as_mission, + double as_state, + double manual_input_torque, + double laptop_powerlimit, + double laptop_torque_lim) { + this->as_mission = as_mission; + this->as_state = as_state; + this->manual_input_torque = manual_input_torque; + this->laptop_powerlimit = laptop_powerlimit; + this->laptop_torque_lim = laptop_torque_lim; +} + +}; +struct override_epsc_cooling_t { + double epsc_manual_angle; + double epsc_mode; + double ac_cooling_enable; + double ts_cooling_enable; + double ac_cooling_pwm; + double ts_cooling_pwm; +override_epsc_cooling_t() { + this->epsc_manual_angle = 0.0; + this->epsc_mode = 0.0; + this->ac_cooling_enable = 0.0; + this->ts_cooling_enable = 0.0; + this->ac_cooling_pwm = 0.0; + this->ts_cooling_pwm = 0.0; +} + +override_epsc_cooling_t( + double epsc_manual_angle, + double epsc_mode, + double ac_cooling_enable, + double ts_cooling_enable, + double ac_cooling_pwm, + double ts_cooling_pwm) { + this->epsc_manual_angle = epsc_manual_angle; + this->epsc_mode = epsc_mode; + this->ac_cooling_enable = ac_cooling_enable; + this->ts_cooling_enable = ts_cooling_enable; + this->ac_cooling_pwm = ac_cooling_pwm; + this->ts_cooling_pwm = ts_cooling_pwm; +} + +}; +struct override_laptop_t { + double fake_r2_d; + double fake_soundbox_emergency; + double fake_soundbox_r2_d; + double fake_ts_active; + double override_apps; + double override_as_mission; + double override_as_state; + double override_epsc_mode; + double override_pdu_ac_cooling_enable; + double override_pdu_acu_enable; + double override_pdu_drs_enable; + double override_pdu_epsc_enable; + double override_pdu_heartbeat; + double override_pdu_lidar_enable; + double override_pdu_pn_v1_enable; + double override_pdu_pn_v2_enable; + double override_pdu_ts_cooling_enable; + double override_power_map; + double override_tc_parameter; + double override_torque_input; +override_laptop_t() { + this->fake_r2_d = 0.0; + this->fake_soundbox_emergency = 0.0; + this->fake_soundbox_r2_d = 0.0; + this->fake_ts_active = 0.0; + this->override_apps = 0.0; + this->override_as_mission = 0.0; + this->override_as_state = 0.0; + this->override_epsc_mode = 0.0; + this->override_pdu_ac_cooling_enable = 0.0; + this->override_pdu_acu_enable = 0.0; + this->override_pdu_drs_enable = 0.0; + this->override_pdu_epsc_enable = 0.0; + this->override_pdu_heartbeat = 0.0; + this->override_pdu_lidar_enable = 0.0; + this->override_pdu_pn_v1_enable = 0.0; + this->override_pdu_pn_v2_enable = 0.0; + this->override_pdu_ts_cooling_enable = 0.0; + this->override_power_map = 0.0; + this->override_tc_parameter = 0.0; + this->override_torque_input = 0.0; +} + +override_laptop_t( + double fake_r2_d, + double fake_soundbox_emergency, + double fake_soundbox_r2_d, + double fake_ts_active, + double override_apps, + double override_as_mission, + double override_as_state, + double override_epsc_mode, + double override_pdu_ac_cooling_enable, + double override_pdu_acu_enable, + double override_pdu_drs_enable, + double override_pdu_epsc_enable, + double override_pdu_heartbeat, + double override_pdu_lidar_enable, + double override_pdu_pn_v1_enable, + double override_pdu_pn_v2_enable, + double override_pdu_ts_cooling_enable, + double override_power_map, + double override_tc_parameter, + double override_torque_input) { + this->fake_r2_d = fake_r2_d; + this->fake_soundbox_emergency = fake_soundbox_emergency; + this->fake_soundbox_r2_d = fake_soundbox_r2_d; + this->fake_ts_active = fake_ts_active; + this->override_apps = override_apps; + this->override_as_mission = override_as_mission; + this->override_as_state = override_as_state; + this->override_epsc_mode = override_epsc_mode; + this->override_pdu_ac_cooling_enable = override_pdu_ac_cooling_enable; + this->override_pdu_acu_enable = override_pdu_acu_enable; + this->override_pdu_drs_enable = override_pdu_drs_enable; + this->override_pdu_epsc_enable = override_pdu_epsc_enable; + this->override_pdu_heartbeat = override_pdu_heartbeat; + this->override_pdu_lidar_enable = override_pdu_lidar_enable; + this->override_pdu_pn_v1_enable = override_pdu_pn_v1_enable; + this->override_pdu_pn_v2_enable = override_pdu_pn_v2_enable; + this->override_pdu_ts_cooling_enable = override_pdu_ts_cooling_enable; + this->override_power_map = override_power_map; + this->override_tc_parameter = override_tc_parameter; + this->override_torque_input = override_torque_input; +} + +}; +struct apps_override_t { + double apps_0_max; + double apps_0_min; + double apps_1_max; + double apps_1_min; +apps_override_t() { + this->apps_0_max = 0.0; + this->apps_0_min = 0.0; + this->apps_1_max = 0.0; + this->apps_1_min = 0.0; +} + +apps_override_t( + double apps_0_max, + double apps_0_min, + double apps_1_max, + double apps_1_min) { + this->apps_0_max = apps_0_max; + this->apps_0_min = apps_0_min; + this->apps_1_max = apps_1_max; + this->apps_1_min = apps_1_min; +} + +}; +struct ftcu_damper_t { + double ftcu_damper_fl; + double ftcu_damper_fr; + double ftcu_damper_rl; + double ftcu_damper_rr; +ftcu_damper_t() { + this->ftcu_damper_fl = 0.0; + this->ftcu_damper_fr = 0.0; + this->ftcu_damper_rl = 0.0; + this->ftcu_damper_rr = 0.0; +} + +ftcu_damper_t( + double ftcu_damper_fl, + double ftcu_damper_fr, + double ftcu_damper_rl, + double ftcu_damper_rr) { + this->ftcu_damper_fl = ftcu_damper_fl; + this->ftcu_damper_fr = ftcu_damper_fr; + this->ftcu_damper_rl = ftcu_damper_rl; + this->ftcu_damper_rr = ftcu_damper_rr; +} + +}; +struct ftcu_param_confirm_t { + double ftcu_param_confirm; +ftcu_param_confirm_t() { + this->ftcu_param_confirm = 0.0; +} + +ftcu_param_confirm_t( + double ftcu_param_confirm) { + this->ftcu_param_confirm = ftcu_param_confirm; +} + +}; +struct sensornode_f_10_hz_t { + double ls_l; + double ls_r; + double sdc_m_pre_bots; + double sdc_m_post_ins; + double sdc_m_post_bspd; + double bdts_fl; + double bdts_fr; +sensornode_f_10_hz_t() { + this->ls_l = 0.0; + this->ls_r = 0.0; + this->sdc_m_pre_bots = 0.0; + this->sdc_m_post_ins = 0.0; + this->sdc_m_post_bspd = 0.0; + this->bdts_fl = 0.0; + this->bdts_fr = 0.0; +} + +sensornode_f_10_hz_t( + double ls_l, + double ls_r, + double sdc_m_pre_bots, + double sdc_m_post_ins, + double sdc_m_post_bspd, + double bdts_fl, + double bdts_fr) { + this->ls_l = ls_l; + this->ls_r = ls_r; + this->sdc_m_pre_bots = sdc_m_pre_bots; + this->sdc_m_post_ins = sdc_m_post_ins; + this->sdc_m_post_bspd = sdc_m_post_bspd; + this->bdts_fl = bdts_fl; + this->bdts_fr = bdts_fr; +} + +}; +struct sensornode_f_100_hz_1_t { + double apps_1; + double apps_2; + double bp_f; + double sas; + double wss_fl; + double wss_fr; +sensornode_f_100_hz_1_t() { + this->apps_1 = 0.0; + this->apps_2 = 0.0; + this->bp_f = 0.0; + this->sas = 0.0; + this->wss_fl = 0.0; + this->wss_fr = 0.0; +} + +sensornode_f_100_hz_1_t( + double apps_1, + double apps_2, + double bp_f, + double sas, + double wss_fl, + double wss_fr) { + this->apps_1 = apps_1; + this->apps_2 = apps_2; + this->bp_f = bp_f; + this->sas = sas; + this->wss_fl = wss_fl; + this->wss_fr = wss_fr; +} + +}; +struct sensornode_f_100_hz_2_t { + double ds_fl; + double ds_fr; +sensornode_f_100_hz_2_t() { + this->ds_fl = 0.0; + this->ds_fr = 0.0; +} + +sensornode_f_100_hz_2_t( + double ds_fl, + double ds_fr) { + this->ds_fl = ds_fl; + this->ds_fr = ds_fr; +} + +}; +struct sensornode_f_1k_hz_t { + double sls_fl; + double sls_fr; +sensornode_f_1k_hz_t() { + this->sls_fl = 0.0; + this->sls_fr = 0.0; +} + +sensornode_f_1k_hz_t( + double sls_fl, + double sls_fr) { + this->sls_fl = sls_fl; + this->sls_fr = sls_fr; +} + +}; +struct sensornode_r_10_hz_t { + double ext_ts_on; + double sdc_m_pre_tsms; + double sdc_m_post_tsms; + double bdts_rl; + double bdts_rr; + double wt_bat; + double wt_dt; + double wp_bat; + double wp_dt; +sensornode_r_10_hz_t() { + this->ext_ts_on = 0.0; + this->sdc_m_pre_tsms = 0.0; + this->sdc_m_post_tsms = 0.0; + this->bdts_rl = 0.0; + this->bdts_rr = 0.0; + this->wt_bat = 0.0; + this->wt_dt = 0.0; + this->wp_bat = 0.0; + this->wp_dt = 0.0; +} + +sensornode_r_10_hz_t( + double ext_ts_on, + double sdc_m_pre_tsms, + double sdc_m_post_tsms, + double bdts_rl, + double bdts_rr, + double wt_bat, + double wt_dt, + double wp_bat, + double wp_dt) { + this->ext_ts_on = ext_ts_on; + this->sdc_m_pre_tsms = sdc_m_pre_tsms; + this->sdc_m_post_tsms = sdc_m_post_tsms; + this->bdts_rl = bdts_rl; + this->bdts_rr = bdts_rr; + this->wt_bat = wt_bat; + this->wt_dt = wt_dt; + this->wp_bat = wp_bat; + this->wp_dt = wp_dt; +} + +}; +struct sensornode_r_100_hz_t { + double ebs_aps_1; + double ebs_aps_2; + double bp_r; + double wss_rl; + double wss_rr; + double ds_rl; + double ds_rr; +sensornode_r_100_hz_t() { + this->ebs_aps_1 = 0.0; + this->ebs_aps_2 = 0.0; + this->bp_r = 0.0; + this->wss_rl = 0.0; + this->wss_rr = 0.0; + this->ds_rl = 0.0; + this->ds_rr = 0.0; +} + +sensornode_r_100_hz_t( + double ebs_aps_1, + double ebs_aps_2, + double bp_r, + double wss_rl, + double wss_rr, + double ds_rl, + double ds_rr) { + this->ebs_aps_1 = ebs_aps_1; + this->ebs_aps_2 = ebs_aps_2; + this->bp_r = bp_r; + this->wss_rl = wss_rl; + this->wss_rr = wss_rr; + this->ds_rl = ds_rl; + this->ds_rr = ds_rr; +} + +}; +struct sensornode_r_1k_hz_t { + double sls_rl; + double sls_rr; +sensornode_r_1k_hz_t() { + this->sls_rl = 0.0; + this->sls_rr = 0.0; +} + +sensornode_r_1k_hz_t( + double sls_rl, + double sls_rr) { + this->sls_rl = sls_rl; + this->sls_rr = sls_rr; +} + +}; +struct pwm_duty_cycle_t { + double dc_drs; + double dc_assi_y; + double dc_assi_b; + double dc_bl; + double dc_fans_dt; + double dc_fans_bat; + double dc_sbx; +pwm_duty_cycle_t() { + this->dc_drs = 0.0; + this->dc_assi_y = 0.0; + this->dc_assi_b = 0.0; + this->dc_bl = 0.0; + this->dc_fans_dt = 0.0; + this->dc_fans_bat = 0.0; + this->dc_sbx = 0.0; +} + +pwm_duty_cycle_t( + double dc_drs, + double dc_assi_y, + double dc_assi_b, + double dc_bl, + double dc_fans_dt, + double dc_fans_bat, + double dc_sbx) { + this->dc_drs = dc_drs; + this->dc_assi_y = dc_assi_y; + this->dc_assi_b = dc_assi_b; + this->dc_bl = dc_bl; + this->dc_fans_dt = dc_fans_dt; + this->dc_fans_bat = dc_fans_bat; + this->dc_sbx = dc_sbx; +} + +}; +struct pwm_config_t { + double freq_pwm1_drs_lighting; + double freq_pwm3_fans; + double freq_pwm2_sbx; +pwm_config_t() { + this->freq_pwm1_drs_lighting = 0.0; + this->freq_pwm3_fans = 0.0; + this->freq_pwm2_sbx = 0.0; +} + +pwm_config_t( + double freq_pwm1_drs_lighting, + double freq_pwm3_fans, + double freq_pwm2_sbx) { + this->freq_pwm1_drs_lighting = freq_pwm1_drs_lighting; + this->freq_pwm3_fans = freq_pwm3_fans; + this->freq_pwm2_sbx = freq_pwm2_sbx; +} + +}; +struct dashboard_in_t { + double dashboard_r2_d_button; + double dashboard_ts_activate_button; + double dashboard_race_key; + double dashboard_sdc_in; + double dashboard_sdc_out; +dashboard_in_t() { + this->dashboard_r2_d_button = 0.0; + this->dashboard_ts_activate_button = 0.0; + this->dashboard_race_key = 0.0; + this->dashboard_sdc_in = 0.0; + this->dashboard_sdc_out = 0.0; +} + +dashboard_in_t( + double dashboard_r2_d_button, + double dashboard_ts_activate_button, + double dashboard_race_key, + double dashboard_sdc_in, + double dashboard_sdc_out) { + this->dashboard_r2_d_button = dashboard_r2_d_button; + this->dashboard_ts_activate_button = dashboard_ts_activate_button; + this->dashboard_race_key = dashboard_race_key; + this->dashboard_sdc_in = dashboard_sdc_in; + this->dashboard_sdc_out = dashboard_sdc_out; +} + +}; +struct ams_slave1_status_t { + double ams_slave_status_error; + double ams_slave_status_id; + double ams_slave_status_temp_sensor; + double ams_slave_status_min_cell_volt; + double ams_slave_status_max_cell_volt; + double ams_slave_status_max_temp; +ams_slave1_status_t() { + this->ams_slave_status_error = 0.0; + this->ams_slave_status_id = 0.0; + this->ams_slave_status_temp_sensor = 0.0; + this->ams_slave_status_min_cell_volt = 0.0; + this->ams_slave_status_max_cell_volt = 0.0; + this->ams_slave_status_max_temp = 0.0; +} + +ams_slave1_status_t( + double ams_slave_status_error, + double ams_slave_status_id, + double ams_slave_status_temp_sensor, + double ams_slave_status_min_cell_volt, + double ams_slave_status_max_cell_volt, + double ams_slave_status_max_temp) { + this->ams_slave_status_error = ams_slave_status_error; + this->ams_slave_status_id = ams_slave_status_id; + this->ams_slave_status_temp_sensor = ams_slave_status_temp_sensor; + this->ams_slave_status_min_cell_volt = ams_slave_status_min_cell_volt; + this->ams_slave_status_max_cell_volt = ams_slave_status_max_cell_volt; + this->ams_slave_status_max_temp = ams_slave_status_max_temp; +} + +}; +struct ams_slave2_log0_t { + double ams_slave_id_v0; + double ams_slave_id_v1; + double ams_slave_id_v2; + double ams_slave_id_v3; +ams_slave2_log0_t() { + this->ams_slave_id_v0 = 0.0; + this->ams_slave_id_v1 = 0.0; + this->ams_slave_id_v2 = 0.0; + this->ams_slave_id_v3 = 0.0; +} + +ams_slave2_log0_t( + double ams_slave_id_v0, + double ams_slave_id_v1, + double ams_slave_id_v2, + double ams_slave_id_v3) { + this->ams_slave_id_v0 = ams_slave_id_v0; + this->ams_slave_id_v1 = ams_slave_id_v1; + this->ams_slave_id_v2 = ams_slave_id_v2; + this->ams_slave_id_v3 = ams_slave_id_v3; +} + +}; +struct ams_slave2_log1_t { + double ams_slave_id_v4; + double ams_slave_id_v5; + double ams_slave_id_v6; + double ams_slave_id_v7; +ams_slave2_log1_t() { + this->ams_slave_id_v4 = 0.0; + this->ams_slave_id_v5 = 0.0; + this->ams_slave_id_v6 = 0.0; + this->ams_slave_id_v7 = 0.0; +} + +ams_slave2_log1_t( + double ams_slave_id_v4, + double ams_slave_id_v5, + double ams_slave_id_v6, + double ams_slave_id_v7) { + this->ams_slave_id_v4 = ams_slave_id_v4; + this->ams_slave_id_v5 = ams_slave_id_v5; + this->ams_slave_id_v6 = ams_slave_id_v6; + this->ams_slave_id_v7 = ams_slave_id_v7; +} + +}; +struct ams_slave2_log2_t { + double ams_slave_id_v8; + double ams_slave_id_v9; + double ams_slave_id_v10; + double ams_slave_id_v11; +ams_slave2_log2_t() { + this->ams_slave_id_v8 = 0.0; + this->ams_slave_id_v9 = 0.0; + this->ams_slave_id_v10 = 0.0; + this->ams_slave_id_v11 = 0.0; +} + +ams_slave2_log2_t( + double ams_slave_id_v8, + double ams_slave_id_v9, + double ams_slave_id_v10, + double ams_slave_id_v11) { + this->ams_slave_id_v8 = ams_slave_id_v8; + this->ams_slave_id_v9 = ams_slave_id_v9; + this->ams_slave_id_v10 = ams_slave_id_v10; + this->ams_slave_id_v11 = ams_slave_id_v11; +} + +}; +struct ams_slave2_log3_t { + double ams_slave_id_v12; + double ams_slave_id_v13; + double ams_slave_id_v14; + double ams_slave_id_v15; +ams_slave2_log3_t() { + this->ams_slave_id_v12 = 0.0; + this->ams_slave_id_v13 = 0.0; + this->ams_slave_id_v14 = 0.0; + this->ams_slave_id_v15 = 0.0; +} + +ams_slave2_log3_t( + double ams_slave_id_v12, + double ams_slave_id_v13, + double ams_slave_id_v14, + double ams_slave_id_v15) { + this->ams_slave_id_v12 = ams_slave_id_v12; + this->ams_slave_id_v13 = ams_slave_id_v13; + this->ams_slave_id_v14 = ams_slave_id_v14; + this->ams_slave_id_v15 = ams_slave_id_v15; +} + +}; +struct ams_slave2_log4_t { + double ams_slave_id_failed_sensors; +ams_slave2_log4_t() { + this->ams_slave_id_failed_sensors = 0.0; +} + +ams_slave2_log4_t( + double ams_slave_id_failed_sensors) { + this->ams_slave_id_failed_sensors = ams_slave_id_failed_sensors; +} + +}; +struct ams_slave2_log5_t { + double ams_slave_id_t0; + double ams_slave_id_t1; + double ams_slave_id_t2; + double ams_slave_id_t3; + double ams_slave_id_t4; + double ams_slave_id_t5; + double ams_slave_id_t6; + double ams_slave_id_t7; +ams_slave2_log5_t() { + this->ams_slave_id_t0 = 0.0; + this->ams_slave_id_t1 = 0.0; + this->ams_slave_id_t2 = 0.0; + this->ams_slave_id_t3 = 0.0; + this->ams_slave_id_t4 = 0.0; + this->ams_slave_id_t5 = 0.0; + this->ams_slave_id_t6 = 0.0; + this->ams_slave_id_t7 = 0.0; +} + +ams_slave2_log5_t( + double ams_slave_id_t0, + double ams_slave_id_t1, + double ams_slave_id_t2, + double ams_slave_id_t3, + double ams_slave_id_t4, + double ams_slave_id_t5, + double ams_slave_id_t6, + double ams_slave_id_t7) { + this->ams_slave_id_t0 = ams_slave_id_t0; + this->ams_slave_id_t1 = ams_slave_id_t1; + this->ams_slave_id_t2 = ams_slave_id_t2; + this->ams_slave_id_t3 = ams_slave_id_t3; + this->ams_slave_id_t4 = ams_slave_id_t4; + this->ams_slave_id_t5 = ams_slave_id_t5; + this->ams_slave_id_t6 = ams_slave_id_t6; + this->ams_slave_id_t7 = ams_slave_id_t7; +} + +}; +struct ams_slave5_log6_t { + double ams_slave_id_t8; + double ams_slave_id_t9; +ams_slave5_log6_t() { + this->ams_slave_id_t8 = 0.0; + this->ams_slave_id_t9 = 0.0; +} + +ams_slave5_log6_t( + double ams_slave_id_t8, + double ams_slave_id_t9) { + this->ams_slave_id_t8 = ams_slave_id_t8; + this->ams_slave_id_t9 = ams_slave_id_t9; +} + +}; +struct ams_slave4_log6_t { + double ams_slave_id_t8; + double ams_slave_id_t9; +ams_slave4_log6_t() { + this->ams_slave_id_t8 = 0.0; + this->ams_slave_id_t9 = 0.0; +} + +ams_slave4_log6_t( + double ams_slave_id_t8, + double ams_slave_id_t9) { + this->ams_slave_id_t8 = ams_slave_id_t8; + this->ams_slave_id_t9 = ams_slave_id_t9; +} + +}; +struct ams_slave3_log6_t { + double ams_slave_id_t8; + double ams_slave_id_t9; +ams_slave3_log6_t() { + this->ams_slave_id_t8 = 0.0; + this->ams_slave_id_t9 = 0.0; +} + +ams_slave3_log6_t( + double ams_slave_id_t8, + double ams_slave_id_t9) { + this->ams_slave_id_t8 = ams_slave_id_t8; + this->ams_slave_id_t9 = ams_slave_id_t9; +} + +}; +struct ams_slave2_log6_t { + double ams_slave_id_t8; + double ams_slave_id_t9; +ams_slave2_log6_t() { + this->ams_slave_id_t8 = 0.0; + this->ams_slave_id_t9 = 0.0; +} + +ams_slave2_log6_t( + double ams_slave_id_t8, + double ams_slave_id_t9) { + this->ams_slave_id_t8 = ams_slave_id_t8; + this->ams_slave_id_t9 = ams_slave_id_t9; +} + +}; +struct ams_slave1_log6_t { + double ams_slave_id_t8; + double ams_slave_id_t9; +ams_slave1_log6_t() { + this->ams_slave_id_t8 = 0.0; + this->ams_slave_id_t9 = 0.0; +} + +ams_slave1_log6_t( + double ams_slave_id_t8, + double ams_slave_id_t9) { + this->ams_slave_id_t8 = ams_slave_id_t8; + this->ams_slave_id_t9 = ams_slave_id_t9; +} + +}; +struct ams_slave5_log5_t { + double ams_slave_id_t0; + double ams_slave_id_t1; + double ams_slave_id_t2; + double ams_slave_id_t3; + double ams_slave_id_t4; + double ams_slave_id_t5; + double ams_slave_id_t6; + double ams_slave_id_t7; +ams_slave5_log5_t() { + this->ams_slave_id_t0 = 0.0; + this->ams_slave_id_t1 = 0.0; + this->ams_slave_id_t2 = 0.0; + this->ams_slave_id_t3 = 0.0; + this->ams_slave_id_t4 = 0.0; + this->ams_slave_id_t5 = 0.0; + this->ams_slave_id_t6 = 0.0; + this->ams_slave_id_t7 = 0.0; +} + +ams_slave5_log5_t( + double ams_slave_id_t0, + double ams_slave_id_t1, + double ams_slave_id_t2, + double ams_slave_id_t3, + double ams_slave_id_t4, + double ams_slave_id_t5, + double ams_slave_id_t6, + double ams_slave_id_t7) { + this->ams_slave_id_t0 = ams_slave_id_t0; + this->ams_slave_id_t1 = ams_slave_id_t1; + this->ams_slave_id_t2 = ams_slave_id_t2; + this->ams_slave_id_t3 = ams_slave_id_t3; + this->ams_slave_id_t4 = ams_slave_id_t4; + this->ams_slave_id_t5 = ams_slave_id_t5; + this->ams_slave_id_t6 = ams_slave_id_t6; + this->ams_slave_id_t7 = ams_slave_id_t7; +} + +}; +struct ams_slave4_log5_t { + double ams_slave_id_t0; + double ams_slave_id_t1; + double ams_slave_id_t2; + double ams_slave_id_t3; + double ams_slave_id_t4; + double ams_slave_id_t5; + double ams_slave_id_t6; + double ams_slave_id_t7; +ams_slave4_log5_t() { + this->ams_slave_id_t0 = 0.0; + this->ams_slave_id_t1 = 0.0; + this->ams_slave_id_t2 = 0.0; + this->ams_slave_id_t3 = 0.0; + this->ams_slave_id_t4 = 0.0; + this->ams_slave_id_t5 = 0.0; + this->ams_slave_id_t6 = 0.0; + this->ams_slave_id_t7 = 0.0; +} + +ams_slave4_log5_t( + double ams_slave_id_t0, + double ams_slave_id_t1, + double ams_slave_id_t2, + double ams_slave_id_t3, + double ams_slave_id_t4, + double ams_slave_id_t5, + double ams_slave_id_t6, + double ams_slave_id_t7) { + this->ams_slave_id_t0 = ams_slave_id_t0; + this->ams_slave_id_t1 = ams_slave_id_t1; + this->ams_slave_id_t2 = ams_slave_id_t2; + this->ams_slave_id_t3 = ams_slave_id_t3; + this->ams_slave_id_t4 = ams_slave_id_t4; + this->ams_slave_id_t5 = ams_slave_id_t5; + this->ams_slave_id_t6 = ams_slave_id_t6; + this->ams_slave_id_t7 = ams_slave_id_t7; +} + +}; +struct ams_slave3_log5_t { + double ams_slave_id_t0; + double ams_slave_id_t1; + double ams_slave_id_t2; + double ams_slave_id_t3; + double ams_slave_id_t4; + double ams_slave_id_t5; + double ams_slave_id_t6; + double ams_slave_id_t7; +ams_slave3_log5_t() { + this->ams_slave_id_t0 = 0.0; + this->ams_slave_id_t1 = 0.0; + this->ams_slave_id_t2 = 0.0; + this->ams_slave_id_t3 = 0.0; + this->ams_slave_id_t4 = 0.0; + this->ams_slave_id_t5 = 0.0; + this->ams_slave_id_t6 = 0.0; + this->ams_slave_id_t7 = 0.0; +} + +ams_slave3_log5_t( + double ams_slave_id_t0, + double ams_slave_id_t1, + double ams_slave_id_t2, + double ams_slave_id_t3, + double ams_slave_id_t4, + double ams_slave_id_t5, + double ams_slave_id_t6, + double ams_slave_id_t7) { + this->ams_slave_id_t0 = ams_slave_id_t0; + this->ams_slave_id_t1 = ams_slave_id_t1; + this->ams_slave_id_t2 = ams_slave_id_t2; + this->ams_slave_id_t3 = ams_slave_id_t3; + this->ams_slave_id_t4 = ams_slave_id_t4; + this->ams_slave_id_t5 = ams_slave_id_t5; + this->ams_slave_id_t6 = ams_slave_id_t6; + this->ams_slave_id_t7 = ams_slave_id_t7; +} + +}; +struct ams_slave1_log5_t { + double ams_slave_id_t0; + double ams_slave_id_t1; + double ams_slave_id_t2; + double ams_slave_id_t3; + double ams_slave_id_t4; + double ams_slave_id_t5; + double ams_slave_id_t6; + double ams_slave_id_t7; +ams_slave1_log5_t() { + this->ams_slave_id_t0 = 0.0; + this->ams_slave_id_t1 = 0.0; + this->ams_slave_id_t2 = 0.0; + this->ams_slave_id_t3 = 0.0; + this->ams_slave_id_t4 = 0.0; + this->ams_slave_id_t5 = 0.0; + this->ams_slave_id_t6 = 0.0; + this->ams_slave_id_t7 = 0.0; +} + +ams_slave1_log5_t( + double ams_slave_id_t0, + double ams_slave_id_t1, + double ams_slave_id_t2, + double ams_slave_id_t3, + double ams_slave_id_t4, + double ams_slave_id_t5, + double ams_slave_id_t6, + double ams_slave_id_t7) { + this->ams_slave_id_t0 = ams_slave_id_t0; + this->ams_slave_id_t1 = ams_slave_id_t1; + this->ams_slave_id_t2 = ams_slave_id_t2; + this->ams_slave_id_t3 = ams_slave_id_t3; + this->ams_slave_id_t4 = ams_slave_id_t4; + this->ams_slave_id_t5 = ams_slave_id_t5; + this->ams_slave_id_t6 = ams_slave_id_t6; + this->ams_slave_id_t7 = ams_slave_id_t7; +} + +}; +struct ams_slave5_log4_t { + double ams_slave_id_failed_sensors; +ams_slave5_log4_t() { + this->ams_slave_id_failed_sensors = 0.0; +} + +ams_slave5_log4_t( + double ams_slave_id_failed_sensors) { + this->ams_slave_id_failed_sensors = ams_slave_id_failed_sensors; +} + +}; +struct ams_slave4_log4_t { + double ams_slave_id_failed_sensors; +ams_slave4_log4_t() { + this->ams_slave_id_failed_sensors = 0.0; +} + +ams_slave4_log4_t( + double ams_slave_id_failed_sensors) { + this->ams_slave_id_failed_sensors = ams_slave_id_failed_sensors; +} + +}; +struct ams_slave3_log4_t { + double ams_slave_id_failed_sensors; +ams_slave3_log4_t() { + this->ams_slave_id_failed_sensors = 0.0; +} + +ams_slave3_log4_t( + double ams_slave_id_failed_sensors) { + this->ams_slave_id_failed_sensors = ams_slave_id_failed_sensors; +} + +}; +struct ams_slave1_log4_t { + double ams_slave_id_failed_sensors; +ams_slave1_log4_t() { + this->ams_slave_id_failed_sensors = 0.0; +} + +ams_slave1_log4_t( + double ams_slave_id_failed_sensors) { + this->ams_slave_id_failed_sensors = ams_slave_id_failed_sensors; +} + +}; +struct ams_slave5_log3_t { + double ams_slave_id_v12; + double ams_slave_id_v13; + double ams_slave_id_v14; + double ams_slave_id_v15; +ams_slave5_log3_t() { + this->ams_slave_id_v12 = 0.0; + this->ams_slave_id_v13 = 0.0; + this->ams_slave_id_v14 = 0.0; + this->ams_slave_id_v15 = 0.0; +} + +ams_slave5_log3_t( + double ams_slave_id_v12, + double ams_slave_id_v13, + double ams_slave_id_v14, + double ams_slave_id_v15) { + this->ams_slave_id_v12 = ams_slave_id_v12; + this->ams_slave_id_v13 = ams_slave_id_v13; + this->ams_slave_id_v14 = ams_slave_id_v14; + this->ams_slave_id_v15 = ams_slave_id_v15; +} + +}; +struct ams_slave4_log3_t { + double ams_slave_id_v12; + double ams_slave_id_v13; + double ams_slave_id_v14; + double ams_slave_id_v15; +ams_slave4_log3_t() { + this->ams_slave_id_v12 = 0.0; + this->ams_slave_id_v13 = 0.0; + this->ams_slave_id_v14 = 0.0; + this->ams_slave_id_v15 = 0.0; +} + +ams_slave4_log3_t( + double ams_slave_id_v12, + double ams_slave_id_v13, + double ams_slave_id_v14, + double ams_slave_id_v15) { + this->ams_slave_id_v12 = ams_slave_id_v12; + this->ams_slave_id_v13 = ams_slave_id_v13; + this->ams_slave_id_v14 = ams_slave_id_v14; + this->ams_slave_id_v15 = ams_slave_id_v15; +} + +}; +struct ams_slave3_log3_t { + double ams_slave_id_v12; + double ams_slave_id_v13; + double ams_slave_id_v14; + double ams_slave_id_v15; +ams_slave3_log3_t() { + this->ams_slave_id_v12 = 0.0; + this->ams_slave_id_v13 = 0.0; + this->ams_slave_id_v14 = 0.0; + this->ams_slave_id_v15 = 0.0; +} + +ams_slave3_log3_t( + double ams_slave_id_v12, + double ams_slave_id_v13, + double ams_slave_id_v14, + double ams_slave_id_v15) { + this->ams_slave_id_v12 = ams_slave_id_v12; + this->ams_slave_id_v13 = ams_slave_id_v13; + this->ams_slave_id_v14 = ams_slave_id_v14; + this->ams_slave_id_v15 = ams_slave_id_v15; +} + +}; +struct ams_slave1_log3_t { + double ams_slave_id_v12; + double ams_slave_id_v13; + double ams_slave_id_v14; + double ams_slave_id_v15; +ams_slave1_log3_t() { + this->ams_slave_id_v12 = 0.0; + this->ams_slave_id_v13 = 0.0; + this->ams_slave_id_v14 = 0.0; + this->ams_slave_id_v15 = 0.0; +} + +ams_slave1_log3_t( + double ams_slave_id_v12, + double ams_slave_id_v13, + double ams_slave_id_v14, + double ams_slave_id_v15) { + this->ams_slave_id_v12 = ams_slave_id_v12; + this->ams_slave_id_v13 = ams_slave_id_v13; + this->ams_slave_id_v14 = ams_slave_id_v14; + this->ams_slave_id_v15 = ams_slave_id_v15; +} + +}; +struct ams_slave5_log2_t { + double ams_slave_id_v8; + double ams_slave_id_v9; + double ams_slave_id_v10; + double ams_slave_id_v11; +ams_slave5_log2_t() { + this->ams_slave_id_v8 = 0.0; + this->ams_slave_id_v9 = 0.0; + this->ams_slave_id_v10 = 0.0; + this->ams_slave_id_v11 = 0.0; +} + +ams_slave5_log2_t( + double ams_slave_id_v8, + double ams_slave_id_v9, + double ams_slave_id_v10, + double ams_slave_id_v11) { + this->ams_slave_id_v8 = ams_slave_id_v8; + this->ams_slave_id_v9 = ams_slave_id_v9; + this->ams_slave_id_v10 = ams_slave_id_v10; + this->ams_slave_id_v11 = ams_slave_id_v11; +} + +}; +struct ams_slave4_log2_t { + double ams_slave_id_v8; + double ams_slave_id_v9; + double ams_slave_id_v10; + double ams_slave_id_v11; +ams_slave4_log2_t() { + this->ams_slave_id_v8 = 0.0; + this->ams_slave_id_v9 = 0.0; + this->ams_slave_id_v10 = 0.0; + this->ams_slave_id_v11 = 0.0; +} + +ams_slave4_log2_t( + double ams_slave_id_v8, + double ams_slave_id_v9, + double ams_slave_id_v10, + double ams_slave_id_v11) { + this->ams_slave_id_v8 = ams_slave_id_v8; + this->ams_slave_id_v9 = ams_slave_id_v9; + this->ams_slave_id_v10 = ams_slave_id_v10; + this->ams_slave_id_v11 = ams_slave_id_v11; +} + +}; +struct ams_slave3_log2_t { + double ams_slave_id_v8; + double ams_slave_id_v9; + double ams_slave_id_v10; + double ams_slave_id_v11; +ams_slave3_log2_t() { + this->ams_slave_id_v8 = 0.0; + this->ams_slave_id_v9 = 0.0; + this->ams_slave_id_v10 = 0.0; + this->ams_slave_id_v11 = 0.0; +} + +ams_slave3_log2_t( + double ams_slave_id_v8, + double ams_slave_id_v9, + double ams_slave_id_v10, + double ams_slave_id_v11) { + this->ams_slave_id_v8 = ams_slave_id_v8; + this->ams_slave_id_v9 = ams_slave_id_v9; + this->ams_slave_id_v10 = ams_slave_id_v10; + this->ams_slave_id_v11 = ams_slave_id_v11; +} + +}; +struct ams_slave1_log2_t { + double ams_slave_id_v8; + double ams_slave_id_v9; + double ams_slave_id_v10; + double ams_slave_id_v11; +ams_slave1_log2_t() { + this->ams_slave_id_v8 = 0.0; + this->ams_slave_id_v9 = 0.0; + this->ams_slave_id_v10 = 0.0; + this->ams_slave_id_v11 = 0.0; +} + +ams_slave1_log2_t( + double ams_slave_id_v8, + double ams_slave_id_v9, + double ams_slave_id_v10, + double ams_slave_id_v11) { + this->ams_slave_id_v8 = ams_slave_id_v8; + this->ams_slave_id_v9 = ams_slave_id_v9; + this->ams_slave_id_v10 = ams_slave_id_v10; + this->ams_slave_id_v11 = ams_slave_id_v11; +} + +}; +struct ams_slave5_log1_t { + double ams_slave_id_v4; + double ams_slave_id_v5; + double ams_slave_id_v6; + double ams_slave_id_v7; +ams_slave5_log1_t() { + this->ams_slave_id_v4 = 0.0; + this->ams_slave_id_v5 = 0.0; + this->ams_slave_id_v6 = 0.0; + this->ams_slave_id_v7 = 0.0; +} + +ams_slave5_log1_t( + double ams_slave_id_v4, + double ams_slave_id_v5, + double ams_slave_id_v6, + double ams_slave_id_v7) { + this->ams_slave_id_v4 = ams_slave_id_v4; + this->ams_slave_id_v5 = ams_slave_id_v5; + this->ams_slave_id_v6 = ams_slave_id_v6; + this->ams_slave_id_v7 = ams_slave_id_v7; +} + +}; +struct ams_slave4_log1_t { + double ams_slave_id_v4; + double ams_slave_id_v5; + double ams_slave_id_v6; + double ams_slave_id_v7; +ams_slave4_log1_t() { + this->ams_slave_id_v4 = 0.0; + this->ams_slave_id_v5 = 0.0; + this->ams_slave_id_v6 = 0.0; + this->ams_slave_id_v7 = 0.0; +} + +ams_slave4_log1_t( + double ams_slave_id_v4, + double ams_slave_id_v5, + double ams_slave_id_v6, + double ams_slave_id_v7) { + this->ams_slave_id_v4 = ams_slave_id_v4; + this->ams_slave_id_v5 = ams_slave_id_v5; + this->ams_slave_id_v6 = ams_slave_id_v6; + this->ams_slave_id_v7 = ams_slave_id_v7; +} + +}; +struct ams_slave3_log1_t { + double ams_slave_id_v4; + double ams_slave_id_v5; + double ams_slave_id_v6; + double ams_slave_id_v7; +ams_slave3_log1_t() { + this->ams_slave_id_v4 = 0.0; + this->ams_slave_id_v5 = 0.0; + this->ams_slave_id_v6 = 0.0; + this->ams_slave_id_v7 = 0.0; +} + +ams_slave3_log1_t( + double ams_slave_id_v4, + double ams_slave_id_v5, + double ams_slave_id_v6, + double ams_slave_id_v7) { + this->ams_slave_id_v4 = ams_slave_id_v4; + this->ams_slave_id_v5 = ams_slave_id_v5; + this->ams_slave_id_v6 = ams_slave_id_v6; + this->ams_slave_id_v7 = ams_slave_id_v7; +} + +}; +struct ams_slave1_log1_t { + double ams_slave_id_v4; + double ams_slave_id_v5; + double ams_slave_id_v6; + double ams_slave_id_v7; +ams_slave1_log1_t() { + this->ams_slave_id_v4 = 0.0; + this->ams_slave_id_v5 = 0.0; + this->ams_slave_id_v6 = 0.0; + this->ams_slave_id_v7 = 0.0; +} + +ams_slave1_log1_t( + double ams_slave_id_v4, + double ams_slave_id_v5, + double ams_slave_id_v6, + double ams_slave_id_v7) { + this->ams_slave_id_v4 = ams_slave_id_v4; + this->ams_slave_id_v5 = ams_slave_id_v5; + this->ams_slave_id_v6 = ams_slave_id_v6; + this->ams_slave_id_v7 = ams_slave_id_v7; +} + +}; +struct ams_slave5_log0_t { + double ams_slave_id_v0; + double ams_slave_id_v1; + double ams_slave_id_v2; + double ams_slave_id_v3; +ams_slave5_log0_t() { + this->ams_slave_id_v0 = 0.0; + this->ams_slave_id_v1 = 0.0; + this->ams_slave_id_v2 = 0.0; + this->ams_slave_id_v3 = 0.0; +} + +ams_slave5_log0_t( + double ams_slave_id_v0, + double ams_slave_id_v1, + double ams_slave_id_v2, + double ams_slave_id_v3) { + this->ams_slave_id_v0 = ams_slave_id_v0; + this->ams_slave_id_v1 = ams_slave_id_v1; + this->ams_slave_id_v2 = ams_slave_id_v2; + this->ams_slave_id_v3 = ams_slave_id_v3; +} + +}; +struct ams_slave4_log0_t { + double ams_slave_id_v0; + double ams_slave_id_v1; + double ams_slave_id_v2; + double ams_slave_id_v3; +ams_slave4_log0_t() { + this->ams_slave_id_v0 = 0.0; + this->ams_slave_id_v1 = 0.0; + this->ams_slave_id_v2 = 0.0; + this->ams_slave_id_v3 = 0.0; +} + +ams_slave4_log0_t( + double ams_slave_id_v0, + double ams_slave_id_v1, + double ams_slave_id_v2, + double ams_slave_id_v3) { + this->ams_slave_id_v0 = ams_slave_id_v0; + this->ams_slave_id_v1 = ams_slave_id_v1; + this->ams_slave_id_v2 = ams_slave_id_v2; + this->ams_slave_id_v3 = ams_slave_id_v3; +} + +}; +struct ams_slave3_log0_t { + double ams_slave_id_v0; + double ams_slave_id_v1; + double ams_slave_id_v2; + double ams_slave_id_v3; +ams_slave3_log0_t() { + this->ams_slave_id_v0 = 0.0; + this->ams_slave_id_v1 = 0.0; + this->ams_slave_id_v2 = 0.0; + this->ams_slave_id_v3 = 0.0; +} + +ams_slave3_log0_t( + double ams_slave_id_v0, + double ams_slave_id_v1, + double ams_slave_id_v2, + double ams_slave_id_v3) { + this->ams_slave_id_v0 = ams_slave_id_v0; + this->ams_slave_id_v1 = ams_slave_id_v1; + this->ams_slave_id_v2 = ams_slave_id_v2; + this->ams_slave_id_v3 = ams_slave_id_v3; +} + +}; +struct ams_slave1_log0_t { + double ams_slave_id_v0; + double ams_slave_id_v1; + double ams_slave_id_v2; + double ams_slave_id_v3; +ams_slave1_log0_t() { + this->ams_slave_id_v0 = 0.0; + this->ams_slave_id_v1 = 0.0; + this->ams_slave_id_v2 = 0.0; + this->ams_slave_id_v3 = 0.0; +} + +ams_slave1_log0_t( + double ams_slave_id_v0, + double ams_slave_id_v1, + double ams_slave_id_v2, + double ams_slave_id_v3) { + this->ams_slave_id_v0 = ams_slave_id_v0; + this->ams_slave_id_v1 = ams_slave_id_v1; + this->ams_slave_id_v2 = ams_slave_id_v2; + this->ams_slave_id_v3 = ams_slave_id_v3; +} + +}; +struct pdu_heartbeat_t { + double pdu_heartbeat; +pdu_heartbeat_t() { + this->pdu_heartbeat = 0.0; +} + +pdu_heartbeat_t( + double pdu_heartbeat) { + this->pdu_heartbeat = pdu_heartbeat; +} + +}; +struct ftcu_pneumatik_t { + double ftcu_tank_pressure_1; + double ftcu_tank_pressure_2; +ftcu_pneumatik_t() { + this->ftcu_tank_pressure_1 = 0.0; + this->ftcu_tank_pressure_2 = 0.0; +} + +ftcu_pneumatik_t( + double ftcu_tank_pressure_1, + double ftcu_tank_pressure_2) { + this->ftcu_tank_pressure_1 = ftcu_tank_pressure_1; + this->ftcu_tank_pressure_2 = ftcu_tank_pressure_2; +} + +}; +struct acu_tx_commands_t { + double abx_speed_fl; + double abx_speed_fr; + double abx_speed_rl; + double abx_speed_rr; + double abx_steering_angle_left; + double abx_steering_angle_right; +acu_tx_commands_t() { + this->abx_speed_fl = 0.0; + this->abx_speed_fr = 0.0; + this->abx_speed_rl = 0.0; + this->abx_speed_rr = 0.0; + this->abx_steering_angle_left = 0.0; + this->abx_steering_angle_right = 0.0; +} + +acu_tx_commands_t( + double abx_speed_fl, + double abx_speed_fr, + double abx_speed_rl, + double abx_speed_rr, + double abx_steering_angle_left, + double abx_steering_angle_right) { + this->abx_speed_fl = abx_speed_fl; + this->abx_speed_fr = abx_speed_fr; + this->abx_speed_rl = abx_speed_rl; + this->abx_speed_rr = abx_speed_rr; + this->abx_steering_angle_left = abx_steering_angle_left; + this->abx_steering_angle_right = abx_steering_angle_right; +} + +}; +struct acu_rx_commands_t { + double acu_speed_target_left; + double acu_speed_target_right; + double acu_steering_angle_right; + double acu_steering_angle_left; +acu_rx_commands_t() { + this->acu_speed_target_left = 0.0; + this->acu_speed_target_right = 0.0; + this->acu_steering_angle_right = 0.0; + this->acu_steering_angle_left = 0.0; +} + +acu_rx_commands_t( + double acu_speed_target_left, + double acu_speed_target_right, + double acu_steering_angle_right, + double acu_steering_angle_left) { + this->acu_speed_target_left = acu_speed_target_left; + this->acu_speed_target_right = acu_speed_target_right; + this->acu_steering_angle_right = acu_steering_angle_right; + this->acu_steering_angle_left = acu_steering_angle_left; +} + +}; +struct acu_rx_t { + double acu_as_mission_complete; + double acu_as_ok; + double acu_drs; + double acu_lap_count; + double acu_cones_all; + double acu_cones_actual; +acu_rx_t() { + this->acu_as_mission_complete = 0.0; + this->acu_as_ok = 0.0; + this->acu_drs = 0.0; + this->acu_lap_count = 0.0; + this->acu_cones_all = 0.0; + this->acu_cones_actual = 0.0; +} + +acu_rx_t( + double acu_as_mission_complete, + double acu_as_ok, + double acu_drs, + double acu_lap_count, + double acu_cones_all, + double acu_cones_actual) { + this->acu_as_mission_complete = acu_as_mission_complete; + this->acu_as_ok = acu_as_ok; + this->acu_drs = acu_drs; + this->acu_lap_count = acu_lap_count; + this->acu_cones_all = acu_cones_all; + this->acu_cones_actual = acu_cones_actual; +} + +}; +struct ams_slave0_log0_t { + double ams_slave_id_v0; + double ams_slave_id_v1; + double ams_slave_id_v2; + double ams_slave_id_v3; +ams_slave0_log0_t() { + this->ams_slave_id_v0 = 0.0; + this->ams_slave_id_v1 = 0.0; + this->ams_slave_id_v2 = 0.0; + this->ams_slave_id_v3 = 0.0; +} + +ams_slave0_log0_t( + double ams_slave_id_v0, + double ams_slave_id_v1, + double ams_slave_id_v2, + double ams_slave_id_v3) { + this->ams_slave_id_v0 = ams_slave_id_v0; + this->ams_slave_id_v1 = ams_slave_id_v1; + this->ams_slave_id_v2 = ams_slave_id_v2; + this->ams_slave_id_v3 = ams_slave_id_v3; +} + +}; +struct ams_slave0_log1_t { + double ams_slave_id_v4; + double ams_slave_id_v5; + double ams_slave_id_v6; + double ams_slave_id_v7; +ams_slave0_log1_t() { + this->ams_slave_id_v4 = 0.0; + this->ams_slave_id_v5 = 0.0; + this->ams_slave_id_v6 = 0.0; + this->ams_slave_id_v7 = 0.0; +} + +ams_slave0_log1_t( + double ams_slave_id_v4, + double ams_slave_id_v5, + double ams_slave_id_v6, + double ams_slave_id_v7) { + this->ams_slave_id_v4 = ams_slave_id_v4; + this->ams_slave_id_v5 = ams_slave_id_v5; + this->ams_slave_id_v6 = ams_slave_id_v6; + this->ams_slave_id_v7 = ams_slave_id_v7; +} + +}; +struct ams_slave0_log3_t { + double ams_slave_id_v12; + double ams_slave_id_v13; + double ams_slave_id_v14; + double ams_slave_id_v15; +ams_slave0_log3_t() { + this->ams_slave_id_v12 = 0.0; + this->ams_slave_id_v13 = 0.0; + this->ams_slave_id_v14 = 0.0; + this->ams_slave_id_v15 = 0.0; +} + +ams_slave0_log3_t( + double ams_slave_id_v12, + double ams_slave_id_v13, + double ams_slave_id_v14, + double ams_slave_id_v15) { + this->ams_slave_id_v12 = ams_slave_id_v12; + this->ams_slave_id_v13 = ams_slave_id_v13; + this->ams_slave_id_v14 = ams_slave_id_v14; + this->ams_slave_id_v15 = ams_slave_id_v15; +} + +}; +struct ams_slave0_log4_t { + double ams_slave_id_failed_sensors; +ams_slave0_log4_t() { + this->ams_slave_id_failed_sensors = 0.0; +} + +ams_slave0_log4_t( + double ams_slave_id_failed_sensors) { + this->ams_slave_id_failed_sensors = ams_slave_id_failed_sensors; +} + +}; +struct ams_slave0_log5_t { + double ams_slave_id_t0; + double ams_slave_id_t1; + double ams_slave_id_t2; + double ams_slave_id_t3; + double ams_slave_id_t4; + double ams_slave_id_t5; + double ams_slave_id_t6; + double ams_slave_id_t7; +ams_slave0_log5_t() { + this->ams_slave_id_t0 = 0.0; + this->ams_slave_id_t1 = 0.0; + this->ams_slave_id_t2 = 0.0; + this->ams_slave_id_t3 = 0.0; + this->ams_slave_id_t4 = 0.0; + this->ams_slave_id_t5 = 0.0; + this->ams_slave_id_t6 = 0.0; + this->ams_slave_id_t7 = 0.0; +} + +ams_slave0_log5_t( + double ams_slave_id_t0, + double ams_slave_id_t1, + double ams_slave_id_t2, + double ams_slave_id_t3, + double ams_slave_id_t4, + double ams_slave_id_t5, + double ams_slave_id_t6, + double ams_slave_id_t7) { + this->ams_slave_id_t0 = ams_slave_id_t0; + this->ams_slave_id_t1 = ams_slave_id_t1; + this->ams_slave_id_t2 = ams_slave_id_t2; + this->ams_slave_id_t3 = ams_slave_id_t3; + this->ams_slave_id_t4 = ams_slave_id_t4; + this->ams_slave_id_t5 = ams_slave_id_t5; + this->ams_slave_id_t6 = ams_slave_id_t6; + this->ams_slave_id_t7 = ams_slave_id_t7; +} + +}; +struct ams_slave0_log6_t { + double ams_slave_id_t8; + double ams_slave_id_t9; +ams_slave0_log6_t() { + this->ams_slave_id_t8 = 0.0; + this->ams_slave_id_t9 = 0.0; +} + +ams_slave0_log6_t( + double ams_slave_id_t8, + double ams_slave_id_t9) { + this->ams_slave_id_t8 = ams_slave_id_t8; + this->ams_slave_id_t9 = ams_slave_id_t9; +} + +}; +struct acu_tx_t { + double acu_as_mission; + double acu_as_state; + double acu_power_off; + double acu_reset; + double acu_allow_torque; + double abx_con_mon_error; +acu_tx_t() { + this->acu_as_mission = 0.0; + this->acu_as_state = 0.0; + this->acu_power_off = 0.0; + this->acu_reset = 0.0; + this->acu_allow_torque = 0.0; + this->abx_con_mon_error = 0.0; +} + +acu_tx_t( + double acu_as_mission, + double acu_as_state, + double acu_power_off, + double acu_reset, + double acu_allow_torque, + double abx_con_mon_error) { + this->acu_as_mission = acu_as_mission; + this->acu_as_state = acu_as_state; + this->acu_power_off = acu_power_off; + this->acu_reset = acu_reset; + this->acu_allow_torque = acu_allow_torque; + this->abx_con_mon_error = abx_con_mon_error; +} + +}; +struct ams_slave5_status_t { + double ams_slave_status_error; + double ams_slave_status_id; + double ams_slave_status_temp_sensor; + double ams_slave_status_min_cell_volt; + double ams_slave_status_max_cell_volt; + double ams_slave_status_max_temp; +ams_slave5_status_t() { + this->ams_slave_status_error = 0.0; + this->ams_slave_status_id = 0.0; + this->ams_slave_status_temp_sensor = 0.0; + this->ams_slave_status_min_cell_volt = 0.0; + this->ams_slave_status_max_cell_volt = 0.0; + this->ams_slave_status_max_temp = 0.0; +} + +ams_slave5_status_t( + double ams_slave_status_error, + double ams_slave_status_id, + double ams_slave_status_temp_sensor, + double ams_slave_status_min_cell_volt, + double ams_slave_status_max_cell_volt, + double ams_slave_status_max_temp) { + this->ams_slave_status_error = ams_slave_status_error; + this->ams_slave_status_id = ams_slave_status_id; + this->ams_slave_status_temp_sensor = ams_slave_status_temp_sensor; + this->ams_slave_status_min_cell_volt = ams_slave_status_min_cell_volt; + this->ams_slave_status_max_cell_volt = ams_slave_status_max_cell_volt; + this->ams_slave_status_max_temp = ams_slave_status_max_temp; +} + +}; +struct ams_slave4_status_t { + double ams_slave_status_error; + double ams_slave_status_id; + double ams_slave_status_temp_sensor; + double ams_slave_status_min_cell_volt; + double ams_slave_status_max_cell_volt; + double ams_slave_status_max_temp; +ams_slave4_status_t() { + this->ams_slave_status_error = 0.0; + this->ams_slave_status_id = 0.0; + this->ams_slave_status_temp_sensor = 0.0; + this->ams_slave_status_min_cell_volt = 0.0; + this->ams_slave_status_max_cell_volt = 0.0; + this->ams_slave_status_max_temp = 0.0; +} + +ams_slave4_status_t( + double ams_slave_status_error, + double ams_slave_status_id, + double ams_slave_status_temp_sensor, + double ams_slave_status_min_cell_volt, + double ams_slave_status_max_cell_volt, + double ams_slave_status_max_temp) { + this->ams_slave_status_error = ams_slave_status_error; + this->ams_slave_status_id = ams_slave_status_id; + this->ams_slave_status_temp_sensor = ams_slave_status_temp_sensor; + this->ams_slave_status_min_cell_volt = ams_slave_status_min_cell_volt; + this->ams_slave_status_max_cell_volt = ams_slave_status_max_cell_volt; + this->ams_slave_status_max_temp = ams_slave_status_max_temp; +} + +}; +struct ams_slave3_status_t { + double ams_slave_status_error; + double ams_slave_status_id; + double ams_slave_status_temp_sensor; + double ams_slave_status_min_cell_volt; + double ams_slave_status_max_cell_volt; + double ams_slave_status_max_temp; +ams_slave3_status_t() { + this->ams_slave_status_error = 0.0; + this->ams_slave_status_id = 0.0; + this->ams_slave_status_temp_sensor = 0.0; + this->ams_slave_status_min_cell_volt = 0.0; + this->ams_slave_status_max_cell_volt = 0.0; + this->ams_slave_status_max_temp = 0.0; +} + +ams_slave3_status_t( + double ams_slave_status_error, + double ams_slave_status_id, + double ams_slave_status_temp_sensor, + double ams_slave_status_min_cell_volt, + double ams_slave_status_max_cell_volt, + double ams_slave_status_max_temp) { + this->ams_slave_status_error = ams_slave_status_error; + this->ams_slave_status_id = ams_slave_status_id; + this->ams_slave_status_temp_sensor = ams_slave_status_temp_sensor; + this->ams_slave_status_min_cell_volt = ams_slave_status_min_cell_volt; + this->ams_slave_status_max_cell_volt = ams_slave_status_max_cell_volt; + this->ams_slave_status_max_temp = ams_slave_status_max_temp; +} + +}; +struct ams_slave2_status_t { + double ams_slave_status_error; + double ams_slave_status_id; + double ams_slave_status_temp_sensor; + double ams_slave_status_min_cell_volt; + double ams_slave_status_max_cell_volt; + double ams_slave_status_max_temp; +ams_slave2_status_t() { + this->ams_slave_status_error = 0.0; + this->ams_slave_status_id = 0.0; + this->ams_slave_status_temp_sensor = 0.0; + this->ams_slave_status_min_cell_volt = 0.0; + this->ams_slave_status_max_cell_volt = 0.0; + this->ams_slave_status_max_temp = 0.0; +} + +ams_slave2_status_t( + double ams_slave_status_error, + double ams_slave_status_id, + double ams_slave_status_temp_sensor, + double ams_slave_status_min_cell_volt, + double ams_slave_status_max_cell_volt, + double ams_slave_status_max_temp) { + this->ams_slave_status_error = ams_slave_status_error; + this->ams_slave_status_id = ams_slave_status_id; + this->ams_slave_status_temp_sensor = ams_slave_status_temp_sensor; + this->ams_slave_status_min_cell_volt = ams_slave_status_min_cell_volt; + this->ams_slave_status_max_cell_volt = ams_slave_status_max_cell_volt; + this->ams_slave_status_max_temp = ams_slave_status_max_temp; +} + +}; +struct ams_error_t { + double ams_error_kind; + double ams_error_arg; +ams_error_t() { + this->ams_error_kind = 0.0; + this->ams_error_arg = 0.0; +} + +ams_error_t( + double ams_error_kind, + double ams_error_arg) { + this->ams_error_kind = ams_error_kind; + this->ams_error_arg = ams_error_arg; +} + +}; +struct ftcu_cooling_t { + double ftcu_water_pressure_2; + double ftcu_water_pressure_1; + double ftcu_water_temperature_1; + double ftcu_water_temperature_2; + double ftcu_flow_rate; +ftcu_cooling_t() { + this->ftcu_water_pressure_2 = 0.0; + this->ftcu_water_pressure_1 = 0.0; + this->ftcu_water_temperature_1 = 0.0; + this->ftcu_water_temperature_2 = 0.0; + this->ftcu_flow_rate = 0.0; +} + +ftcu_cooling_t( + double ftcu_water_pressure_2, + double ftcu_water_pressure_1, + double ftcu_water_temperature_1, + double ftcu_water_temperature_2, + double ftcu_flow_rate) { + this->ftcu_water_pressure_2 = ftcu_water_pressure_2; + this->ftcu_water_pressure_1 = ftcu_water_pressure_1; + this->ftcu_water_temperature_1 = ftcu_water_temperature_1; + this->ftcu_water_temperature_2 = ftcu_water_temperature_2; + this->ftcu_flow_rate = ftcu_flow_rate; +} + +}; +struct ftcu_brake_t_t { + double ftcu_brake_t_fl; + double ftcu_brake_t_fr; + double ftcu_brake_t_rl; + double ftcu_brake_t_rr; +ftcu_brake_t_t() { + this->ftcu_brake_t_fl = 0.0; + this->ftcu_brake_t_fr = 0.0; + this->ftcu_brake_t_rl = 0.0; + this->ftcu_brake_t_rr = 0.0; +} + +ftcu_brake_t_t( + double ftcu_brake_t_fl, + double ftcu_brake_t_fr, + double ftcu_brake_t_rl, + double ftcu_brake_t_rr) { + this->ftcu_brake_t_fl = ftcu_brake_t_fl; + this->ftcu_brake_t_fr = ftcu_brake_t_fr; + this->ftcu_brake_t_rl = ftcu_brake_t_rl; + this->ftcu_brake_t_rr = ftcu_brake_t_rr; +} + +}; +struct ftcu_wheelspeed_t { + double ftcu_wheelspeed_fl; + double ftcu_wheelspeed_fr; + double ftcu_wheelspeed_rl; + double ftcu_wheelspeed_rr; + double ftcu_distance_session; +ftcu_wheelspeed_t() { + this->ftcu_wheelspeed_fl = 0.0; + this->ftcu_wheelspeed_fr = 0.0; + this->ftcu_wheelspeed_rl = 0.0; + this->ftcu_wheelspeed_rr = 0.0; + this->ftcu_distance_session = 0.0; +} + +ftcu_wheelspeed_t( + double ftcu_wheelspeed_fl, + double ftcu_wheelspeed_fr, + double ftcu_wheelspeed_rl, + double ftcu_wheelspeed_rr, + double ftcu_distance_session) { + this->ftcu_wheelspeed_fl = ftcu_wheelspeed_fl; + this->ftcu_wheelspeed_fr = ftcu_wheelspeed_fr; + this->ftcu_wheelspeed_rl = ftcu_wheelspeed_rl; + this->ftcu_wheelspeed_rr = ftcu_wheelspeed_rr; + this->ftcu_distance_session = ftcu_distance_session; +} + +}; +struct ftcu_timings_t { + double ftcu_laptime_best; + double ftcu_laptime_last; + double ftcu_sectortime_best; + double ftcu_sectortime_last; +ftcu_timings_t() { + this->ftcu_laptime_best = 0.0; + this->ftcu_laptime_last = 0.0; + this->ftcu_sectortime_best = 0.0; + this->ftcu_sectortime_last = 0.0; +} + +ftcu_timings_t( + double ftcu_laptime_best, + double ftcu_laptime_last, + double ftcu_sectortime_best, + double ftcu_sectortime_last) { + this->ftcu_laptime_best = ftcu_laptime_best; + this->ftcu_laptime_last = ftcu_laptime_last; + this->ftcu_sectortime_best = ftcu_sectortime_best; + this->ftcu_sectortime_last = ftcu_sectortime_last; +} + +}; +struct ftcu_driver_t { + double ftcu_apps_percent; + double ftcu_brake_pressure_f; + double ftcu_brake_pressure_r; + double ftcu_steering_angle; + double ftcu_speed; + double ftcu_lapcounter; + double ftcu_sectorcounter; +ftcu_driver_t() { + this->ftcu_apps_percent = 0.0; + this->ftcu_brake_pressure_f = 0.0; + this->ftcu_brake_pressure_r = 0.0; + this->ftcu_steering_angle = 0.0; + this->ftcu_speed = 0.0; + this->ftcu_lapcounter = 0.0; + this->ftcu_sectorcounter = 0.0; +} + +ftcu_driver_t( + double ftcu_apps_percent, + double ftcu_brake_pressure_f, + double ftcu_brake_pressure_r, + double ftcu_steering_angle, + double ftcu_speed, + double ftcu_lapcounter, + double ftcu_sectorcounter) { + this->ftcu_apps_percent = ftcu_apps_percent; + this->ftcu_brake_pressure_f = ftcu_brake_pressure_f; + this->ftcu_brake_pressure_r = ftcu_brake_pressure_r; + this->ftcu_steering_angle = ftcu_steering_angle; + this->ftcu_speed = ftcu_speed; + this->ftcu_lapcounter = ftcu_lapcounter; + this->ftcu_sectorcounter = ftcu_sectorcounter; +} + +}; +struct tts_rr_t { + double tts_outer_left; + double tts_center_left; + double tts_center; + double tts_center_right; + double tts_outet_right; + double tts_status; +tts_rr_t() { + this->tts_outer_left = 0.0; + this->tts_center_left = 0.0; + this->tts_center = 0.0; + this->tts_center_right = 0.0; + this->tts_outet_right = 0.0; + this->tts_status = 0.0; +} + +tts_rr_t( + double tts_outer_left, + double tts_center_left, + double tts_center, + double tts_center_right, + double tts_outet_right, + double tts_status) { + this->tts_outer_left = tts_outer_left; + this->tts_center_left = tts_center_left; + this->tts_center = tts_center; + this->tts_center_right = tts_center_right; + this->tts_outet_right = tts_outet_right; + this->tts_status = tts_status; +} + +}; +struct tts_rl_t { + double tts_outer_left; + double tts_center_left; + double tts_center; + double tts_center_right; + double tts_outer_right; + double tts_status; +tts_rl_t() { + this->tts_outer_left = 0.0; + this->tts_center_left = 0.0; + this->tts_center = 0.0; + this->tts_center_right = 0.0; + this->tts_outer_right = 0.0; + this->tts_status = 0.0; +} + +tts_rl_t( + double tts_outer_left, + double tts_center_left, + double tts_center, + double tts_center_right, + double tts_outer_right, + double tts_status) { + this->tts_outer_left = tts_outer_left; + this->tts_center_left = tts_center_left; + this->tts_center = tts_center; + this->tts_center_right = tts_center_right; + this->tts_outer_right = tts_outer_right; + this->tts_status = tts_status; +} + +}; +struct tts_fr_t { + double tts_outer_left; + double tts_center_left; + double tts_center; + double tts_center_right; + double tts_outer_right; + double tts_status; +tts_fr_t() { + this->tts_outer_left = 0.0; + this->tts_center_left = 0.0; + this->tts_center = 0.0; + this->tts_center_right = 0.0; + this->tts_outer_right = 0.0; + this->tts_status = 0.0; +} + +tts_fr_t( + double tts_outer_left, + double tts_center_left, + double tts_center, + double tts_center_right, + double tts_outer_right, + double tts_status) { + this->tts_outer_left = tts_outer_left; + this->tts_center_left = tts_center_left; + this->tts_center = tts_center; + this->tts_center_right = tts_center_right; + this->tts_outer_right = tts_outer_right; + this->tts_status = tts_status; +} + +}; +struct tts_fl_t { + double tts_outer_left; + double tts_center_left; + double tts_center; + double tts_center_right; + double tts_outer_right; + double tts_status; +tts_fl_t() { + this->tts_outer_left = 0.0; + this->tts_center_left = 0.0; + this->tts_center = 0.0; + this->tts_center_right = 0.0; + this->tts_outer_right = 0.0; + this->tts_status = 0.0; +} + +tts_fl_t( + double tts_outer_left, + double tts_center_left, + double tts_center, + double tts_center_right, + double tts_outer_right, + double tts_status) { + this->tts_outer_left = tts_outer_left; + this->tts_center_left = tts_center_left; + this->tts_center = tts_center; + this->tts_center_right = tts_center_right; + this->tts_outer_right = tts_outer_right; + this->tts_status = tts_status; +} + +}; +struct stw_param_set_t { + double stw_param_set; + double stw_param_tc_slipref; + double stw_param_tc_mumax; + double stw_param_tc_i; + double stw_param_plim; + double stw_param_tlim; + double stw_param_tc_p; + double stw_param_reku; + double stw_param_tc_on; + double stw_param_tv_on; + double stw_param_discipline; + double stw_param_slim; +stw_param_set_t() { + this->stw_param_set = 0.0; + this->stw_param_tc_slipref = 0.0; + this->stw_param_tc_mumax = 0.0; + this->stw_param_tc_i = 0.0; + this->stw_param_plim = 0.0; + this->stw_param_tlim = 0.0; + this->stw_param_tc_p = 0.0; + this->stw_param_reku = 0.0; + this->stw_param_tc_on = 0.0; + this->stw_param_tv_on = 0.0; + this->stw_param_discipline = 0.0; + this->stw_param_slim = 0.0; +} + +stw_param_set_t( + double stw_param_set, + double stw_param_tc_slipref, + double stw_param_tc_mumax, + double stw_param_tc_i, + double stw_param_plim, + double stw_param_tlim, + double stw_param_tc_p, + double stw_param_reku, + double stw_param_tc_on, + double stw_param_tv_on, + double stw_param_discipline, + double stw_param_slim) { + this->stw_param_set = stw_param_set; + this->stw_param_tc_slipref = stw_param_tc_slipref; + this->stw_param_tc_mumax = stw_param_tc_mumax; + this->stw_param_tc_i = stw_param_tc_i; + this->stw_param_plim = stw_param_plim; + this->stw_param_tlim = stw_param_tlim; + this->stw_param_tc_p = stw_param_tc_p; + this->stw_param_reku = stw_param_reku; + this->stw_param_tc_on = stw_param_tc_on; + this->stw_param_tv_on = stw_param_tv_on; + this->stw_param_discipline = stw_param_discipline; + this->stw_param_slim = stw_param_slim; +} + +}; +struct ams_slave0_status_t { + double ams_slave_status_error; + double ams_slave_status_id; + double ams_slave_status_temp_sensor; + double ams_slave_status_min_cell_volt; + double ams_slave_status_max_cell_volt; + double ams_slave_status_max_temp; +ams_slave0_status_t() { + this->ams_slave_status_error = 0.0; + this->ams_slave_status_id = 0.0; + this->ams_slave_status_temp_sensor = 0.0; + this->ams_slave_status_min_cell_volt = 0.0; + this->ams_slave_status_max_cell_volt = 0.0; + this->ams_slave_status_max_temp = 0.0; +} + +ams_slave0_status_t( + double ams_slave_status_error, + double ams_slave_status_id, + double ams_slave_status_temp_sensor, + double ams_slave_status_min_cell_volt, + double ams_slave_status_max_cell_volt, + double ams_slave_status_max_temp) { + this->ams_slave_status_error = ams_slave_status_error; + this->ams_slave_status_id = ams_slave_status_id; + this->ams_slave_status_temp_sensor = ams_slave_status_temp_sensor; + this->ams_slave_status_min_cell_volt = ams_slave_status_min_cell_volt; + this->ams_slave_status_max_cell_volt = ams_slave_status_max_cell_volt; + this->ams_slave_status_max_temp = ams_slave_status_max_temp; +} + +}; +struct ssu_message_t { + double ssu_pressure; + double ssu_air_temp; +ssu_message_t() { + this->ssu_pressure = 0.0; + this->ssu_air_temp = 0.0; +} + +ssu_message_t( + double ssu_pressure, + double ssu_air_temp) { + this->ssu_pressure = ssu_pressure; + this->ssu_air_temp = ssu_air_temp; +} + +}; +struct ams_status_t { + double ams_state; + double sdc_closed; + double soc; + double min_cell_volt; + double max_cell_temp; + double ams_imd_state; + double ams_imd_ok; +ams_status_t() { + this->ams_state = 0.0; + this->sdc_closed = 0.0; + this->soc = 0.0; + this->min_cell_volt = 0.0; + this->max_cell_temp = 0.0; + this->ams_imd_state = 0.0; + this->ams_imd_ok = 0.0; +} + +ams_status_t( + double ams_state, + double sdc_closed, + double soc, + double min_cell_volt, + double max_cell_temp, + double ams_imd_state, + double ams_imd_ok) { + this->ams_state = ams_state; + this->sdc_closed = sdc_closed; + this->soc = soc; + this->min_cell_volt = min_cell_volt; + this->max_cell_temp = max_cell_temp; + this->ams_imd_state = ams_imd_state; + this->ams_imd_ok = ams_imd_ok; +} + +}; +struct ams_slave_panic_t { + double ams_slave_panic_slave_id; + double ams_slave_panic_kind; + double ams_slave_panic_arg; +ams_slave_panic_t() { + this->ams_slave_panic_slave_id = 0.0; + this->ams_slave_panic_kind = 0.0; + this->ams_slave_panic_arg = 0.0; +} + +ams_slave_panic_t( + double ams_slave_panic_slave_id, + double ams_slave_panic_kind, + double ams_slave_panic_arg) { + this->ams_slave_panic_slave_id = ams_slave_panic_slave_id; + this->ams_slave_panic_kind = ams_slave_panic_kind; + this->ams_slave_panic_arg = ams_slave_panic_arg; +} + +}; +struct ams_in_t { + double ts_activate; + double inverters_discharged; + double lap_number; +ams_in_t() { + this->ts_activate = 0.0; + this->inverters_discharged = 0.0; + this->lap_number = 0.0; +} + +ams_in_t( + double ts_activate, + double inverters_discharged, + double lap_number) { + this->ts_activate = ts_activate; + this->inverters_discharged = inverters_discharged; + this->lap_number = lap_number; +} + +}; +struct shunt_current_t { + double shunt_current; +shunt_current_t() { + this->shunt_current = 0.0; +} + +shunt_current_t( + double shunt_current) { + this->shunt_current = shunt_current; +} + +}; +struct shunt_voltage1_t { + double shunt_voltage1; +shunt_voltage1_t() { + this->shunt_voltage1 = 0.0; +} + +shunt_voltage1_t( + double shunt_voltage1) { + this->shunt_voltage1 = shunt_voltage1; +} + +}; +struct shunt_voltage2_t { + double shunt_voltage2; +shunt_voltage2_t() { + this->shunt_voltage2 = 0.0; +} + +shunt_voltage2_t( + double shunt_voltage2) { + this->shunt_voltage2 = shunt_voltage2; +} + +}; +struct shunt_voltage3_t { + double shunt_voltage3; +shunt_voltage3_t() { + this->shunt_voltage3 = 0.0; +} + +shunt_voltage3_t( + double shunt_voltage3) { + this->shunt_voltage3 = shunt_voltage3; +} + +}; +struct shunt_temperature_t { + double shunt_temperature; +shunt_temperature_t() { + this->shunt_temperature = 0.0; +} + +shunt_temperature_t( + double shunt_temperature) { + this->shunt_temperature = shunt_temperature; +} + +}; +struct pdu_command_t { + double pdu_enable_misc; + double pdu_enable_sdc; + double pdu_enable_inverter; + double pdu_enable_ts_cooling; + double pdu_enable_acc_cooling; + double pdu_enable_lldar; + double pdu_enable_drs; + double pdu_enable_epsc; + double pdu_enable_acu; + double pdu_enable_ebs_a; + double pdu_enable_ebs_b; + double pdu_enable_ebs_c; +pdu_command_t() { + this->pdu_enable_misc = 0.0; + this->pdu_enable_sdc = 0.0; + this->pdu_enable_inverter = 0.0; + this->pdu_enable_ts_cooling = 0.0; + this->pdu_enable_acc_cooling = 0.0; + this->pdu_enable_lldar = 0.0; + this->pdu_enable_drs = 0.0; + this->pdu_enable_epsc = 0.0; + this->pdu_enable_acu = 0.0; + this->pdu_enable_ebs_a = 0.0; + this->pdu_enable_ebs_b = 0.0; + this->pdu_enable_ebs_c = 0.0; +} + +pdu_command_t( + double pdu_enable_misc, + double pdu_enable_sdc, + double pdu_enable_inverter, + double pdu_enable_ts_cooling, + double pdu_enable_acc_cooling, + double pdu_enable_lldar, + double pdu_enable_drs, + double pdu_enable_epsc, + double pdu_enable_acu, + double pdu_enable_ebs_a, + double pdu_enable_ebs_b, + double pdu_enable_ebs_c) { + this->pdu_enable_misc = pdu_enable_misc; + this->pdu_enable_sdc = pdu_enable_sdc; + this->pdu_enable_inverter = pdu_enable_inverter; + this->pdu_enable_ts_cooling = pdu_enable_ts_cooling; + this->pdu_enable_acc_cooling = pdu_enable_acc_cooling; + this->pdu_enable_lldar = pdu_enable_lldar; + this->pdu_enable_drs = pdu_enable_drs; + this->pdu_enable_epsc = pdu_enable_epsc; + this->pdu_enable_acu = pdu_enable_acu; + this->pdu_enable_ebs_a = pdu_enable_ebs_a; + this->pdu_enable_ebs_b = pdu_enable_ebs_b; + this->pdu_enable_ebs_c = pdu_enable_ebs_c; +} + +}; +struct pdu_response_t { + double pdu_alwayson_tx; + double pdu_shutdown_circuit_tx; + double pdu_lidar_tx; + double pdu_acu_tx; + double pdu_servos_regler_tx; + double pdu_inverter_tx; + double pdu_misc_tx; + double pdu_servo_tx; + double pdu_ebs_valve_1_tx; + double pdu_ebs_valve_2_tx; + double pdu_cs_valve_tx; + double pdu_aggregat_tx; + double pdu_steering_tx; + double pdu_pwm_tsac_fans; + double pdu_pwm_radiatot_fans_tx; + double pdu_pwm_aggregat; + double pdu_pwm_pump; + double pdu_heartbeat_ok_tx; +pdu_response_t() { + this->pdu_alwayson_tx = 0.0; + this->pdu_shutdown_circuit_tx = 0.0; + this->pdu_lidar_tx = 0.0; + this->pdu_acu_tx = 0.0; + this->pdu_servos_regler_tx = 0.0; + this->pdu_inverter_tx = 0.0; + this->pdu_misc_tx = 0.0; + this->pdu_servo_tx = 0.0; + this->pdu_ebs_valve_1_tx = 0.0; + this->pdu_ebs_valve_2_tx = 0.0; + this->pdu_cs_valve_tx = 0.0; + this->pdu_aggregat_tx = 0.0; + this->pdu_steering_tx = 0.0; + this->pdu_pwm_tsac_fans = 0.0; + this->pdu_pwm_radiatot_fans_tx = 0.0; + this->pdu_pwm_aggregat = 0.0; + this->pdu_pwm_pump = 0.0; + this->pdu_heartbeat_ok_tx = 0.0; +} + +pdu_response_t( + double pdu_alwayson_tx, + double pdu_shutdown_circuit_tx, + double pdu_lidar_tx, + double pdu_acu_tx, + double pdu_servos_regler_tx, + double pdu_inverter_tx, + double pdu_misc_tx, + double pdu_servo_tx, + double pdu_ebs_valve_1_tx, + double pdu_ebs_valve_2_tx, + double pdu_cs_valve_tx, + double pdu_aggregat_tx, + double pdu_steering_tx, + double pdu_pwm_tsac_fans, + double pdu_pwm_radiatot_fans_tx, + double pdu_pwm_aggregat, + double pdu_pwm_pump, + double pdu_heartbeat_ok_tx) { + this->pdu_alwayson_tx = pdu_alwayson_tx; + this->pdu_shutdown_circuit_tx = pdu_shutdown_circuit_tx; + this->pdu_lidar_tx = pdu_lidar_tx; + this->pdu_acu_tx = pdu_acu_tx; + this->pdu_servos_regler_tx = pdu_servos_regler_tx; + this->pdu_inverter_tx = pdu_inverter_tx; + this->pdu_misc_tx = pdu_misc_tx; + this->pdu_servo_tx = pdu_servo_tx; + this->pdu_ebs_valve_1_tx = pdu_ebs_valve_1_tx; + this->pdu_ebs_valve_2_tx = pdu_ebs_valve_2_tx; + this->pdu_cs_valve_tx = pdu_cs_valve_tx; + this->pdu_aggregat_tx = pdu_aggregat_tx; + this->pdu_steering_tx = pdu_steering_tx; + this->pdu_pwm_tsac_fans = pdu_pwm_tsac_fans; + this->pdu_pwm_radiatot_fans_tx = pdu_pwm_radiatot_fans_tx; + this->pdu_pwm_aggregat = pdu_pwm_aggregat; + this->pdu_pwm_pump = pdu_pwm_pump; + this->pdu_heartbeat_ok_tx = pdu_heartbeat_ok_tx; +} + +}; +struct as_mission_fb_t { + double mission_selection; +as_mission_fb_t() { + this->mission_selection = 0.0; +} + +as_mission_fb_t( + double mission_selection) { + this->mission_selection = mission_selection; +} + +}; +struct stw_mission_selected_t { + double mission_selection; +stw_mission_selected_t() { + this->mission_selection = 0.0; +} + +stw_mission_selected_t( + double mission_selection) { + this->mission_selection = mission_selection; +} + +}; +struct epsc_out_t { + double epsc_measured_rpm; + double epsc_measured_steering_angle; + double epsc_measured_mosfet_temperature; + double epsc_measured_voltage; + double epsc_measured_current; +epsc_out_t() { + this->epsc_measured_rpm = 0.0; + this->epsc_measured_steering_angle = 0.0; + this->epsc_measured_mosfet_temperature = 0.0; + this->epsc_measured_voltage = 0.0; + this->epsc_measured_current = 0.0; +} + +epsc_out_t( + double epsc_measured_rpm, + double epsc_measured_steering_angle, + double epsc_measured_mosfet_temperature, + double epsc_measured_voltage, + double epsc_measured_current) { + this->epsc_measured_rpm = epsc_measured_rpm; + this->epsc_measured_steering_angle = epsc_measured_steering_angle; + this->epsc_measured_mosfet_temperature = epsc_measured_mosfet_temperature; + this->epsc_measured_voltage = epsc_measured_voltage; + this->epsc_measured_current = epsc_measured_current; +} + +}; +struct epsc_steering_in_t { + double epsc_desired_steering_angle; +epsc_steering_in_t() { + this->epsc_desired_steering_angle = 0.0; +} + +epsc_steering_in_t( + double epsc_desired_steering_angle) { + this->epsc_desired_steering_angle = epsc_desired_steering_angle; +} + +}; +struct stw_buttons_t { + double stw_button_drs; + double stw_button_1; + double stw_button_2; + double stw_button_3; + double stw_button_4; +stw_buttons_t() { + this->stw_button_drs = 0.0; + this->stw_button_1 = 0.0; + this->stw_button_2 = 0.0; + this->stw_button_3 = 0.0; + this->stw_button_4 = 0.0; +} + +stw_buttons_t( + double stw_button_drs, + double stw_button_1, + double stw_button_2, + double stw_button_3, + double stw_button_4) { + this->stw_button_drs = stw_button_drs; + this->stw_button_1 = stw_button_1; + this->stw_button_2 = stw_button_2; + this->stw_button_3 = stw_button_3; + this->stw_button_4 = stw_button_4; +} + +}; +struct stw_status_t { + double lap_count; + double err_pdu; + double err_res; + double r2_d_progress; + double as_state_stw; + double err_as; + double err_app_sp; + double err_s_bspd; + double err_scs; + double err_con_mon; + double err_ini_chk; + double err_inv2; + double err_inv1; + double err_ams; + double err_sdc; + double sdc_status; + double inv2_ready; + double inv1_ready; + double energy_per_lap; + double ini_chk_state; +stw_status_t() { + this->lap_count = 0.0; + this->err_pdu = 0.0; + this->err_res = 0.0; + this->r2_d_progress = 0.0; + this->as_state_stw = 0.0; + this->err_as = 0.0; + this->err_app_sp = 0.0; + this->err_s_bspd = 0.0; + this->err_scs = 0.0; + this->err_con_mon = 0.0; + this->err_ini_chk = 0.0; + this->err_inv2 = 0.0; + this->err_inv1 = 0.0; + this->err_ams = 0.0; + this->err_sdc = 0.0; + this->sdc_status = 0.0; + this->inv2_ready = 0.0; + this->inv1_ready = 0.0; + this->energy_per_lap = 0.0; + this->ini_chk_state = 0.0; +} + +stw_status_t( + double lap_count, + double err_pdu, + double err_res, + double r2_d_progress, + double as_state_stw, + double err_as, + double err_app_sp, + double err_s_bspd, + double err_scs, + double err_con_mon, + double err_ini_chk, + double err_inv2, + double err_inv1, + double err_ams, + double err_sdc, + double sdc_status, + double inv2_ready, + double inv1_ready, + double energy_per_lap, + double ini_chk_state) { + this->lap_count = lap_count; + this->err_pdu = err_pdu; + this->err_res = err_res; + this->r2_d_progress = r2_d_progress; + this->as_state_stw = as_state_stw; + this->err_as = err_as; + this->err_app_sp = err_app_sp; + this->err_s_bspd = err_s_bspd; + this->err_scs = err_scs; + this->err_con_mon = err_con_mon; + this->err_ini_chk = err_ini_chk; + this->err_inv2 = err_inv2; + this->err_inv1 = err_inv1; + this->err_ams = err_ams; + this->err_sdc = err_sdc; + this->sdc_status = sdc_status; + this->inv2_ready = inv2_ready; + this->inv1_ready = inv1_ready; + this->energy_per_lap = energy_per_lap; + this->ini_chk_state = ini_chk_state; +} + +}; +struct pdu_current_1_t { + double pdu_always_on_current; + double pdu_lvms_current; + double pdu_asms_current; + double pdu_misc_current; +pdu_current_1_t() { + this->pdu_always_on_current = 0.0; + this->pdu_lvms_current = 0.0; + this->pdu_asms_current = 0.0; + this->pdu_misc_current = 0.0; +} + +pdu_current_1_t( + double pdu_always_on_current, + double pdu_lvms_current, + double pdu_asms_current, + double pdu_misc_current) { + this->pdu_always_on_current = pdu_always_on_current; + this->pdu_lvms_current = pdu_lvms_current; + this->pdu_asms_current = pdu_asms_current; + this->pdu_misc_current = pdu_misc_current; +} + +}; +struct pdu_current_2_t { + double pdu_sdc_current; + double pdu_inverter_current; + double pdu_ts_cooling_current; + double pdu_acc_cooling_current; +pdu_current_2_t() { + this->pdu_sdc_current = 0.0; + this->pdu_inverter_current = 0.0; + this->pdu_ts_cooling_current = 0.0; + this->pdu_acc_cooling_current = 0.0; +} + +pdu_current_2_t( + double pdu_sdc_current, + double pdu_inverter_current, + double pdu_ts_cooling_current, + double pdu_acc_cooling_current) { + this->pdu_sdc_current = pdu_sdc_current; + this->pdu_inverter_current = pdu_inverter_current; + this->pdu_ts_cooling_current = pdu_ts_cooling_current; + this->pdu_acc_cooling_current = pdu_acc_cooling_current; +} + +}; +struct pdu_current_3_t { + double pdu_lidar_current; + double pdu_drs_current; + double pdu_epsc_current; + double pdu_acu_current; +pdu_current_3_t() { + this->pdu_lidar_current = 0.0; + this->pdu_drs_current = 0.0; + this->pdu_epsc_current = 0.0; + this->pdu_acu_current = 0.0; +} + +pdu_current_3_t( + double pdu_lidar_current, + double pdu_drs_current, + double pdu_epsc_current, + double pdu_acu_current) { + this->pdu_lidar_current = pdu_lidar_current; + this->pdu_drs_current = pdu_drs_current; + this->pdu_epsc_current = pdu_epsc_current; + this->pdu_acu_current = pdu_acu_current; +} + +}; +struct pdu_current_4_t { + double pdu_ebs_a_current; + double pdu_ebs_b_current; +pdu_current_4_t() { + this->pdu_ebs_a_current = 0.0; + this->pdu_ebs_b_current = 0.0; +} + +pdu_current_4_t( + double pdu_ebs_a_current, + double pdu_ebs_b_current) { + this->pdu_ebs_a_current = pdu_ebs_a_current; + this->pdu_ebs_b_current = pdu_ebs_b_current; +} + +}; +struct epsc_config_in_t { + double epsc_config_p_gain; + double epsc_config_i_gain; + double epsc_config_d_gain; +epsc_config_in_t() { + this->epsc_config_p_gain = 0.0; + this->epsc_config_i_gain = 0.0; + this->epsc_config_d_gain = 0.0; +} + +epsc_config_in_t( + double epsc_config_p_gain, + double epsc_config_i_gain, + double epsc_config_d_gain) { + this->epsc_config_p_gain = epsc_config_p_gain; + this->epsc_config_i_gain = epsc_config_i_gain; + this->epsc_config_d_gain = epsc_config_d_gain; +} + +}; + +} +} +} + +// encode functions +namespace encode { +namespace can1 { +inline can1_inverter_velocity_t inverter_velocity(const frame::decoded::can1::inverter_velocity_t frame_decoded) { + can1_inverter_velocity_t frame_encoded; + frame_encoded.inverter_1_velocity = can1_inverter_velocity_inverter_1_velocity_encode(frame_decoded.inverter_1_velocity); + frame_encoded.inverter_2_velocity = can1_inverter_velocity_inverter_2_velocity_encode(frame_decoded.inverter_2_velocity); + return frame_encoded; +} + +inline can1_inverter_errors_warnings_t inverter_errors_warnings(const frame::decoded::can1::inverter_errors_warnings_t frame_decoded) { + can1_inverter_errors_warnings_t frame_encoded; + frame_encoded.inverter_1_errors = can1_inverter_errors_warnings_inverter_1_errors_encode(frame_decoded.inverter_1_errors); + frame_encoded.inverter_1_warnings = can1_inverter_errors_warnings_inverter_1_warnings_encode(frame_decoded.inverter_1_warnings); + frame_encoded.inverter_2_errors = can1_inverter_errors_warnings_inverter_2_errors_encode(frame_decoded.inverter_2_errors); + frame_encoded.inverter_2_warnings = can1_inverter_errors_warnings_inverter_2_warnings_encode(frame_decoded.inverter_2_warnings); + return frame_encoded; +} + +inline can1_inverter_torque_actual_cw_t inverter_torque_actual_cw(const frame::decoded::can1::inverter_torque_actual_cw_t frame_decoded) { + can1_inverter_torque_actual_cw_t frame_encoded; + frame_encoded.inverter_1_control_word = can1_inverter_torque_actual_cw_inverter_1_control_word_encode(frame_decoded.inverter_1_control_word); + frame_encoded.inverter_1_torque_actual = can1_inverter_torque_actual_cw_inverter_1_torque_actual_encode(frame_decoded.inverter_1_torque_actual); + frame_encoded.inverter_2_control_word = can1_inverter_torque_actual_cw_inverter_2_control_word_encode(frame_decoded.inverter_2_control_word); + frame_encoded.inverter_2_torque_actual = can1_inverter_torque_actual_cw_inverter_2_torque_actual_encode(frame_decoded.inverter_2_torque_actual); + return frame_encoded; +} + +inline can1_inverter_temperatur_t inverter_temperatur(const frame::decoded::can1::inverter_temperatur_t frame_decoded) { + can1_inverter_temperatur_t frame_encoded; + frame_encoded.inverter_1_temp_inv = can1_inverter_temperatur_inverter_1_temp_inv_encode(frame_decoded.inverter_1_temp_inv); + frame_encoded.inverter_1_temp_mot = can1_inverter_temperatur_inverter_1_temp_mot_encode(frame_decoded.inverter_1_temp_mot); + frame_encoded.inverter_2_temp_inv = can1_inverter_temperatur_inverter_2_temp_inv_encode(frame_decoded.inverter_2_temp_inv); + frame_encoded.inverter_2_temp_mot = can1_inverter_temperatur_inverter_2_temp_mot_encode(frame_decoded.inverter_2_temp_mot); + return frame_encoded; +} + +inline can1_inverter_torque_wanted_t inverter_torque_wanted(const frame::decoded::can1::inverter_torque_wanted_t frame_decoded) { + can1_inverter_torque_wanted_t frame_encoded; + frame_encoded.inverter_1_torque_demanded = can1_inverter_torque_wanted_inverter_1_torque_demanded_encode(frame_decoded.inverter_1_torque_demanded); + frame_encoded.inverter_2_torque_demanded = can1_inverter_torque_wanted_inverter_2_torque_demanded_encode(frame_decoded.inverter_2_torque_demanded); + frame_encoded.inverter_1_torque_desired = can1_inverter_torque_wanted_inverter_1_torque_desired_encode(frame_decoded.inverter_1_torque_desired); + frame_encoded.inverter_2_torque_desired = can1_inverter_torque_wanted_inverter_2_torque_desired_encode(frame_decoded.inverter_2_torque_desired); + return frame_encoded; +} + +inline can1_sdo_telemetrie_rx_node1_t sdo_telemetrie_rx_node1(const frame::decoded::can1::sdo_telemetrie_rx_node1_t frame_decoded) { + can1_sdo_telemetrie_rx_node1_t frame_encoded; + frame_encoded.sdo_command_byte = can1_sdo_telemetrie_rx_node1_sdo_command_byte_encode(frame_decoded.sdo_command_byte); + frame_encoded.sdo_od_index = can1_sdo_telemetrie_rx_node1_sdo_od_index_encode(frame_decoded.sdo_od_index); + frame_encoded.sdo_od_subindex = can1_sdo_telemetrie_rx_node1_sdo_od_subindex_encode(frame_decoded.sdo_od_subindex); + frame_encoded.sdo_data = can1_sdo_telemetrie_rx_node1_sdo_data_encode(frame_decoded.sdo_data); + return frame_encoded; +} + +inline can1_sdo_telemetrie_rx_node2_t sdo_telemetrie_rx_node2(const frame::decoded::can1::sdo_telemetrie_rx_node2_t frame_decoded) { + can1_sdo_telemetrie_rx_node2_t frame_encoded; + frame_encoded.sdo_command_byte = can1_sdo_telemetrie_rx_node2_sdo_command_byte_encode(frame_decoded.sdo_command_byte); + frame_encoded.sdo_od_index = can1_sdo_telemetrie_rx_node2_sdo_od_index_encode(frame_decoded.sdo_od_index); + frame_encoded.sdo_od_subindex = can1_sdo_telemetrie_rx_node2_sdo_od_subindex_encode(frame_decoded.sdo_od_subindex); + frame_encoded.sdo_data = can1_sdo_telemetrie_rx_node2_sdo_data_encode(frame_decoded.sdo_data); + return frame_encoded; +} + +inline can1_sdo_telemetrie_tx_t sdo_telemetrie_tx(const frame::decoded::can1::sdo_telemetrie_tx_t frame_decoded) { + can1_sdo_telemetrie_tx_t frame_encoded; + frame_encoded.sdo_command_byte = can1_sdo_telemetrie_tx_sdo_command_byte_encode(frame_decoded.sdo_command_byte); + frame_encoded.sdo_od_index = can1_sdo_telemetrie_tx_sdo_od_index_encode(frame_decoded.sdo_od_index); + frame_encoded.sdo_od_subindex = can1_sdo_telemetrie_tx_sdo_od_subindex_encode(frame_decoded.sdo_od_subindex); + frame_encoded.sdo_data = can1_sdo_telemetrie_tx_sdo_data_encode(frame_decoded.sdo_data); + return frame_encoded; +} + +inline can1_laptop_sdo_node_t laptop_sdo_node(const frame::decoded::can1::laptop_sdo_node_t frame_decoded) { + can1_laptop_sdo_node_t frame_encoded; + frame_encoded.node_id_sdo = can1_laptop_sdo_node_node_id_sdo_encode(frame_decoded.node_id_sdo); + return frame_encoded; +} + +inline can1_x_sens_long_lat_t x_sens_long_lat(const frame::decoded::can1::x_sens_long_lat_t frame_decoded) { + can1_x_sens_long_lat_t frame_encoded; + frame_encoded.x_sens_latitude = can1_x_sens_long_lat_x_sens_latitude_encode(frame_decoded.x_sens_latitude); + frame_encoded.x_sens_longitude = can1_x_sens_long_lat_x_sens_longitude_encode(frame_decoded.x_sens_longitude); + return frame_encoded; +} + +inline can1_x_sens_rateofturn_t x_sens_rateofturn(const frame::decoded::can1::x_sens_rateofturn_t frame_decoded) { + can1_x_sens_rateofturn_t frame_encoded; + frame_encoded.x_sens_gyr_x = can1_x_sens_rateofturn_x_sens_gyr_x_encode(frame_decoded.x_sens_gyr_x); + frame_encoded.x_sens_gy_y = can1_x_sens_rateofturn_x_sens_gy_y_encode(frame_decoded.x_sens_gy_y); + frame_encoded.x_sens_gy_z = can1_x_sens_rateofturn_x_sens_gy_z_encode(frame_decoded.x_sens_gy_z); + return frame_encoded; +} + +inline can1_x_sens_acceleration_t x_sens_acceleration(const frame::decoded::can1::x_sens_acceleration_t frame_decoded) { + can1_x_sens_acceleration_t frame_encoded; + frame_encoded.x_sens_acc_x = can1_x_sens_acceleration_x_sens_acc_x_encode(frame_decoded.x_sens_acc_x); + frame_encoded.x_sens_acc_y = can1_x_sens_acceleration_x_sens_acc_y_encode(frame_decoded.x_sens_acc_y); + frame_encoded.x_sens_acc_z = can1_x_sens_acceleration_x_sens_acc_z_encode(frame_decoded.x_sens_acc_z); + return frame_encoded; +} + +inline can1_x_sens_velocity_t x_sens_velocity(const frame::decoded::can1::x_sens_velocity_t frame_decoded) { + can1_x_sens_velocity_t frame_encoded; + frame_encoded.x_sens_vel_x = can1_x_sens_velocity_x_sens_vel_x_encode(frame_decoded.x_sens_vel_x); + frame_encoded.x_sens_vel_y = can1_x_sens_velocity_x_sens_vel_y_encode(frame_decoded.x_sens_vel_y); + frame_encoded.x_sens_vel_z = can1_x_sens_velocity_x_sens_vel_z_encode(frame_decoded.x_sens_vel_z); + return frame_encoded; +} + +inline can1_telemetrie_t telemetrie(const frame::decoded::can1::telemetrie_t frame_decoded) { + can1_telemetrie_t frame_encoded; + frame_encoded.ini_check_error_state = can1_telemetrie_ini_check_error_state_encode(frame_decoded.ini_check_error_state); + frame_encoded.powermap = can1_telemetrie_powermap_encode(frame_decoded.powermap); + frame_encoded.apps_ok = can1_telemetrie_apps_ok_encode(frame_decoded.apps_ok); + frame_encoded.brake_ok = can1_telemetrie_brake_ok_encode(frame_decoded.brake_ok); + frame_encoded.allow_torque = can1_telemetrie_allow_torque_encode(frame_decoded.allow_torque); + frame_encoded.asp_ok = can1_telemetrie_asp_ok_encode(frame_decoded.asp_ok); + frame_encoded.pressure_sensor_ok = can1_telemetrie_pressure_sensor_ok_encode(frame_decoded.pressure_sensor_ok); + frame_encoded.torque_vectoring_on = can1_telemetrie_torque_vectoring_on_encode(frame_decoded.torque_vectoring_on); + frame_encoded.reku_on = can1_telemetrie_reku_on_encode(frame_decoded.reku_on); + frame_encoded.traction_control_on = can1_telemetrie_traction_control_on_encode(frame_decoded.traction_control_on); + frame_encoded.ts_deactivate = can1_telemetrie_ts_deactivate_encode(frame_decoded.ts_deactivate); + frame_encoded.torque_limit = can1_telemetrie_torque_limit_encode(frame_decoded.torque_limit); + frame_encoded.power_limit = can1_telemetrie_power_limit_encode(frame_decoded.power_limit); + frame_encoded.torque_limit_dynamisch = can1_telemetrie_torque_limit_dynamisch_encode(frame_decoded.torque_limit_dynamisch); + frame_encoded.torque_ohne_limit_l = can1_telemetrie_torque_ohne_limit_l_encode(frame_decoded.torque_ohne_limit_l); + frame_encoded.torque_ohne_limit_r = can1_telemetrie_torque_ohne_limit_r_encode(frame_decoded.torque_ohne_limit_r); + return frame_encoded; +} + +inline can1_override_powermap_t override_powermap(const frame::decoded::can1::override_powermap_t frame_decoded) { + can1_override_powermap_t frame_encoded; + frame_encoded.laptopp_power_map = can1_override_powermap_laptopp_power_map_encode(frame_decoded.laptopp_power_map); + frame_encoded.laptop_reku = can1_override_powermap_laptop_reku_encode(frame_decoded.laptop_reku); + frame_encoded.laptop_tc = can1_override_powermap_laptop_tc_encode(frame_decoded.laptop_tc); + frame_encoded.laptop_tv = can1_override_powermap_laptop_tv_encode(frame_decoded.laptop_tv); + frame_encoded.laptop_slipref = can1_override_powermap_laptop_slipref_encode(frame_decoded.laptop_slipref); + frame_encoded.laptop_tc_i = can1_override_powermap_laptop_tc_i_encode(frame_decoded.laptop_tc_i); + frame_encoded.laptop_tc_p = can1_override_powermap_laptop_tc_p_encode(frame_decoded.laptop_tc_p); + frame_encoded.laptop_tc_mumax = can1_override_powermap_laptop_tc_mumax_encode(frame_decoded.laptop_tc_mumax); + return frame_encoded; +} + +inline can1_override_laptop_2_t override_laptop_2(const frame::decoded::can1::override_laptop_2_t frame_decoded) { + can1_override_laptop_2_t frame_encoded; + frame_encoded.as_mission = can1_override_laptop_2_as_mission_encode(frame_decoded.as_mission); + frame_encoded.as_state = can1_override_laptop_2_as_state_encode(frame_decoded.as_state); + frame_encoded.manual_input_torque = can1_override_laptop_2_manual_input_torque_encode(frame_decoded.manual_input_torque); + frame_encoded.laptop_powerlimit = can1_override_laptop_2_laptop_powerlimit_encode(frame_decoded.laptop_powerlimit); + frame_encoded.laptop_torque_lim = can1_override_laptop_2_laptop_torque_lim_encode(frame_decoded.laptop_torque_lim); + return frame_encoded; +} + +inline can1_override_epsc_cooling_t override_epsc_cooling(const frame::decoded::can1::override_epsc_cooling_t frame_decoded) { + can1_override_epsc_cooling_t frame_encoded; + frame_encoded.epsc_manual_angle = can1_override_epsc_cooling_epsc_manual_angle_encode(frame_decoded.epsc_manual_angle); + frame_encoded.epsc_mode = can1_override_epsc_cooling_epsc_mode_encode(frame_decoded.epsc_mode); + frame_encoded.ac_cooling_enable = can1_override_epsc_cooling_ac_cooling_enable_encode(frame_decoded.ac_cooling_enable); + frame_encoded.ts_cooling_enable = can1_override_epsc_cooling_ts_cooling_enable_encode(frame_decoded.ts_cooling_enable); + frame_encoded.ac_cooling_pwm = can1_override_epsc_cooling_ac_cooling_pwm_encode(frame_decoded.ac_cooling_pwm); + frame_encoded.ts_cooling_pwm = can1_override_epsc_cooling_ts_cooling_pwm_encode(frame_decoded.ts_cooling_pwm); + return frame_encoded; +} + +inline can1_override_laptop_t override_laptop(const frame::decoded::can1::override_laptop_t frame_decoded) { + can1_override_laptop_t frame_encoded; + frame_encoded.fake_r2_d = can1_override_laptop_fake_r2_d_encode(frame_decoded.fake_r2_d); + frame_encoded.fake_soundbox_emergency = can1_override_laptop_fake_soundbox_emergency_encode(frame_decoded.fake_soundbox_emergency); + frame_encoded.fake_soundbox_r2_d = can1_override_laptop_fake_soundbox_r2_d_encode(frame_decoded.fake_soundbox_r2_d); + frame_encoded.fake_ts_active = can1_override_laptop_fake_ts_active_encode(frame_decoded.fake_ts_active); + frame_encoded.override_apps = can1_override_laptop_override_apps_encode(frame_decoded.override_apps); + frame_encoded.override_as_mission = can1_override_laptop_override_as_mission_encode(frame_decoded.override_as_mission); + frame_encoded.override_as_state = can1_override_laptop_override_as_state_encode(frame_decoded.override_as_state); + frame_encoded.override_epsc_mode = can1_override_laptop_override_epsc_mode_encode(frame_decoded.override_epsc_mode); + frame_encoded.override_pdu_ac_cooling_enable = can1_override_laptop_override_pdu_ac_cooling_enable_encode(frame_decoded.override_pdu_ac_cooling_enable); + frame_encoded.override_pdu_acu_enable = can1_override_laptop_override_pdu_acu_enable_encode(frame_decoded.override_pdu_acu_enable); + frame_encoded.override_pdu_drs_enable = can1_override_laptop_override_pdu_drs_enable_encode(frame_decoded.override_pdu_drs_enable); + frame_encoded.override_pdu_epsc_enable = can1_override_laptop_override_pdu_epsc_enable_encode(frame_decoded.override_pdu_epsc_enable); + frame_encoded.override_pdu_heartbeat = can1_override_laptop_override_pdu_heartbeat_encode(frame_decoded.override_pdu_heartbeat); + frame_encoded.override_pdu_lidar_enable = can1_override_laptop_override_pdu_lidar_enable_encode(frame_decoded.override_pdu_lidar_enable); + frame_encoded.override_pdu_pn_v1_enable = can1_override_laptop_override_pdu_pn_v1_enable_encode(frame_decoded.override_pdu_pn_v1_enable); + frame_encoded.override_pdu_pn_v2_enable = can1_override_laptop_override_pdu_pn_v2_enable_encode(frame_decoded.override_pdu_pn_v2_enable); + frame_encoded.override_pdu_ts_cooling_enable = can1_override_laptop_override_pdu_ts_cooling_enable_encode(frame_decoded.override_pdu_ts_cooling_enable); + frame_encoded.override_power_map = can1_override_laptop_override_power_map_encode(frame_decoded.override_power_map); + frame_encoded.override_tc_parameter = can1_override_laptop_override_tc_parameter_encode(frame_decoded.override_tc_parameter); + frame_encoded.override_torque_input = can1_override_laptop_override_torque_input_encode(frame_decoded.override_torque_input); + return frame_encoded; +} + +inline can1_apps_override_t apps_override(const frame::decoded::can1::apps_override_t frame_decoded) { + can1_apps_override_t frame_encoded; + frame_encoded.apps_0_max = can1_apps_override_apps_0_max_encode(frame_decoded.apps_0_max); + frame_encoded.apps_0_min = can1_apps_override_apps_0_min_encode(frame_decoded.apps_0_min); + frame_encoded.apps_1_max = can1_apps_override_apps_1_max_encode(frame_decoded.apps_1_max); + frame_encoded.apps_1_min = can1_apps_override_apps_1_min_encode(frame_decoded.apps_1_min); + return frame_encoded; +} + +inline can1_ftcu_damper_t ftcu_damper(const frame::decoded::can1::ftcu_damper_t frame_decoded) { + can1_ftcu_damper_t frame_encoded; + frame_encoded.ftcu_damper_fl = can1_ftcu_damper_ftcu_damper_fl_encode(frame_decoded.ftcu_damper_fl); + frame_encoded.ftcu_damper_fr = can1_ftcu_damper_ftcu_damper_fr_encode(frame_decoded.ftcu_damper_fr); + frame_encoded.ftcu_damper_rl = can1_ftcu_damper_ftcu_damper_rl_encode(frame_decoded.ftcu_damper_rl); + frame_encoded.ftcu_damper_rr = can1_ftcu_damper_ftcu_damper_rr_encode(frame_decoded.ftcu_damper_rr); + return frame_encoded; +} + +inline can1_ftcu_param_confirm_t ftcu_param_confirm(const frame::decoded::can1::ftcu_param_confirm_t frame_decoded) { + can1_ftcu_param_confirm_t frame_encoded; + frame_encoded.ftcu_param_confirm = can1_ftcu_param_confirm_ftcu_param_confirm_encode(frame_decoded.ftcu_param_confirm); + return frame_encoded; +} + +inline can1_sensornode_f_10_hz_t sensornode_f_10_hz(const frame::decoded::can1::sensornode_f_10_hz_t frame_decoded) { + can1_sensornode_f_10_hz_t frame_encoded; + frame_encoded.ls_l = can1_sensornode_f_10_hz_ls_l_encode(frame_decoded.ls_l); + frame_encoded.ls_r = can1_sensornode_f_10_hz_ls_r_encode(frame_decoded.ls_r); + frame_encoded.sdc_m_pre_bots = can1_sensornode_f_10_hz_sdc_m_pre_bots_encode(frame_decoded.sdc_m_pre_bots); + frame_encoded.sdc_m_post_ins = can1_sensornode_f_10_hz_sdc_m_post_ins_encode(frame_decoded.sdc_m_post_ins); + frame_encoded.sdc_m_post_bspd = can1_sensornode_f_10_hz_sdc_m_post_bspd_encode(frame_decoded.sdc_m_post_bspd); + frame_encoded.bdts_fl = can1_sensornode_f_10_hz_bdts_fl_encode(frame_decoded.bdts_fl); + frame_encoded.bdts_fr = can1_sensornode_f_10_hz_bdts_fr_encode(frame_decoded.bdts_fr); + return frame_encoded; +} + +inline can1_sensornode_f_100_hz_1_t sensornode_f_100_hz_1(const frame::decoded::can1::sensornode_f_100_hz_1_t frame_decoded) { + can1_sensornode_f_100_hz_1_t frame_encoded; + frame_encoded.apps_1 = can1_sensornode_f_100_hz_1_apps_1_encode(frame_decoded.apps_1); + frame_encoded.apps_2 = can1_sensornode_f_100_hz_1_apps_2_encode(frame_decoded.apps_2); + frame_encoded.bp_f = can1_sensornode_f_100_hz_1_bp_f_encode(frame_decoded.bp_f); + frame_encoded.sas = can1_sensornode_f_100_hz_1_sas_encode(frame_decoded.sas); + frame_encoded.wss_fl = can1_sensornode_f_100_hz_1_wss_fl_encode(frame_decoded.wss_fl); + frame_encoded.wss_fr = can1_sensornode_f_100_hz_1_wss_fr_encode(frame_decoded.wss_fr); + return frame_encoded; +} + +inline can1_sensornode_f_100_hz_2_t sensornode_f_100_hz_2(const frame::decoded::can1::sensornode_f_100_hz_2_t frame_decoded) { + can1_sensornode_f_100_hz_2_t frame_encoded; + frame_encoded.ds_fl = can1_sensornode_f_100_hz_2_ds_fl_encode(frame_decoded.ds_fl); + frame_encoded.ds_fr = can1_sensornode_f_100_hz_2_ds_fr_encode(frame_decoded.ds_fr); + return frame_encoded; +} + +inline can1_sensornode_f_1k_hz_t sensornode_f_1k_hz(const frame::decoded::can1::sensornode_f_1k_hz_t frame_decoded) { + can1_sensornode_f_1k_hz_t frame_encoded; + frame_encoded.sls_fl = can1_sensornode_f_1k_hz_sls_fl_encode(frame_decoded.sls_fl); + frame_encoded.sls_fr = can1_sensornode_f_1k_hz_sls_fr_encode(frame_decoded.sls_fr); + return frame_encoded; +} + +inline can1_sensornode_r_10_hz_t sensornode_r_10_hz(const frame::decoded::can1::sensornode_r_10_hz_t frame_decoded) { + can1_sensornode_r_10_hz_t frame_encoded; + frame_encoded.ext_ts_on = can1_sensornode_r_10_hz_ext_ts_on_encode(frame_decoded.ext_ts_on); + frame_encoded.sdc_m_pre_tsms = can1_sensornode_r_10_hz_sdc_m_pre_tsms_encode(frame_decoded.sdc_m_pre_tsms); + frame_encoded.sdc_m_post_tsms = can1_sensornode_r_10_hz_sdc_m_post_tsms_encode(frame_decoded.sdc_m_post_tsms); + frame_encoded.bdts_rl = can1_sensornode_r_10_hz_bdts_rl_encode(frame_decoded.bdts_rl); + frame_encoded.bdts_rr = can1_sensornode_r_10_hz_bdts_rr_encode(frame_decoded.bdts_rr); + frame_encoded.wt_bat = can1_sensornode_r_10_hz_wt_bat_encode(frame_decoded.wt_bat); + frame_encoded.wt_dt = can1_sensornode_r_10_hz_wt_dt_encode(frame_decoded.wt_dt); + frame_encoded.wp_bat = can1_sensornode_r_10_hz_wp_bat_encode(frame_decoded.wp_bat); + frame_encoded.wp_dt = can1_sensornode_r_10_hz_wp_dt_encode(frame_decoded.wp_dt); + return frame_encoded; +} + +inline can1_sensornode_r_100_hz_t sensornode_r_100_hz(const frame::decoded::can1::sensornode_r_100_hz_t frame_decoded) { + can1_sensornode_r_100_hz_t frame_encoded; + frame_encoded.ebs_aps_1 = can1_sensornode_r_100_hz_ebs_aps_1_encode(frame_decoded.ebs_aps_1); + frame_encoded.ebs_aps_2 = can1_sensornode_r_100_hz_ebs_aps_2_encode(frame_decoded.ebs_aps_2); + frame_encoded.bp_r = can1_sensornode_r_100_hz_bp_r_encode(frame_decoded.bp_r); + frame_encoded.wss_rl = can1_sensornode_r_100_hz_wss_rl_encode(frame_decoded.wss_rl); + frame_encoded.wss_rr = can1_sensornode_r_100_hz_wss_rr_encode(frame_decoded.wss_rr); + frame_encoded.ds_rl = can1_sensornode_r_100_hz_ds_rl_encode(frame_decoded.ds_rl); + frame_encoded.ds_rr = can1_sensornode_r_100_hz_ds_rr_encode(frame_decoded.ds_rr); + return frame_encoded; +} + +inline can1_sensornode_r_1k_hz_t sensornode_r_1k_hz(const frame::decoded::can1::sensornode_r_1k_hz_t frame_decoded) { + can1_sensornode_r_1k_hz_t frame_encoded; + frame_encoded.sls_rl = can1_sensornode_r_1k_hz_sls_rl_encode(frame_decoded.sls_rl); + frame_encoded.sls_rr = can1_sensornode_r_1k_hz_sls_rr_encode(frame_decoded.sls_rr); + return frame_encoded; +} + +inline can1_pwm_duty_cycle_t pwm_duty_cycle(const frame::decoded::can1::pwm_duty_cycle_t frame_decoded) { + can1_pwm_duty_cycle_t frame_encoded; + frame_encoded.dc_drs = can1_pwm_duty_cycle_dc_drs_encode(frame_decoded.dc_drs); + frame_encoded.dc_assi_y = can1_pwm_duty_cycle_dc_assi_y_encode(frame_decoded.dc_assi_y); + frame_encoded.dc_assi_b = can1_pwm_duty_cycle_dc_assi_b_encode(frame_decoded.dc_assi_b); + frame_encoded.dc_bl = can1_pwm_duty_cycle_dc_bl_encode(frame_decoded.dc_bl); + frame_encoded.dc_fans_dt = can1_pwm_duty_cycle_dc_fans_dt_encode(frame_decoded.dc_fans_dt); + frame_encoded.dc_fans_bat = can1_pwm_duty_cycle_dc_fans_bat_encode(frame_decoded.dc_fans_bat); + frame_encoded.dc_sbx = can1_pwm_duty_cycle_dc_sbx_encode(frame_decoded.dc_sbx); + return frame_encoded; +} + +inline can1_pwm_config_t pwm_config(const frame::decoded::can1::pwm_config_t frame_decoded) { + can1_pwm_config_t frame_encoded; + frame_encoded.freq_pwm1_drs_lighting = can1_pwm_config_freq_pwm1_drs_lighting_encode(frame_decoded.freq_pwm1_drs_lighting); + frame_encoded.freq_pwm3_fans = can1_pwm_config_freq_pwm3_fans_encode(frame_decoded.freq_pwm3_fans); + frame_encoded.freq_pwm2_sbx = can1_pwm_config_freq_pwm2_sbx_encode(frame_decoded.freq_pwm2_sbx); + return frame_encoded; +} + +inline can1_dashboard_in_t dashboard_in(const frame::decoded::can1::dashboard_in_t frame_decoded) { + can1_dashboard_in_t frame_encoded; + frame_encoded.dashboard_r2_d_button = can1_dashboard_in_dashboard_r2_d_button_encode(frame_decoded.dashboard_r2_d_button); + frame_encoded.dashboard_ts_activate_button = can1_dashboard_in_dashboard_ts_activate_button_encode(frame_decoded.dashboard_ts_activate_button); + frame_encoded.dashboard_race_key = can1_dashboard_in_dashboard_race_key_encode(frame_decoded.dashboard_race_key); + frame_encoded.dashboard_sdc_in = can1_dashboard_in_dashboard_sdc_in_encode(frame_decoded.dashboard_sdc_in); + frame_encoded.dashboard_sdc_out = can1_dashboard_in_dashboard_sdc_out_encode(frame_decoded.dashboard_sdc_out); + return frame_encoded; +} + +inline can1_ams_slave1_status_t ams_slave1_status(const frame::decoded::can1::ams_slave1_status_t frame_decoded) { + can1_ams_slave1_status_t frame_encoded; + frame_encoded.ams_slave_status_error = can1_ams_slave1_status_ams_slave_status_error_encode(frame_decoded.ams_slave_status_error); + frame_encoded.ams_slave_status_id = can1_ams_slave1_status_ams_slave_status_id_encode(frame_decoded.ams_slave_status_id); + frame_encoded.ams_slave_status_temp_sensor = can1_ams_slave1_status_ams_slave_status_temp_sensor_encode(frame_decoded.ams_slave_status_temp_sensor); + frame_encoded.ams_slave_status_min_cell_volt = can1_ams_slave1_status_ams_slave_status_min_cell_volt_encode(frame_decoded.ams_slave_status_min_cell_volt); + frame_encoded.ams_slave_status_max_cell_volt = can1_ams_slave1_status_ams_slave_status_max_cell_volt_encode(frame_decoded.ams_slave_status_max_cell_volt); + frame_encoded.ams_slave_status_max_temp = can1_ams_slave1_status_ams_slave_status_max_temp_encode(frame_decoded.ams_slave_status_max_temp); + return frame_encoded; +} + +inline can1_ams_slave2_log0_t ams_slave2_log0(const frame::decoded::can1::ams_slave2_log0_t frame_decoded) { + can1_ams_slave2_log0_t frame_encoded; + frame_encoded.ams_slave_id_v0 = can1_ams_slave2_log0_ams_slave_id_v0_encode(frame_decoded.ams_slave_id_v0); + frame_encoded.ams_slave_id_v1 = can1_ams_slave2_log0_ams_slave_id_v1_encode(frame_decoded.ams_slave_id_v1); + frame_encoded.ams_slave_id_v2 = can1_ams_slave2_log0_ams_slave_id_v2_encode(frame_decoded.ams_slave_id_v2); + frame_encoded.ams_slave_id_v3 = can1_ams_slave2_log0_ams_slave_id_v3_encode(frame_decoded.ams_slave_id_v3); + return frame_encoded; +} + +inline can1_ams_slave2_log1_t ams_slave2_log1(const frame::decoded::can1::ams_slave2_log1_t frame_decoded) { + can1_ams_slave2_log1_t frame_encoded; + frame_encoded.ams_slave_id_v4 = can1_ams_slave2_log1_ams_slave_id_v4_encode(frame_decoded.ams_slave_id_v4); + frame_encoded.ams_slave_id_v5 = can1_ams_slave2_log1_ams_slave_id_v5_encode(frame_decoded.ams_slave_id_v5); + frame_encoded.ams_slave_id_v6 = can1_ams_slave2_log1_ams_slave_id_v6_encode(frame_decoded.ams_slave_id_v6); + frame_encoded.ams_slave_id_v7 = can1_ams_slave2_log1_ams_slave_id_v7_encode(frame_decoded.ams_slave_id_v7); + return frame_encoded; +} + +inline can1_ams_slave2_log2_t ams_slave2_log2(const frame::decoded::can1::ams_slave2_log2_t frame_decoded) { + can1_ams_slave2_log2_t frame_encoded; + frame_encoded.ams_slave_id_v8 = can1_ams_slave2_log2_ams_slave_id_v8_encode(frame_decoded.ams_slave_id_v8); + frame_encoded.ams_slave_id_v9 = can1_ams_slave2_log2_ams_slave_id_v9_encode(frame_decoded.ams_slave_id_v9); + frame_encoded.ams_slave_id_v10 = can1_ams_slave2_log2_ams_slave_id_v10_encode(frame_decoded.ams_slave_id_v10); + frame_encoded.ams_slave_id_v11 = can1_ams_slave2_log2_ams_slave_id_v11_encode(frame_decoded.ams_slave_id_v11); + return frame_encoded; +} + +inline can1_ams_slave2_log3_t ams_slave2_log3(const frame::decoded::can1::ams_slave2_log3_t frame_decoded) { + can1_ams_slave2_log3_t frame_encoded; + frame_encoded.ams_slave_id_v12 = can1_ams_slave2_log3_ams_slave_id_v12_encode(frame_decoded.ams_slave_id_v12); + frame_encoded.ams_slave_id_v13 = can1_ams_slave2_log3_ams_slave_id_v13_encode(frame_decoded.ams_slave_id_v13); + frame_encoded.ams_slave_id_v14 = can1_ams_slave2_log3_ams_slave_id_v14_encode(frame_decoded.ams_slave_id_v14); + frame_encoded.ams_slave_id_v15 = can1_ams_slave2_log3_ams_slave_id_v15_encode(frame_decoded.ams_slave_id_v15); + return frame_encoded; +} + +inline can1_ams_slave2_log4_t ams_slave2_log4(const frame::decoded::can1::ams_slave2_log4_t frame_decoded) { + can1_ams_slave2_log4_t frame_encoded; + frame_encoded.ams_slave_id_failed_sensors = can1_ams_slave2_log4_ams_slave_id_failed_sensors_encode(frame_decoded.ams_slave_id_failed_sensors); + return frame_encoded; +} + +inline can1_ams_slave2_log5_t ams_slave2_log5(const frame::decoded::can1::ams_slave2_log5_t frame_decoded) { + can1_ams_slave2_log5_t frame_encoded; + frame_encoded.ams_slave_id_t0 = can1_ams_slave2_log5_ams_slave_id_t0_encode(frame_decoded.ams_slave_id_t0); + frame_encoded.ams_slave_id_t1 = can1_ams_slave2_log5_ams_slave_id_t1_encode(frame_decoded.ams_slave_id_t1); + frame_encoded.ams_slave_id_t2 = can1_ams_slave2_log5_ams_slave_id_t2_encode(frame_decoded.ams_slave_id_t2); + frame_encoded.ams_slave_id_t3 = can1_ams_slave2_log5_ams_slave_id_t3_encode(frame_decoded.ams_slave_id_t3); + frame_encoded.ams_slave_id_t4 = can1_ams_slave2_log5_ams_slave_id_t4_encode(frame_decoded.ams_slave_id_t4); + frame_encoded.ams_slave_id_t5 = can1_ams_slave2_log5_ams_slave_id_t5_encode(frame_decoded.ams_slave_id_t5); + frame_encoded.ams_slave_id_t6 = can1_ams_slave2_log5_ams_slave_id_t6_encode(frame_decoded.ams_slave_id_t6); + frame_encoded.ams_slave_id_t7 = can1_ams_slave2_log5_ams_slave_id_t7_encode(frame_decoded.ams_slave_id_t7); + return frame_encoded; +} + +inline can1_ams_slave5_log6_t ams_slave5_log6(const frame::decoded::can1::ams_slave5_log6_t frame_decoded) { + can1_ams_slave5_log6_t frame_encoded; + frame_encoded.ams_slave_id_t8 = can1_ams_slave5_log6_ams_slave_id_t8_encode(frame_decoded.ams_slave_id_t8); + frame_encoded.ams_slave_id_t9 = can1_ams_slave5_log6_ams_slave_id_t9_encode(frame_decoded.ams_slave_id_t9); + return frame_encoded; +} + +inline can1_ams_slave4_log6_t ams_slave4_log6(const frame::decoded::can1::ams_slave4_log6_t frame_decoded) { + can1_ams_slave4_log6_t frame_encoded; + frame_encoded.ams_slave_id_t8 = can1_ams_slave4_log6_ams_slave_id_t8_encode(frame_decoded.ams_slave_id_t8); + frame_encoded.ams_slave_id_t9 = can1_ams_slave4_log6_ams_slave_id_t9_encode(frame_decoded.ams_slave_id_t9); + return frame_encoded; +} + +inline can1_ams_slave3_log6_t ams_slave3_log6(const frame::decoded::can1::ams_slave3_log6_t frame_decoded) { + can1_ams_slave3_log6_t frame_encoded; + frame_encoded.ams_slave_id_t8 = can1_ams_slave3_log6_ams_slave_id_t8_encode(frame_decoded.ams_slave_id_t8); + frame_encoded.ams_slave_id_t9 = can1_ams_slave3_log6_ams_slave_id_t9_encode(frame_decoded.ams_slave_id_t9); + return frame_encoded; +} + +inline can1_ams_slave2_log6_t ams_slave2_log6(const frame::decoded::can1::ams_slave2_log6_t frame_decoded) { + can1_ams_slave2_log6_t frame_encoded; + frame_encoded.ams_slave_id_t8 = can1_ams_slave2_log6_ams_slave_id_t8_encode(frame_decoded.ams_slave_id_t8); + frame_encoded.ams_slave_id_t9 = can1_ams_slave2_log6_ams_slave_id_t9_encode(frame_decoded.ams_slave_id_t9); + return frame_encoded; +} + +inline can1_ams_slave1_log6_t ams_slave1_log6(const frame::decoded::can1::ams_slave1_log6_t frame_decoded) { + can1_ams_slave1_log6_t frame_encoded; + frame_encoded.ams_slave_id_t8 = can1_ams_slave1_log6_ams_slave_id_t8_encode(frame_decoded.ams_slave_id_t8); + frame_encoded.ams_slave_id_t9 = can1_ams_slave1_log6_ams_slave_id_t9_encode(frame_decoded.ams_slave_id_t9); + return frame_encoded; +} + +inline can1_ams_slave5_log5_t ams_slave5_log5(const frame::decoded::can1::ams_slave5_log5_t frame_decoded) { + can1_ams_slave5_log5_t frame_encoded; + frame_encoded.ams_slave_id_t0 = can1_ams_slave5_log5_ams_slave_id_t0_encode(frame_decoded.ams_slave_id_t0); + frame_encoded.ams_slave_id_t1 = can1_ams_slave5_log5_ams_slave_id_t1_encode(frame_decoded.ams_slave_id_t1); + frame_encoded.ams_slave_id_t2 = can1_ams_slave5_log5_ams_slave_id_t2_encode(frame_decoded.ams_slave_id_t2); + frame_encoded.ams_slave_id_t3 = can1_ams_slave5_log5_ams_slave_id_t3_encode(frame_decoded.ams_slave_id_t3); + frame_encoded.ams_slave_id_t4 = can1_ams_slave5_log5_ams_slave_id_t4_encode(frame_decoded.ams_slave_id_t4); + frame_encoded.ams_slave_id_t5 = can1_ams_slave5_log5_ams_slave_id_t5_encode(frame_decoded.ams_slave_id_t5); + frame_encoded.ams_slave_id_t6 = can1_ams_slave5_log5_ams_slave_id_t6_encode(frame_decoded.ams_slave_id_t6); + frame_encoded.ams_slave_id_t7 = can1_ams_slave5_log5_ams_slave_id_t7_encode(frame_decoded.ams_slave_id_t7); + return frame_encoded; +} + +inline can1_ams_slave4_log5_t ams_slave4_log5(const frame::decoded::can1::ams_slave4_log5_t frame_decoded) { + can1_ams_slave4_log5_t frame_encoded; + frame_encoded.ams_slave_id_t0 = can1_ams_slave4_log5_ams_slave_id_t0_encode(frame_decoded.ams_slave_id_t0); + frame_encoded.ams_slave_id_t1 = can1_ams_slave4_log5_ams_slave_id_t1_encode(frame_decoded.ams_slave_id_t1); + frame_encoded.ams_slave_id_t2 = can1_ams_slave4_log5_ams_slave_id_t2_encode(frame_decoded.ams_slave_id_t2); + frame_encoded.ams_slave_id_t3 = can1_ams_slave4_log5_ams_slave_id_t3_encode(frame_decoded.ams_slave_id_t3); + frame_encoded.ams_slave_id_t4 = can1_ams_slave4_log5_ams_slave_id_t4_encode(frame_decoded.ams_slave_id_t4); + frame_encoded.ams_slave_id_t5 = can1_ams_slave4_log5_ams_slave_id_t5_encode(frame_decoded.ams_slave_id_t5); + frame_encoded.ams_slave_id_t6 = can1_ams_slave4_log5_ams_slave_id_t6_encode(frame_decoded.ams_slave_id_t6); + frame_encoded.ams_slave_id_t7 = can1_ams_slave4_log5_ams_slave_id_t7_encode(frame_decoded.ams_slave_id_t7); + return frame_encoded; +} + +inline can1_ams_slave3_log5_t ams_slave3_log5(const frame::decoded::can1::ams_slave3_log5_t frame_decoded) { + can1_ams_slave3_log5_t frame_encoded; + frame_encoded.ams_slave_id_t0 = can1_ams_slave3_log5_ams_slave_id_t0_encode(frame_decoded.ams_slave_id_t0); + frame_encoded.ams_slave_id_t1 = can1_ams_slave3_log5_ams_slave_id_t1_encode(frame_decoded.ams_slave_id_t1); + frame_encoded.ams_slave_id_t2 = can1_ams_slave3_log5_ams_slave_id_t2_encode(frame_decoded.ams_slave_id_t2); + frame_encoded.ams_slave_id_t3 = can1_ams_slave3_log5_ams_slave_id_t3_encode(frame_decoded.ams_slave_id_t3); + frame_encoded.ams_slave_id_t4 = can1_ams_slave3_log5_ams_slave_id_t4_encode(frame_decoded.ams_slave_id_t4); + frame_encoded.ams_slave_id_t5 = can1_ams_slave3_log5_ams_slave_id_t5_encode(frame_decoded.ams_slave_id_t5); + frame_encoded.ams_slave_id_t6 = can1_ams_slave3_log5_ams_slave_id_t6_encode(frame_decoded.ams_slave_id_t6); + frame_encoded.ams_slave_id_t7 = can1_ams_slave3_log5_ams_slave_id_t7_encode(frame_decoded.ams_slave_id_t7); + return frame_encoded; +} + +inline can1_ams_slave1_log5_t ams_slave1_log5(const frame::decoded::can1::ams_slave1_log5_t frame_decoded) { + can1_ams_slave1_log5_t frame_encoded; + frame_encoded.ams_slave_id_t0 = can1_ams_slave1_log5_ams_slave_id_t0_encode(frame_decoded.ams_slave_id_t0); + frame_encoded.ams_slave_id_t1 = can1_ams_slave1_log5_ams_slave_id_t1_encode(frame_decoded.ams_slave_id_t1); + frame_encoded.ams_slave_id_t2 = can1_ams_slave1_log5_ams_slave_id_t2_encode(frame_decoded.ams_slave_id_t2); + frame_encoded.ams_slave_id_t3 = can1_ams_slave1_log5_ams_slave_id_t3_encode(frame_decoded.ams_slave_id_t3); + frame_encoded.ams_slave_id_t4 = can1_ams_slave1_log5_ams_slave_id_t4_encode(frame_decoded.ams_slave_id_t4); + frame_encoded.ams_slave_id_t5 = can1_ams_slave1_log5_ams_slave_id_t5_encode(frame_decoded.ams_slave_id_t5); + frame_encoded.ams_slave_id_t6 = can1_ams_slave1_log5_ams_slave_id_t6_encode(frame_decoded.ams_slave_id_t6); + frame_encoded.ams_slave_id_t7 = can1_ams_slave1_log5_ams_slave_id_t7_encode(frame_decoded.ams_slave_id_t7); + return frame_encoded; +} + +inline can1_ams_slave5_log4_t ams_slave5_log4(const frame::decoded::can1::ams_slave5_log4_t frame_decoded) { + can1_ams_slave5_log4_t frame_encoded; + frame_encoded.ams_slave_id_failed_sensors = can1_ams_slave5_log4_ams_slave_id_failed_sensors_encode(frame_decoded.ams_slave_id_failed_sensors); + return frame_encoded; +} + +inline can1_ams_slave4_log4_t ams_slave4_log4(const frame::decoded::can1::ams_slave4_log4_t frame_decoded) { + can1_ams_slave4_log4_t frame_encoded; + frame_encoded.ams_slave_id_failed_sensors = can1_ams_slave4_log4_ams_slave_id_failed_sensors_encode(frame_decoded.ams_slave_id_failed_sensors); + return frame_encoded; +} + +inline can1_ams_slave3_log4_t ams_slave3_log4(const frame::decoded::can1::ams_slave3_log4_t frame_decoded) { + can1_ams_slave3_log4_t frame_encoded; + frame_encoded.ams_slave_id_failed_sensors = can1_ams_slave3_log4_ams_slave_id_failed_sensors_encode(frame_decoded.ams_slave_id_failed_sensors); + return frame_encoded; +} + +inline can1_ams_slave1_log4_t ams_slave1_log4(const frame::decoded::can1::ams_slave1_log4_t frame_decoded) { + can1_ams_slave1_log4_t frame_encoded; + frame_encoded.ams_slave_id_failed_sensors = can1_ams_slave1_log4_ams_slave_id_failed_sensors_encode(frame_decoded.ams_slave_id_failed_sensors); + return frame_encoded; +} + +inline can1_ams_slave5_log3_t ams_slave5_log3(const frame::decoded::can1::ams_slave5_log3_t frame_decoded) { + can1_ams_slave5_log3_t frame_encoded; + frame_encoded.ams_slave_id_v12 = can1_ams_slave5_log3_ams_slave_id_v12_encode(frame_decoded.ams_slave_id_v12); + frame_encoded.ams_slave_id_v13 = can1_ams_slave5_log3_ams_slave_id_v13_encode(frame_decoded.ams_slave_id_v13); + frame_encoded.ams_slave_id_v14 = can1_ams_slave5_log3_ams_slave_id_v14_encode(frame_decoded.ams_slave_id_v14); + frame_encoded.ams_slave_id_v15 = can1_ams_slave5_log3_ams_slave_id_v15_encode(frame_decoded.ams_slave_id_v15); + return frame_encoded; +} + +inline can1_ams_slave4_log3_t ams_slave4_log3(const frame::decoded::can1::ams_slave4_log3_t frame_decoded) { + can1_ams_slave4_log3_t frame_encoded; + frame_encoded.ams_slave_id_v12 = can1_ams_slave4_log3_ams_slave_id_v12_encode(frame_decoded.ams_slave_id_v12); + frame_encoded.ams_slave_id_v13 = can1_ams_slave4_log3_ams_slave_id_v13_encode(frame_decoded.ams_slave_id_v13); + frame_encoded.ams_slave_id_v14 = can1_ams_slave4_log3_ams_slave_id_v14_encode(frame_decoded.ams_slave_id_v14); + frame_encoded.ams_slave_id_v15 = can1_ams_slave4_log3_ams_slave_id_v15_encode(frame_decoded.ams_slave_id_v15); + return frame_encoded; +} + +inline can1_ams_slave3_log3_t ams_slave3_log3(const frame::decoded::can1::ams_slave3_log3_t frame_decoded) { + can1_ams_slave3_log3_t frame_encoded; + frame_encoded.ams_slave_id_v12 = can1_ams_slave3_log3_ams_slave_id_v12_encode(frame_decoded.ams_slave_id_v12); + frame_encoded.ams_slave_id_v13 = can1_ams_slave3_log3_ams_slave_id_v13_encode(frame_decoded.ams_slave_id_v13); + frame_encoded.ams_slave_id_v14 = can1_ams_slave3_log3_ams_slave_id_v14_encode(frame_decoded.ams_slave_id_v14); + frame_encoded.ams_slave_id_v15 = can1_ams_slave3_log3_ams_slave_id_v15_encode(frame_decoded.ams_slave_id_v15); + return frame_encoded; +} + +inline can1_ams_slave1_log3_t ams_slave1_log3(const frame::decoded::can1::ams_slave1_log3_t frame_decoded) { + can1_ams_slave1_log3_t frame_encoded; + frame_encoded.ams_slave_id_v12 = can1_ams_slave1_log3_ams_slave_id_v12_encode(frame_decoded.ams_slave_id_v12); + frame_encoded.ams_slave_id_v13 = can1_ams_slave1_log3_ams_slave_id_v13_encode(frame_decoded.ams_slave_id_v13); + frame_encoded.ams_slave_id_v14 = can1_ams_slave1_log3_ams_slave_id_v14_encode(frame_decoded.ams_slave_id_v14); + frame_encoded.ams_slave_id_v15 = can1_ams_slave1_log3_ams_slave_id_v15_encode(frame_decoded.ams_slave_id_v15); + return frame_encoded; +} + +inline can1_ams_slave5_log2_t ams_slave5_log2(const frame::decoded::can1::ams_slave5_log2_t frame_decoded) { + can1_ams_slave5_log2_t frame_encoded; + frame_encoded.ams_slave_id_v8 = can1_ams_slave5_log2_ams_slave_id_v8_encode(frame_decoded.ams_slave_id_v8); + frame_encoded.ams_slave_id_v9 = can1_ams_slave5_log2_ams_slave_id_v9_encode(frame_decoded.ams_slave_id_v9); + frame_encoded.ams_slave_id_v10 = can1_ams_slave5_log2_ams_slave_id_v10_encode(frame_decoded.ams_slave_id_v10); + frame_encoded.ams_slave_id_v11 = can1_ams_slave5_log2_ams_slave_id_v11_encode(frame_decoded.ams_slave_id_v11); + return frame_encoded; +} + +inline can1_ams_slave4_log2_t ams_slave4_log2(const frame::decoded::can1::ams_slave4_log2_t frame_decoded) { + can1_ams_slave4_log2_t frame_encoded; + frame_encoded.ams_slave_id_v8 = can1_ams_slave4_log2_ams_slave_id_v8_encode(frame_decoded.ams_slave_id_v8); + frame_encoded.ams_slave_id_v9 = can1_ams_slave4_log2_ams_slave_id_v9_encode(frame_decoded.ams_slave_id_v9); + frame_encoded.ams_slave_id_v10 = can1_ams_slave4_log2_ams_slave_id_v10_encode(frame_decoded.ams_slave_id_v10); + frame_encoded.ams_slave_id_v11 = can1_ams_slave4_log2_ams_slave_id_v11_encode(frame_decoded.ams_slave_id_v11); + return frame_encoded; +} + +inline can1_ams_slave3_log2_t ams_slave3_log2(const frame::decoded::can1::ams_slave3_log2_t frame_decoded) { + can1_ams_slave3_log2_t frame_encoded; + frame_encoded.ams_slave_id_v8 = can1_ams_slave3_log2_ams_slave_id_v8_encode(frame_decoded.ams_slave_id_v8); + frame_encoded.ams_slave_id_v9 = can1_ams_slave3_log2_ams_slave_id_v9_encode(frame_decoded.ams_slave_id_v9); + frame_encoded.ams_slave_id_v10 = can1_ams_slave3_log2_ams_slave_id_v10_encode(frame_decoded.ams_slave_id_v10); + frame_encoded.ams_slave_id_v11 = can1_ams_slave3_log2_ams_slave_id_v11_encode(frame_decoded.ams_slave_id_v11); + return frame_encoded; +} + +inline can1_ams_slave1_log2_t ams_slave1_log2(const frame::decoded::can1::ams_slave1_log2_t frame_decoded) { + can1_ams_slave1_log2_t frame_encoded; + frame_encoded.ams_slave_id_v8 = can1_ams_slave1_log2_ams_slave_id_v8_encode(frame_decoded.ams_slave_id_v8); + frame_encoded.ams_slave_id_v9 = can1_ams_slave1_log2_ams_slave_id_v9_encode(frame_decoded.ams_slave_id_v9); + frame_encoded.ams_slave_id_v10 = can1_ams_slave1_log2_ams_slave_id_v10_encode(frame_decoded.ams_slave_id_v10); + frame_encoded.ams_slave_id_v11 = can1_ams_slave1_log2_ams_slave_id_v11_encode(frame_decoded.ams_slave_id_v11); + return frame_encoded; +} + +inline can1_ams_slave5_log1_t ams_slave5_log1(const frame::decoded::can1::ams_slave5_log1_t frame_decoded) { + can1_ams_slave5_log1_t frame_encoded; + frame_encoded.ams_slave_id_v4 = can1_ams_slave5_log1_ams_slave_id_v4_encode(frame_decoded.ams_slave_id_v4); + frame_encoded.ams_slave_id_v5 = can1_ams_slave5_log1_ams_slave_id_v5_encode(frame_decoded.ams_slave_id_v5); + frame_encoded.ams_slave_id_v6 = can1_ams_slave5_log1_ams_slave_id_v6_encode(frame_decoded.ams_slave_id_v6); + frame_encoded.ams_slave_id_v7 = can1_ams_slave5_log1_ams_slave_id_v7_encode(frame_decoded.ams_slave_id_v7); + return frame_encoded; +} + +inline can1_ams_slave4_log1_t ams_slave4_log1(const frame::decoded::can1::ams_slave4_log1_t frame_decoded) { + can1_ams_slave4_log1_t frame_encoded; + frame_encoded.ams_slave_id_v4 = can1_ams_slave4_log1_ams_slave_id_v4_encode(frame_decoded.ams_slave_id_v4); + frame_encoded.ams_slave_id_v5 = can1_ams_slave4_log1_ams_slave_id_v5_encode(frame_decoded.ams_slave_id_v5); + frame_encoded.ams_slave_id_v6 = can1_ams_slave4_log1_ams_slave_id_v6_encode(frame_decoded.ams_slave_id_v6); + frame_encoded.ams_slave_id_v7 = can1_ams_slave4_log1_ams_slave_id_v7_encode(frame_decoded.ams_slave_id_v7); + return frame_encoded; +} + +inline can1_ams_slave3_log1_t ams_slave3_log1(const frame::decoded::can1::ams_slave3_log1_t frame_decoded) { + can1_ams_slave3_log1_t frame_encoded; + frame_encoded.ams_slave_id_v4 = can1_ams_slave3_log1_ams_slave_id_v4_encode(frame_decoded.ams_slave_id_v4); + frame_encoded.ams_slave_id_v5 = can1_ams_slave3_log1_ams_slave_id_v5_encode(frame_decoded.ams_slave_id_v5); + frame_encoded.ams_slave_id_v6 = can1_ams_slave3_log1_ams_slave_id_v6_encode(frame_decoded.ams_slave_id_v6); + frame_encoded.ams_slave_id_v7 = can1_ams_slave3_log1_ams_slave_id_v7_encode(frame_decoded.ams_slave_id_v7); + return frame_encoded; +} + +inline can1_ams_slave1_log1_t ams_slave1_log1(const frame::decoded::can1::ams_slave1_log1_t frame_decoded) { + can1_ams_slave1_log1_t frame_encoded; + frame_encoded.ams_slave_id_v4 = can1_ams_slave1_log1_ams_slave_id_v4_encode(frame_decoded.ams_slave_id_v4); + frame_encoded.ams_slave_id_v5 = can1_ams_slave1_log1_ams_slave_id_v5_encode(frame_decoded.ams_slave_id_v5); + frame_encoded.ams_slave_id_v6 = can1_ams_slave1_log1_ams_slave_id_v6_encode(frame_decoded.ams_slave_id_v6); + frame_encoded.ams_slave_id_v7 = can1_ams_slave1_log1_ams_slave_id_v7_encode(frame_decoded.ams_slave_id_v7); + return frame_encoded; +} + +inline can1_ams_slave5_log0_t ams_slave5_log0(const frame::decoded::can1::ams_slave5_log0_t frame_decoded) { + can1_ams_slave5_log0_t frame_encoded; + frame_encoded.ams_slave_id_v0 = can1_ams_slave5_log0_ams_slave_id_v0_encode(frame_decoded.ams_slave_id_v0); + frame_encoded.ams_slave_id_v1 = can1_ams_slave5_log0_ams_slave_id_v1_encode(frame_decoded.ams_slave_id_v1); + frame_encoded.ams_slave_id_v2 = can1_ams_slave5_log0_ams_slave_id_v2_encode(frame_decoded.ams_slave_id_v2); + frame_encoded.ams_slave_id_v3 = can1_ams_slave5_log0_ams_slave_id_v3_encode(frame_decoded.ams_slave_id_v3); + return frame_encoded; +} + +inline can1_ams_slave4_log0_t ams_slave4_log0(const frame::decoded::can1::ams_slave4_log0_t frame_decoded) { + can1_ams_slave4_log0_t frame_encoded; + frame_encoded.ams_slave_id_v0 = can1_ams_slave4_log0_ams_slave_id_v0_encode(frame_decoded.ams_slave_id_v0); + frame_encoded.ams_slave_id_v1 = can1_ams_slave4_log0_ams_slave_id_v1_encode(frame_decoded.ams_slave_id_v1); + frame_encoded.ams_slave_id_v2 = can1_ams_slave4_log0_ams_slave_id_v2_encode(frame_decoded.ams_slave_id_v2); + frame_encoded.ams_slave_id_v3 = can1_ams_slave4_log0_ams_slave_id_v3_encode(frame_decoded.ams_slave_id_v3); + return frame_encoded; +} + +inline can1_ams_slave3_log0_t ams_slave3_log0(const frame::decoded::can1::ams_slave3_log0_t frame_decoded) { + can1_ams_slave3_log0_t frame_encoded; + frame_encoded.ams_slave_id_v0 = can1_ams_slave3_log0_ams_slave_id_v0_encode(frame_decoded.ams_slave_id_v0); + frame_encoded.ams_slave_id_v1 = can1_ams_slave3_log0_ams_slave_id_v1_encode(frame_decoded.ams_slave_id_v1); + frame_encoded.ams_slave_id_v2 = can1_ams_slave3_log0_ams_slave_id_v2_encode(frame_decoded.ams_slave_id_v2); + frame_encoded.ams_slave_id_v3 = can1_ams_slave3_log0_ams_slave_id_v3_encode(frame_decoded.ams_slave_id_v3); + return frame_encoded; +} + +inline can1_ams_slave1_log0_t ams_slave1_log0(const frame::decoded::can1::ams_slave1_log0_t frame_decoded) { + can1_ams_slave1_log0_t frame_encoded; + frame_encoded.ams_slave_id_v0 = can1_ams_slave1_log0_ams_slave_id_v0_encode(frame_decoded.ams_slave_id_v0); + frame_encoded.ams_slave_id_v1 = can1_ams_slave1_log0_ams_slave_id_v1_encode(frame_decoded.ams_slave_id_v1); + frame_encoded.ams_slave_id_v2 = can1_ams_slave1_log0_ams_slave_id_v2_encode(frame_decoded.ams_slave_id_v2); + frame_encoded.ams_slave_id_v3 = can1_ams_slave1_log0_ams_slave_id_v3_encode(frame_decoded.ams_slave_id_v3); + return frame_encoded; +} + +inline can1_pdu_heartbeat_t pdu_heartbeat(const frame::decoded::can1::pdu_heartbeat_t frame_decoded) { + can1_pdu_heartbeat_t frame_encoded; + frame_encoded.pdu_heartbeat = can1_pdu_heartbeat_pdu_heartbeat_encode(frame_decoded.pdu_heartbeat); + return frame_encoded; +} + +inline can1_ftcu_pneumatik_t ftcu_pneumatik(const frame::decoded::can1::ftcu_pneumatik_t frame_decoded) { + can1_ftcu_pneumatik_t frame_encoded; + frame_encoded.ftcu_tank_pressure_1 = can1_ftcu_pneumatik_ftcu_tank_pressure_1_encode(frame_decoded.ftcu_tank_pressure_1); + frame_encoded.ftcu_tank_pressure_2 = can1_ftcu_pneumatik_ftcu_tank_pressure_2_encode(frame_decoded.ftcu_tank_pressure_2); + return frame_encoded; +} + +inline can1_acu_tx_commands_t acu_tx_commands(const frame::decoded::can1::acu_tx_commands_t frame_decoded) { + can1_acu_tx_commands_t frame_encoded; + frame_encoded.abx_speed_fl = can1_acu_tx_commands_abx_speed_fl_encode(frame_decoded.abx_speed_fl); + frame_encoded.abx_speed_fr = can1_acu_tx_commands_abx_speed_fr_encode(frame_decoded.abx_speed_fr); + frame_encoded.abx_speed_rl = can1_acu_tx_commands_abx_speed_rl_encode(frame_decoded.abx_speed_rl); + frame_encoded.abx_speed_rr = can1_acu_tx_commands_abx_speed_rr_encode(frame_decoded.abx_speed_rr); + frame_encoded.abx_steering_angle_left = can1_acu_tx_commands_abx_steering_angle_left_encode(frame_decoded.abx_steering_angle_left); + frame_encoded.abx_steering_angle_right = can1_acu_tx_commands_abx_steering_angle_right_encode(frame_decoded.abx_steering_angle_right); + return frame_encoded; +} + +inline can1_acu_rx_commands_t acu_rx_commands(const frame::decoded::can1::acu_rx_commands_t frame_decoded) { + can1_acu_rx_commands_t frame_encoded; + frame_encoded.acu_speed_target_left = can1_acu_rx_commands_acu_speed_target_left_encode(frame_decoded.acu_speed_target_left); + frame_encoded.acu_speed_target_right = can1_acu_rx_commands_acu_speed_target_right_encode(frame_decoded.acu_speed_target_right); + frame_encoded.acu_steering_angle_right = can1_acu_rx_commands_acu_steering_angle_right_encode(frame_decoded.acu_steering_angle_right); + frame_encoded.acu_steering_angle_left = can1_acu_rx_commands_acu_steering_angle_left_encode(frame_decoded.acu_steering_angle_left); + return frame_encoded; +} + +inline can1_acu_rx_t acu_rx(const frame::decoded::can1::acu_rx_t frame_decoded) { + can1_acu_rx_t frame_encoded; + frame_encoded.acu_as_mission_complete = can1_acu_rx_acu_as_mission_complete_encode(frame_decoded.acu_as_mission_complete); + frame_encoded.acu_as_ok = can1_acu_rx_acu_as_ok_encode(frame_decoded.acu_as_ok); + frame_encoded.acu_drs = can1_acu_rx_acu_drs_encode(frame_decoded.acu_drs); + frame_encoded.acu_lap_count = can1_acu_rx_acu_lap_count_encode(frame_decoded.acu_lap_count); + frame_encoded.acu_cones_all = can1_acu_rx_acu_cones_all_encode(frame_decoded.acu_cones_all); + frame_encoded.acu_cones_actual = can1_acu_rx_acu_cones_actual_encode(frame_decoded.acu_cones_actual); + return frame_encoded; +} + +inline can1_ams_slave0_log0_t ams_slave0_log0(const frame::decoded::can1::ams_slave0_log0_t frame_decoded) { + can1_ams_slave0_log0_t frame_encoded; + frame_encoded.ams_slave_id_v0 = can1_ams_slave0_log0_ams_slave_id_v0_encode(frame_decoded.ams_slave_id_v0); + frame_encoded.ams_slave_id_v1 = can1_ams_slave0_log0_ams_slave_id_v1_encode(frame_decoded.ams_slave_id_v1); + frame_encoded.ams_slave_id_v2 = can1_ams_slave0_log0_ams_slave_id_v2_encode(frame_decoded.ams_slave_id_v2); + frame_encoded.ams_slave_id_v3 = can1_ams_slave0_log0_ams_slave_id_v3_encode(frame_decoded.ams_slave_id_v3); + return frame_encoded; +} + +inline can1_ams_slave0_log1_t ams_slave0_log1(const frame::decoded::can1::ams_slave0_log1_t frame_decoded) { + can1_ams_slave0_log1_t frame_encoded; + frame_encoded.ams_slave_id_v4 = can1_ams_slave0_log1_ams_slave_id_v4_encode(frame_decoded.ams_slave_id_v4); + frame_encoded.ams_slave_id_v5 = can1_ams_slave0_log1_ams_slave_id_v5_encode(frame_decoded.ams_slave_id_v5); + frame_encoded.ams_slave_id_v6 = can1_ams_slave0_log1_ams_slave_id_v6_encode(frame_decoded.ams_slave_id_v6); + frame_encoded.ams_slave_id_v7 = can1_ams_slave0_log1_ams_slave_id_v7_encode(frame_decoded.ams_slave_id_v7); + return frame_encoded; +} + +inline can1_ams_slave0_log3_t ams_slave0_log3(const frame::decoded::can1::ams_slave0_log3_t frame_decoded) { + can1_ams_slave0_log3_t frame_encoded; + frame_encoded.ams_slave_id_v12 = can1_ams_slave0_log3_ams_slave_id_v12_encode(frame_decoded.ams_slave_id_v12); + frame_encoded.ams_slave_id_v13 = can1_ams_slave0_log3_ams_slave_id_v13_encode(frame_decoded.ams_slave_id_v13); + frame_encoded.ams_slave_id_v14 = can1_ams_slave0_log3_ams_slave_id_v14_encode(frame_decoded.ams_slave_id_v14); + frame_encoded.ams_slave_id_v15 = can1_ams_slave0_log3_ams_slave_id_v15_encode(frame_decoded.ams_slave_id_v15); + return frame_encoded; +} + +inline can1_ams_slave0_log4_t ams_slave0_log4(const frame::decoded::can1::ams_slave0_log4_t frame_decoded) { + can1_ams_slave0_log4_t frame_encoded; + frame_encoded.ams_slave_id_failed_sensors = can1_ams_slave0_log4_ams_slave_id_failed_sensors_encode(frame_decoded.ams_slave_id_failed_sensors); + return frame_encoded; +} + +inline can1_ams_slave0_log5_t ams_slave0_log5(const frame::decoded::can1::ams_slave0_log5_t frame_decoded) { + can1_ams_slave0_log5_t frame_encoded; + frame_encoded.ams_slave_id_t0 = can1_ams_slave0_log5_ams_slave_id_t0_encode(frame_decoded.ams_slave_id_t0); + frame_encoded.ams_slave_id_t1 = can1_ams_slave0_log5_ams_slave_id_t1_encode(frame_decoded.ams_slave_id_t1); + frame_encoded.ams_slave_id_t2 = can1_ams_slave0_log5_ams_slave_id_t2_encode(frame_decoded.ams_slave_id_t2); + frame_encoded.ams_slave_id_t3 = can1_ams_slave0_log5_ams_slave_id_t3_encode(frame_decoded.ams_slave_id_t3); + frame_encoded.ams_slave_id_t4 = can1_ams_slave0_log5_ams_slave_id_t4_encode(frame_decoded.ams_slave_id_t4); + frame_encoded.ams_slave_id_t5 = can1_ams_slave0_log5_ams_slave_id_t5_encode(frame_decoded.ams_slave_id_t5); + frame_encoded.ams_slave_id_t6 = can1_ams_slave0_log5_ams_slave_id_t6_encode(frame_decoded.ams_slave_id_t6); + frame_encoded.ams_slave_id_t7 = can1_ams_slave0_log5_ams_slave_id_t7_encode(frame_decoded.ams_slave_id_t7); + return frame_encoded; +} + +inline can1_ams_slave0_log6_t ams_slave0_log6(const frame::decoded::can1::ams_slave0_log6_t frame_decoded) { + can1_ams_slave0_log6_t frame_encoded; + frame_encoded.ams_slave_id_t8 = can1_ams_slave0_log6_ams_slave_id_t8_encode(frame_decoded.ams_slave_id_t8); + frame_encoded.ams_slave_id_t9 = can1_ams_slave0_log6_ams_slave_id_t9_encode(frame_decoded.ams_slave_id_t9); + return frame_encoded; +} + +inline can1_acu_tx_t acu_tx(const frame::decoded::can1::acu_tx_t frame_decoded) { + can1_acu_tx_t frame_encoded; + frame_encoded.acu_as_mission = can1_acu_tx_acu_as_mission_encode(frame_decoded.acu_as_mission); + frame_encoded.acu_as_state = can1_acu_tx_acu_as_state_encode(frame_decoded.acu_as_state); + frame_encoded.acu_power_off = can1_acu_tx_acu_power_off_encode(frame_decoded.acu_power_off); + frame_encoded.acu_reset = can1_acu_tx_acu_reset_encode(frame_decoded.acu_reset); + frame_encoded.acu_allow_torque = can1_acu_tx_acu_allow_torque_encode(frame_decoded.acu_allow_torque); + frame_encoded.abx_con_mon_error = can1_acu_tx_abx_con_mon_error_encode(frame_decoded.abx_con_mon_error); + return frame_encoded; +} + +inline can1_ams_slave5_status_t ams_slave5_status(const frame::decoded::can1::ams_slave5_status_t frame_decoded) { + can1_ams_slave5_status_t frame_encoded; + frame_encoded.ams_slave_status_error = can1_ams_slave5_status_ams_slave_status_error_encode(frame_decoded.ams_slave_status_error); + frame_encoded.ams_slave_status_id = can1_ams_slave5_status_ams_slave_status_id_encode(frame_decoded.ams_slave_status_id); + frame_encoded.ams_slave_status_temp_sensor = can1_ams_slave5_status_ams_slave_status_temp_sensor_encode(frame_decoded.ams_slave_status_temp_sensor); + frame_encoded.ams_slave_status_min_cell_volt = can1_ams_slave5_status_ams_slave_status_min_cell_volt_encode(frame_decoded.ams_slave_status_min_cell_volt); + frame_encoded.ams_slave_status_max_cell_volt = can1_ams_slave5_status_ams_slave_status_max_cell_volt_encode(frame_decoded.ams_slave_status_max_cell_volt); + frame_encoded.ams_slave_status_max_temp = can1_ams_slave5_status_ams_slave_status_max_temp_encode(frame_decoded.ams_slave_status_max_temp); + return frame_encoded; +} + +inline can1_ams_slave4_status_t ams_slave4_status(const frame::decoded::can1::ams_slave4_status_t frame_decoded) { + can1_ams_slave4_status_t frame_encoded; + frame_encoded.ams_slave_status_error = can1_ams_slave4_status_ams_slave_status_error_encode(frame_decoded.ams_slave_status_error); + frame_encoded.ams_slave_status_id = can1_ams_slave4_status_ams_slave_status_id_encode(frame_decoded.ams_slave_status_id); + frame_encoded.ams_slave_status_temp_sensor = can1_ams_slave4_status_ams_slave_status_temp_sensor_encode(frame_decoded.ams_slave_status_temp_sensor); + frame_encoded.ams_slave_status_min_cell_volt = can1_ams_slave4_status_ams_slave_status_min_cell_volt_encode(frame_decoded.ams_slave_status_min_cell_volt); + frame_encoded.ams_slave_status_max_cell_volt = can1_ams_slave4_status_ams_slave_status_max_cell_volt_encode(frame_decoded.ams_slave_status_max_cell_volt); + frame_encoded.ams_slave_status_max_temp = can1_ams_slave4_status_ams_slave_status_max_temp_encode(frame_decoded.ams_slave_status_max_temp); + return frame_encoded; +} + +inline can1_ams_slave3_status_t ams_slave3_status(const frame::decoded::can1::ams_slave3_status_t frame_decoded) { + can1_ams_slave3_status_t frame_encoded; + frame_encoded.ams_slave_status_error = can1_ams_slave3_status_ams_slave_status_error_encode(frame_decoded.ams_slave_status_error); + frame_encoded.ams_slave_status_id = can1_ams_slave3_status_ams_slave_status_id_encode(frame_decoded.ams_slave_status_id); + frame_encoded.ams_slave_status_temp_sensor = can1_ams_slave3_status_ams_slave_status_temp_sensor_encode(frame_decoded.ams_slave_status_temp_sensor); + frame_encoded.ams_slave_status_min_cell_volt = can1_ams_slave3_status_ams_slave_status_min_cell_volt_encode(frame_decoded.ams_slave_status_min_cell_volt); + frame_encoded.ams_slave_status_max_cell_volt = can1_ams_slave3_status_ams_slave_status_max_cell_volt_encode(frame_decoded.ams_slave_status_max_cell_volt); + frame_encoded.ams_slave_status_max_temp = can1_ams_slave3_status_ams_slave_status_max_temp_encode(frame_decoded.ams_slave_status_max_temp); + return frame_encoded; +} + +inline can1_ams_slave2_status_t ams_slave2_status(const frame::decoded::can1::ams_slave2_status_t frame_decoded) { + can1_ams_slave2_status_t frame_encoded; + frame_encoded.ams_slave_status_error = can1_ams_slave2_status_ams_slave_status_error_encode(frame_decoded.ams_slave_status_error); + frame_encoded.ams_slave_status_id = can1_ams_slave2_status_ams_slave_status_id_encode(frame_decoded.ams_slave_status_id); + frame_encoded.ams_slave_status_temp_sensor = can1_ams_slave2_status_ams_slave_status_temp_sensor_encode(frame_decoded.ams_slave_status_temp_sensor); + frame_encoded.ams_slave_status_min_cell_volt = can1_ams_slave2_status_ams_slave_status_min_cell_volt_encode(frame_decoded.ams_slave_status_min_cell_volt); + frame_encoded.ams_slave_status_max_cell_volt = can1_ams_slave2_status_ams_slave_status_max_cell_volt_encode(frame_decoded.ams_slave_status_max_cell_volt); + frame_encoded.ams_slave_status_max_temp = can1_ams_slave2_status_ams_slave_status_max_temp_encode(frame_decoded.ams_slave_status_max_temp); + return frame_encoded; +} + +inline can1_ams_error_t ams_error(const frame::decoded::can1::ams_error_t frame_decoded) { + can1_ams_error_t frame_encoded; + frame_encoded.ams_error_kind = can1_ams_error_ams_error_kind_encode(frame_decoded.ams_error_kind); + frame_encoded.ams_error_arg = can1_ams_error_ams_error_arg_encode(frame_decoded.ams_error_arg); + return frame_encoded; +} + +inline can1_ftcu_cooling_t ftcu_cooling(const frame::decoded::can1::ftcu_cooling_t frame_decoded) { + can1_ftcu_cooling_t frame_encoded; + frame_encoded.ftcu_water_pressure_2 = can1_ftcu_cooling_ftcu_water_pressure_2_encode(frame_decoded.ftcu_water_pressure_2); + frame_encoded.ftcu_water_pressure_1 = can1_ftcu_cooling_ftcu_water_pressure_1_encode(frame_decoded.ftcu_water_pressure_1); + frame_encoded.ftcu_water_temperature_1 = can1_ftcu_cooling_ftcu_water_temperature_1_encode(frame_decoded.ftcu_water_temperature_1); + frame_encoded.ftcu_water_temperature_2 = can1_ftcu_cooling_ftcu_water_temperature_2_encode(frame_decoded.ftcu_water_temperature_2); + frame_encoded.ftcu_flow_rate = can1_ftcu_cooling_ftcu_flow_rate_encode(frame_decoded.ftcu_flow_rate); + return frame_encoded; +} + +inline can1_ftcu_brake_t_t ftcu_brake_t(const frame::decoded::can1::ftcu_brake_t_t frame_decoded) { + can1_ftcu_brake_t_t frame_encoded; + frame_encoded.ftcu_brake_t_fl = can1_ftcu_brake_t_ftcu_brake_t_fl_encode(frame_decoded.ftcu_brake_t_fl); + frame_encoded.ftcu_brake_t_fr = can1_ftcu_brake_t_ftcu_brake_t_fr_encode(frame_decoded.ftcu_brake_t_fr); + frame_encoded.ftcu_brake_t_rl = can1_ftcu_brake_t_ftcu_brake_t_rl_encode(frame_decoded.ftcu_brake_t_rl); + frame_encoded.ftcu_brake_t_rr = can1_ftcu_brake_t_ftcu_brake_t_rr_encode(frame_decoded.ftcu_brake_t_rr); + return frame_encoded; +} + +inline can1_ftcu_wheelspeed_t ftcu_wheelspeed(const frame::decoded::can1::ftcu_wheelspeed_t frame_decoded) { + can1_ftcu_wheelspeed_t frame_encoded; + frame_encoded.ftcu_wheelspeed_fl = can1_ftcu_wheelspeed_ftcu_wheelspeed_fl_encode(frame_decoded.ftcu_wheelspeed_fl); + frame_encoded.ftcu_wheelspeed_fr = can1_ftcu_wheelspeed_ftcu_wheelspeed_fr_encode(frame_decoded.ftcu_wheelspeed_fr); + frame_encoded.ftcu_wheelspeed_rl = can1_ftcu_wheelspeed_ftcu_wheelspeed_rl_encode(frame_decoded.ftcu_wheelspeed_rl); + frame_encoded.ftcu_wheelspeed_rr = can1_ftcu_wheelspeed_ftcu_wheelspeed_rr_encode(frame_decoded.ftcu_wheelspeed_rr); + frame_encoded.ftcu_distance_session = can1_ftcu_wheelspeed_ftcu_distance_session_encode(frame_decoded.ftcu_distance_session); + return frame_encoded; +} + +inline can1_ftcu_timings_t ftcu_timings(const frame::decoded::can1::ftcu_timings_t frame_decoded) { + can1_ftcu_timings_t frame_encoded; + frame_encoded.ftcu_laptime_best = can1_ftcu_timings_ftcu_laptime_best_encode(frame_decoded.ftcu_laptime_best); + frame_encoded.ftcu_laptime_last = can1_ftcu_timings_ftcu_laptime_last_encode(frame_decoded.ftcu_laptime_last); + frame_encoded.ftcu_sectortime_best = can1_ftcu_timings_ftcu_sectortime_best_encode(frame_decoded.ftcu_sectortime_best); + frame_encoded.ftcu_sectortime_last = can1_ftcu_timings_ftcu_sectortime_last_encode(frame_decoded.ftcu_sectortime_last); + return frame_encoded; +} + +inline can1_ftcu_driver_t ftcu_driver(const frame::decoded::can1::ftcu_driver_t frame_decoded) { + can1_ftcu_driver_t frame_encoded; + frame_encoded.ftcu_apps_percent = can1_ftcu_driver_ftcu_apps_percent_encode(frame_decoded.ftcu_apps_percent); + frame_encoded.ftcu_brake_pressure_f = can1_ftcu_driver_ftcu_brake_pressure_f_encode(frame_decoded.ftcu_brake_pressure_f); + frame_encoded.ftcu_brake_pressure_r = can1_ftcu_driver_ftcu_brake_pressure_r_encode(frame_decoded.ftcu_brake_pressure_r); + frame_encoded.ftcu_steering_angle = can1_ftcu_driver_ftcu_steering_angle_encode(frame_decoded.ftcu_steering_angle); + frame_encoded.ftcu_speed = can1_ftcu_driver_ftcu_speed_encode(frame_decoded.ftcu_speed); + frame_encoded.ftcu_lapcounter = can1_ftcu_driver_ftcu_lapcounter_encode(frame_decoded.ftcu_lapcounter); + frame_encoded.ftcu_sectorcounter = can1_ftcu_driver_ftcu_sectorcounter_encode(frame_decoded.ftcu_sectorcounter); + return frame_encoded; +} + +inline can1_tts_rr_t tts_rr(const frame::decoded::can1::tts_rr_t frame_decoded) { + can1_tts_rr_t frame_encoded; + frame_encoded.tts_outer_left = can1_tts_rr_tts_outer_left_encode(frame_decoded.tts_outer_left); + frame_encoded.tts_center_left = can1_tts_rr_tts_center_left_encode(frame_decoded.tts_center_left); + frame_encoded.tts_center = can1_tts_rr_tts_center_encode(frame_decoded.tts_center); + frame_encoded.tts_center_right = can1_tts_rr_tts_center_right_encode(frame_decoded.tts_center_right); + frame_encoded.tts_outet_right = can1_tts_rr_tts_outet_right_encode(frame_decoded.tts_outet_right); + frame_encoded.tts_status = can1_tts_rr_tts_status_encode(frame_decoded.tts_status); + return frame_encoded; +} + +inline can1_tts_rl_t tts_rl(const frame::decoded::can1::tts_rl_t frame_decoded) { + can1_tts_rl_t frame_encoded; + frame_encoded.tts_outer_left = can1_tts_rl_tts_outer_left_encode(frame_decoded.tts_outer_left); + frame_encoded.tts_center_left = can1_tts_rl_tts_center_left_encode(frame_decoded.tts_center_left); + frame_encoded.tts_center = can1_tts_rl_tts_center_encode(frame_decoded.tts_center); + frame_encoded.tts_center_right = can1_tts_rl_tts_center_right_encode(frame_decoded.tts_center_right); + frame_encoded.tts_outer_right = can1_tts_rl_tts_outer_right_encode(frame_decoded.tts_outer_right); + frame_encoded.tts_status = can1_tts_rl_tts_status_encode(frame_decoded.tts_status); + return frame_encoded; +} + +inline can1_tts_fr_t tts_fr(const frame::decoded::can1::tts_fr_t frame_decoded) { + can1_tts_fr_t frame_encoded; + frame_encoded.tts_outer_left = can1_tts_fr_tts_outer_left_encode(frame_decoded.tts_outer_left); + frame_encoded.tts_center_left = can1_tts_fr_tts_center_left_encode(frame_decoded.tts_center_left); + frame_encoded.tts_center = can1_tts_fr_tts_center_encode(frame_decoded.tts_center); + frame_encoded.tts_center_right = can1_tts_fr_tts_center_right_encode(frame_decoded.tts_center_right); + frame_encoded.tts_outer_right = can1_tts_fr_tts_outer_right_encode(frame_decoded.tts_outer_right); + frame_encoded.tts_status = can1_tts_fr_tts_status_encode(frame_decoded.tts_status); + return frame_encoded; +} + +inline can1_tts_fl_t tts_fl(const frame::decoded::can1::tts_fl_t frame_decoded) { + can1_tts_fl_t frame_encoded; + frame_encoded.tts_outer_left = can1_tts_fl_tts_outer_left_encode(frame_decoded.tts_outer_left); + frame_encoded.tts_center_left = can1_tts_fl_tts_center_left_encode(frame_decoded.tts_center_left); + frame_encoded.tts_center = can1_tts_fl_tts_center_encode(frame_decoded.tts_center); + frame_encoded.tts_center_right = can1_tts_fl_tts_center_right_encode(frame_decoded.tts_center_right); + frame_encoded.tts_outer_right = can1_tts_fl_tts_outer_right_encode(frame_decoded.tts_outer_right); + frame_encoded.tts_status = can1_tts_fl_tts_status_encode(frame_decoded.tts_status); + return frame_encoded; +} + +inline can1_stw_param_set_t stw_param_set(const frame::decoded::can1::stw_param_set_t frame_decoded) { + can1_stw_param_set_t frame_encoded; + frame_encoded.stw_param_set = can1_stw_param_set_stw_param_set_encode(frame_decoded.stw_param_set); + frame_encoded.stw_param_tc_slipref = can1_stw_param_set_stw_param_tc_slipref_encode(frame_decoded.stw_param_tc_slipref); + frame_encoded.stw_param_tc_mumax = can1_stw_param_set_stw_param_tc_mumax_encode(frame_decoded.stw_param_tc_mumax); + frame_encoded.stw_param_tc_i = can1_stw_param_set_stw_param_tc_i_encode(frame_decoded.stw_param_tc_i); + frame_encoded.stw_param_plim = can1_stw_param_set_stw_param_plim_encode(frame_decoded.stw_param_plim); + frame_encoded.stw_param_tlim = can1_stw_param_set_stw_param_tlim_encode(frame_decoded.stw_param_tlim); + frame_encoded.stw_param_tc_p = can1_stw_param_set_stw_param_tc_p_encode(frame_decoded.stw_param_tc_p); + frame_encoded.stw_param_reku = can1_stw_param_set_stw_param_reku_encode(frame_decoded.stw_param_reku); + frame_encoded.stw_param_tc_on = can1_stw_param_set_stw_param_tc_on_encode(frame_decoded.stw_param_tc_on); + frame_encoded.stw_param_tv_on = can1_stw_param_set_stw_param_tv_on_encode(frame_decoded.stw_param_tv_on); + frame_encoded.stw_param_discipline = can1_stw_param_set_stw_param_discipline_encode(frame_decoded.stw_param_discipline); + frame_encoded.stw_param_slim = can1_stw_param_set_stw_param_slim_encode(frame_decoded.stw_param_slim); + return frame_encoded; +} + +inline can1_ams_slave0_status_t ams_slave0_status(const frame::decoded::can1::ams_slave0_status_t frame_decoded) { + can1_ams_slave0_status_t frame_encoded; + frame_encoded.ams_slave_status_error = can1_ams_slave0_status_ams_slave_status_error_encode(frame_decoded.ams_slave_status_error); + frame_encoded.ams_slave_status_id = can1_ams_slave0_status_ams_slave_status_id_encode(frame_decoded.ams_slave_status_id); + frame_encoded.ams_slave_status_temp_sensor = can1_ams_slave0_status_ams_slave_status_temp_sensor_encode(frame_decoded.ams_slave_status_temp_sensor); + frame_encoded.ams_slave_status_min_cell_volt = can1_ams_slave0_status_ams_slave_status_min_cell_volt_encode(frame_decoded.ams_slave_status_min_cell_volt); + frame_encoded.ams_slave_status_max_cell_volt = can1_ams_slave0_status_ams_slave_status_max_cell_volt_encode(frame_decoded.ams_slave_status_max_cell_volt); + frame_encoded.ams_slave_status_max_temp = can1_ams_slave0_status_ams_slave_status_max_temp_encode(frame_decoded.ams_slave_status_max_temp); + return frame_encoded; +} + +inline can1_ssu_message_t ssu_message(const frame::decoded::can1::ssu_message_t frame_decoded) { + can1_ssu_message_t frame_encoded; + frame_encoded.ssu_pressure = can1_ssu_message_ssu_pressure_encode(frame_decoded.ssu_pressure); + frame_encoded.ssu_air_temp = can1_ssu_message_ssu_air_temp_encode(frame_decoded.ssu_air_temp); + return frame_encoded; +} + +inline can1_ams_status_t ams_status(const frame::decoded::can1::ams_status_t frame_decoded) { + can1_ams_status_t frame_encoded; + frame_encoded.ams_state = can1_ams_status_ams_state_encode(frame_decoded.ams_state); + frame_encoded.sdc_closed = can1_ams_status_sdc_closed_encode(frame_decoded.sdc_closed); + frame_encoded.soc = can1_ams_status_soc_encode(frame_decoded.soc); + frame_encoded.min_cell_volt = can1_ams_status_min_cell_volt_encode(frame_decoded.min_cell_volt); + frame_encoded.max_cell_temp = can1_ams_status_max_cell_temp_encode(frame_decoded.max_cell_temp); + frame_encoded.ams_imd_state = can1_ams_status_ams_imd_state_encode(frame_decoded.ams_imd_state); + frame_encoded.ams_imd_ok = can1_ams_status_ams_imd_ok_encode(frame_decoded.ams_imd_ok); + return frame_encoded; +} + +inline can1_ams_slave_panic_t ams_slave_panic(const frame::decoded::can1::ams_slave_panic_t frame_decoded) { + can1_ams_slave_panic_t frame_encoded; + frame_encoded.ams_slave_panic_slave_id = can1_ams_slave_panic_ams_slave_panic_slave_id_encode(frame_decoded.ams_slave_panic_slave_id); + frame_encoded.ams_slave_panic_kind = can1_ams_slave_panic_ams_slave_panic_kind_encode(frame_decoded.ams_slave_panic_kind); + frame_encoded.ams_slave_panic_arg = can1_ams_slave_panic_ams_slave_panic_arg_encode(frame_decoded.ams_slave_panic_arg); + return frame_encoded; +} + +inline can1_ams_in_t ams_in(const frame::decoded::can1::ams_in_t frame_decoded) { + can1_ams_in_t frame_encoded; + frame_encoded.ts_activate = can1_ams_in_ts_activate_encode(frame_decoded.ts_activate); + frame_encoded.inverters_discharged = can1_ams_in_inverters_discharged_encode(frame_decoded.inverters_discharged); + frame_encoded.lap_number = can1_ams_in_lap_number_encode(frame_decoded.lap_number); + return frame_encoded; +} + +inline can1_shunt_current_t shunt_current(const frame::decoded::can1::shunt_current_t frame_decoded) { + can1_shunt_current_t frame_encoded; + frame_encoded.shunt_current = can1_shunt_current_shunt_current_encode(frame_decoded.shunt_current); + return frame_encoded; +} + +inline can1_shunt_voltage1_t shunt_voltage1(const frame::decoded::can1::shunt_voltage1_t frame_decoded) { + can1_shunt_voltage1_t frame_encoded; + frame_encoded.shunt_voltage1 = can1_shunt_voltage1_shunt_voltage1_encode(frame_decoded.shunt_voltage1); + return frame_encoded; +} + +inline can1_shunt_voltage2_t shunt_voltage2(const frame::decoded::can1::shunt_voltage2_t frame_decoded) { + can1_shunt_voltage2_t frame_encoded; + frame_encoded.shunt_voltage2 = can1_shunt_voltage2_shunt_voltage2_encode(frame_decoded.shunt_voltage2); + return frame_encoded; +} + +inline can1_shunt_voltage3_t shunt_voltage3(const frame::decoded::can1::shunt_voltage3_t frame_decoded) { + can1_shunt_voltage3_t frame_encoded; + frame_encoded.shunt_voltage3 = can1_shunt_voltage3_shunt_voltage3_encode(frame_decoded.shunt_voltage3); + return frame_encoded; +} + +inline can1_shunt_temperature_t shunt_temperature(const frame::decoded::can1::shunt_temperature_t frame_decoded) { + can1_shunt_temperature_t frame_encoded; + frame_encoded.shunt_temperature = can1_shunt_temperature_shunt_temperature_encode(frame_decoded.shunt_temperature); + return frame_encoded; +} + +inline can1_pdu_command_t pdu_command(const frame::decoded::can1::pdu_command_t frame_decoded) { + can1_pdu_command_t frame_encoded; + frame_encoded.pdu_enable_misc = can1_pdu_command_pdu_enable_misc_encode(frame_decoded.pdu_enable_misc); + frame_encoded.pdu_enable_sdc = can1_pdu_command_pdu_enable_sdc_encode(frame_decoded.pdu_enable_sdc); + frame_encoded.pdu_enable_inverter = can1_pdu_command_pdu_enable_inverter_encode(frame_decoded.pdu_enable_inverter); + frame_encoded.pdu_enable_ts_cooling = can1_pdu_command_pdu_enable_ts_cooling_encode(frame_decoded.pdu_enable_ts_cooling); + frame_encoded.pdu_enable_acc_cooling = can1_pdu_command_pdu_enable_acc_cooling_encode(frame_decoded.pdu_enable_acc_cooling); + frame_encoded.pdu_enable_lldar = can1_pdu_command_pdu_enable_lldar_encode(frame_decoded.pdu_enable_lldar); + frame_encoded.pdu_enable_drs = can1_pdu_command_pdu_enable_drs_encode(frame_decoded.pdu_enable_drs); + frame_encoded.pdu_enable_epsc = can1_pdu_command_pdu_enable_epsc_encode(frame_decoded.pdu_enable_epsc); + frame_encoded.pdu_enable_acu = can1_pdu_command_pdu_enable_acu_encode(frame_decoded.pdu_enable_acu); + frame_encoded.pdu_enable_ebs_a = can1_pdu_command_pdu_enable_ebs_a_encode(frame_decoded.pdu_enable_ebs_a); + frame_encoded.pdu_enable_ebs_b = can1_pdu_command_pdu_enable_ebs_b_encode(frame_decoded.pdu_enable_ebs_b); + frame_encoded.pdu_enable_ebs_c = can1_pdu_command_pdu_enable_ebs_c_encode(frame_decoded.pdu_enable_ebs_c); + return frame_encoded; +} + +inline can1_pdu_response_t pdu_response(const frame::decoded::can1::pdu_response_t frame_decoded) { + can1_pdu_response_t frame_encoded; + frame_encoded.pdu_alwayson_tx = can1_pdu_response_pdu_alwayson_tx_encode(frame_decoded.pdu_alwayson_tx); + frame_encoded.pdu_shutdown_circuit_tx = can1_pdu_response_pdu_shutdown_circuit_tx_encode(frame_decoded.pdu_shutdown_circuit_tx); + frame_encoded.pdu_lidar_tx = can1_pdu_response_pdu_lidar_tx_encode(frame_decoded.pdu_lidar_tx); + frame_encoded.pdu_acu_tx = can1_pdu_response_pdu_acu_tx_encode(frame_decoded.pdu_acu_tx); + frame_encoded.pdu_servos_regler_tx = can1_pdu_response_pdu_servos_regler_tx_encode(frame_decoded.pdu_servos_regler_tx); + frame_encoded.pdu_inverter_tx = can1_pdu_response_pdu_inverter_tx_encode(frame_decoded.pdu_inverter_tx); + frame_encoded.pdu_misc_tx = can1_pdu_response_pdu_misc_tx_encode(frame_decoded.pdu_misc_tx); + frame_encoded.pdu_servo_tx = can1_pdu_response_pdu_servo_tx_encode(frame_decoded.pdu_servo_tx); + frame_encoded.pdu_ebs_valve_1_tx = can1_pdu_response_pdu_ebs_valve_1_tx_encode(frame_decoded.pdu_ebs_valve_1_tx); + frame_encoded.pdu_ebs_valve_2_tx = can1_pdu_response_pdu_ebs_valve_2_tx_encode(frame_decoded.pdu_ebs_valve_2_tx); + frame_encoded.pdu_cs_valve_tx = can1_pdu_response_pdu_cs_valve_tx_encode(frame_decoded.pdu_cs_valve_tx); + frame_encoded.pdu_aggregat_tx = can1_pdu_response_pdu_aggregat_tx_encode(frame_decoded.pdu_aggregat_tx); + frame_encoded.pdu_steering_tx = can1_pdu_response_pdu_steering_tx_encode(frame_decoded.pdu_steering_tx); + frame_encoded.pdu_pwm_tsac_fans = can1_pdu_response_pdu_pwm_tsac_fans_encode(frame_decoded.pdu_pwm_tsac_fans); + frame_encoded.pdu_pwm_radiatot_fans_tx = can1_pdu_response_pdu_pwm_radiatot_fans_tx_encode(frame_decoded.pdu_pwm_radiatot_fans_tx); + frame_encoded.pdu_pwm_aggregat = can1_pdu_response_pdu_pwm_aggregat_encode(frame_decoded.pdu_pwm_aggregat); + frame_encoded.pdu_pwm_pump = can1_pdu_response_pdu_pwm_pump_encode(frame_decoded.pdu_pwm_pump); + frame_encoded.pdu_heartbeat_ok_tx = can1_pdu_response_pdu_heartbeat_ok_tx_encode(frame_decoded.pdu_heartbeat_ok_tx); + return frame_encoded; +} + +inline can1_as_mission_fb_t as_mission_fb(const frame::decoded::can1::as_mission_fb_t frame_decoded) { + can1_as_mission_fb_t frame_encoded; + frame_encoded.mission_selection = can1_as_mission_fb_mission_selection_encode(frame_decoded.mission_selection); + return frame_encoded; +} + +inline can1_stw_mission_selected_t stw_mission_selected(const frame::decoded::can1::stw_mission_selected_t frame_decoded) { + can1_stw_mission_selected_t frame_encoded; + frame_encoded.mission_selection = can1_stw_mission_selected_mission_selection_encode(frame_decoded.mission_selection); + return frame_encoded; +} + +inline can1_epsc_out_t epsc_out(const frame::decoded::can1::epsc_out_t frame_decoded) { + can1_epsc_out_t frame_encoded; + frame_encoded.epsc_measured_rpm = can1_epsc_out_epsc_measured_rpm_encode(frame_decoded.epsc_measured_rpm); + frame_encoded.epsc_measured_steering_angle = can1_epsc_out_epsc_measured_steering_angle_encode(frame_decoded.epsc_measured_steering_angle); + frame_encoded.epsc_measured_mosfet_temperature = can1_epsc_out_epsc_measured_mosfet_temperature_encode(frame_decoded.epsc_measured_mosfet_temperature); + frame_encoded.epsc_measured_voltage = can1_epsc_out_epsc_measured_voltage_encode(frame_decoded.epsc_measured_voltage); + frame_encoded.epsc_measured_current = can1_epsc_out_epsc_measured_current_encode(frame_decoded.epsc_measured_current); + return frame_encoded; +} + +inline can1_epsc_steering_in_t epsc_steering_in(const frame::decoded::can1::epsc_steering_in_t frame_decoded) { + can1_epsc_steering_in_t frame_encoded; + frame_encoded.epsc_desired_steering_angle = can1_epsc_steering_in_epsc_desired_steering_angle_encode(frame_decoded.epsc_desired_steering_angle); + return frame_encoded; +} + +inline can1_stw_buttons_t stw_buttons(const frame::decoded::can1::stw_buttons_t frame_decoded) { + can1_stw_buttons_t frame_encoded; + frame_encoded.stw_button_drs = can1_stw_buttons_stw_button_drs_encode(frame_decoded.stw_button_drs); + frame_encoded.stw_button_1 = can1_stw_buttons_stw_button_1_encode(frame_decoded.stw_button_1); + frame_encoded.stw_button_2 = can1_stw_buttons_stw_button_2_encode(frame_decoded.stw_button_2); + frame_encoded.stw_button_3 = can1_stw_buttons_stw_button_3_encode(frame_decoded.stw_button_3); + frame_encoded.stw_button_4 = can1_stw_buttons_stw_button_4_encode(frame_decoded.stw_button_4); + return frame_encoded; +} + +inline can1_stw_status_t stw_status(const frame::decoded::can1::stw_status_t frame_decoded) { + can1_stw_status_t frame_encoded; + frame_encoded.lap_count = can1_stw_status_lap_count_encode(frame_decoded.lap_count); + frame_encoded.err_pdu = can1_stw_status_err_pdu_encode(frame_decoded.err_pdu); + frame_encoded.err_res = can1_stw_status_err_res_encode(frame_decoded.err_res); + frame_encoded.r2_d_progress = can1_stw_status_r2_d_progress_encode(frame_decoded.r2_d_progress); + frame_encoded.as_state_stw = can1_stw_status_as_state_stw_encode(frame_decoded.as_state_stw); + frame_encoded.err_as = can1_stw_status_err_as_encode(frame_decoded.err_as); + frame_encoded.err_app_sp = can1_stw_status_err_app_sp_encode(frame_decoded.err_app_sp); + frame_encoded.err_s_bspd = can1_stw_status_err_s_bspd_encode(frame_decoded.err_s_bspd); + frame_encoded.err_scs = can1_stw_status_err_scs_encode(frame_decoded.err_scs); + frame_encoded.err_con_mon = can1_stw_status_err_con_mon_encode(frame_decoded.err_con_mon); + frame_encoded.err_ini_chk = can1_stw_status_err_ini_chk_encode(frame_decoded.err_ini_chk); + frame_encoded.err_inv2 = can1_stw_status_err_inv2_encode(frame_decoded.err_inv2); + frame_encoded.err_inv1 = can1_stw_status_err_inv1_encode(frame_decoded.err_inv1); + frame_encoded.err_ams = can1_stw_status_err_ams_encode(frame_decoded.err_ams); + frame_encoded.err_sdc = can1_stw_status_err_sdc_encode(frame_decoded.err_sdc); + frame_encoded.sdc_status = can1_stw_status_sdc_status_encode(frame_decoded.sdc_status); + frame_encoded.inv2_ready = can1_stw_status_inv2_ready_encode(frame_decoded.inv2_ready); + frame_encoded.inv1_ready = can1_stw_status_inv1_ready_encode(frame_decoded.inv1_ready); + frame_encoded.energy_per_lap = can1_stw_status_energy_per_lap_encode(frame_decoded.energy_per_lap); + frame_encoded.ini_chk_state = can1_stw_status_ini_chk_state_encode(frame_decoded.ini_chk_state); + return frame_encoded; +} + +inline can1_pdu_current_1_t pdu_current_1(const frame::decoded::can1::pdu_current_1_t frame_decoded) { + can1_pdu_current_1_t frame_encoded; + frame_encoded.pdu_always_on_current = can1_pdu_current_1_pdu_always_on_current_encode(frame_decoded.pdu_always_on_current); + frame_encoded.pdu_lvms_current = can1_pdu_current_1_pdu_lvms_current_encode(frame_decoded.pdu_lvms_current); + frame_encoded.pdu_asms_current = can1_pdu_current_1_pdu_asms_current_encode(frame_decoded.pdu_asms_current); + frame_encoded.pdu_misc_current = can1_pdu_current_1_pdu_misc_current_encode(frame_decoded.pdu_misc_current); + return frame_encoded; +} + +inline can1_pdu_current_2_t pdu_current_2(const frame::decoded::can1::pdu_current_2_t frame_decoded) { + can1_pdu_current_2_t frame_encoded; + frame_encoded.pdu_sdc_current = can1_pdu_current_2_pdu_sdc_current_encode(frame_decoded.pdu_sdc_current); + frame_encoded.pdu_inverter_current = can1_pdu_current_2_pdu_inverter_current_encode(frame_decoded.pdu_inverter_current); + frame_encoded.pdu_ts_cooling_current = can1_pdu_current_2_pdu_ts_cooling_current_encode(frame_decoded.pdu_ts_cooling_current); + frame_encoded.pdu_acc_cooling_current = can1_pdu_current_2_pdu_acc_cooling_current_encode(frame_decoded.pdu_acc_cooling_current); + return frame_encoded; +} + +inline can1_pdu_current_3_t pdu_current_3(const frame::decoded::can1::pdu_current_3_t frame_decoded) { + can1_pdu_current_3_t frame_encoded; + frame_encoded.pdu_lidar_current = can1_pdu_current_3_pdu_lidar_current_encode(frame_decoded.pdu_lidar_current); + frame_encoded.pdu_drs_current = can1_pdu_current_3_pdu_drs_current_encode(frame_decoded.pdu_drs_current); + frame_encoded.pdu_epsc_current = can1_pdu_current_3_pdu_epsc_current_encode(frame_decoded.pdu_epsc_current); + frame_encoded.pdu_acu_current = can1_pdu_current_3_pdu_acu_current_encode(frame_decoded.pdu_acu_current); + return frame_encoded; +} + +inline can1_pdu_current_4_t pdu_current_4(const frame::decoded::can1::pdu_current_4_t frame_decoded) { + can1_pdu_current_4_t frame_encoded; + frame_encoded.pdu_ebs_a_current = can1_pdu_current_4_pdu_ebs_a_current_encode(frame_decoded.pdu_ebs_a_current); + frame_encoded.pdu_ebs_b_current = can1_pdu_current_4_pdu_ebs_b_current_encode(frame_decoded.pdu_ebs_b_current); + return frame_encoded; +} + +inline can1_epsc_config_in_t epsc_config_in(const frame::decoded::can1::epsc_config_in_t frame_decoded) { + can1_epsc_config_in_t frame_encoded; + frame_encoded.epsc_config_p_gain = can1_epsc_config_in_epsc_config_p_gain_encode(frame_decoded.epsc_config_p_gain); + frame_encoded.epsc_config_i_gain = can1_epsc_config_in_epsc_config_i_gain_encode(frame_decoded.epsc_config_i_gain); + frame_encoded.epsc_config_d_gain = can1_epsc_config_in_epsc_config_d_gain_encode(frame_decoded.epsc_config_d_gain); + return frame_encoded; +} + +} +} + +// decode functions +namespace decode { +namespace can1 { +inline frame::decoded::can1::inverter_velocity_t inverter_velocity(const can1_inverter_velocity_t frame_encoded) { + frame::decoded::can1::inverter_velocity_t frame_decoded; + frame_decoded.inverter_1_velocity = can1_inverter_velocity_inverter_1_velocity_decode(frame_encoded.inverter_1_velocity); + frame_decoded.inverter_2_velocity = can1_inverter_velocity_inverter_2_velocity_decode(frame_encoded.inverter_2_velocity); + return frame_decoded; +} + +inline frame::decoded::can1::inverter_errors_warnings_t inverter_errors_warnings(const can1_inverter_errors_warnings_t frame_encoded) { + frame::decoded::can1::inverter_errors_warnings_t frame_decoded; + frame_decoded.inverter_1_errors = can1_inverter_errors_warnings_inverter_1_errors_decode(frame_encoded.inverter_1_errors); + frame_decoded.inverter_1_warnings = can1_inverter_errors_warnings_inverter_1_warnings_decode(frame_encoded.inverter_1_warnings); + frame_decoded.inverter_2_errors = can1_inverter_errors_warnings_inverter_2_errors_decode(frame_encoded.inverter_2_errors); + frame_decoded.inverter_2_warnings = can1_inverter_errors_warnings_inverter_2_warnings_decode(frame_encoded.inverter_2_warnings); + return frame_decoded; +} + +inline frame::decoded::can1::inverter_torque_actual_cw_t inverter_torque_actual_cw(const can1_inverter_torque_actual_cw_t frame_encoded) { + frame::decoded::can1::inverter_torque_actual_cw_t frame_decoded; + frame_decoded.inverter_1_control_word = can1_inverter_torque_actual_cw_inverter_1_control_word_decode(frame_encoded.inverter_1_control_word); + frame_decoded.inverter_1_torque_actual = can1_inverter_torque_actual_cw_inverter_1_torque_actual_decode(frame_encoded.inverter_1_torque_actual); + frame_decoded.inverter_2_control_word = can1_inverter_torque_actual_cw_inverter_2_control_word_decode(frame_encoded.inverter_2_control_word); + frame_decoded.inverter_2_torque_actual = can1_inverter_torque_actual_cw_inverter_2_torque_actual_decode(frame_encoded.inverter_2_torque_actual); + return frame_decoded; +} + +inline frame::decoded::can1::inverter_temperatur_t inverter_temperatur(const can1_inverter_temperatur_t frame_encoded) { + frame::decoded::can1::inverter_temperatur_t frame_decoded; + frame_decoded.inverter_1_temp_inv = can1_inverter_temperatur_inverter_1_temp_inv_decode(frame_encoded.inverter_1_temp_inv); + frame_decoded.inverter_1_temp_mot = can1_inverter_temperatur_inverter_1_temp_mot_decode(frame_encoded.inverter_1_temp_mot); + frame_decoded.inverter_2_temp_inv = can1_inverter_temperatur_inverter_2_temp_inv_decode(frame_encoded.inverter_2_temp_inv); + frame_decoded.inverter_2_temp_mot = can1_inverter_temperatur_inverter_2_temp_mot_decode(frame_encoded.inverter_2_temp_mot); + return frame_decoded; +} + +inline frame::decoded::can1::inverter_torque_wanted_t inverter_torque_wanted(const can1_inverter_torque_wanted_t frame_encoded) { + frame::decoded::can1::inverter_torque_wanted_t frame_decoded; + frame_decoded.inverter_1_torque_demanded = can1_inverter_torque_wanted_inverter_1_torque_demanded_decode(frame_encoded.inverter_1_torque_demanded); + frame_decoded.inverter_2_torque_demanded = can1_inverter_torque_wanted_inverter_2_torque_demanded_decode(frame_encoded.inverter_2_torque_demanded); + frame_decoded.inverter_1_torque_desired = can1_inverter_torque_wanted_inverter_1_torque_desired_decode(frame_encoded.inverter_1_torque_desired); + frame_decoded.inverter_2_torque_desired = can1_inverter_torque_wanted_inverter_2_torque_desired_decode(frame_encoded.inverter_2_torque_desired); + return frame_decoded; +} + +inline frame::decoded::can1::sdo_telemetrie_rx_node1_t sdo_telemetrie_rx_node1(const can1_sdo_telemetrie_rx_node1_t frame_encoded) { + frame::decoded::can1::sdo_telemetrie_rx_node1_t frame_decoded; + frame_decoded.sdo_command_byte = can1_sdo_telemetrie_rx_node1_sdo_command_byte_decode(frame_encoded.sdo_command_byte); + frame_decoded.sdo_od_index = can1_sdo_telemetrie_rx_node1_sdo_od_index_decode(frame_encoded.sdo_od_index); + frame_decoded.sdo_od_subindex = can1_sdo_telemetrie_rx_node1_sdo_od_subindex_decode(frame_encoded.sdo_od_subindex); + frame_decoded.sdo_data = can1_sdo_telemetrie_rx_node1_sdo_data_decode(frame_encoded.sdo_data); + return frame_decoded; +} + +inline frame::decoded::can1::sdo_telemetrie_rx_node2_t sdo_telemetrie_rx_node2(const can1_sdo_telemetrie_rx_node2_t frame_encoded) { + frame::decoded::can1::sdo_telemetrie_rx_node2_t frame_decoded; + frame_decoded.sdo_command_byte = can1_sdo_telemetrie_rx_node2_sdo_command_byte_decode(frame_encoded.sdo_command_byte); + frame_decoded.sdo_od_index = can1_sdo_telemetrie_rx_node2_sdo_od_index_decode(frame_encoded.sdo_od_index); + frame_decoded.sdo_od_subindex = can1_sdo_telemetrie_rx_node2_sdo_od_subindex_decode(frame_encoded.sdo_od_subindex); + frame_decoded.sdo_data = can1_sdo_telemetrie_rx_node2_sdo_data_decode(frame_encoded.sdo_data); + return frame_decoded; +} + +inline frame::decoded::can1::sdo_telemetrie_tx_t sdo_telemetrie_tx(const can1_sdo_telemetrie_tx_t frame_encoded) { + frame::decoded::can1::sdo_telemetrie_tx_t frame_decoded; + frame_decoded.sdo_command_byte = can1_sdo_telemetrie_tx_sdo_command_byte_decode(frame_encoded.sdo_command_byte); + frame_decoded.sdo_od_index = can1_sdo_telemetrie_tx_sdo_od_index_decode(frame_encoded.sdo_od_index); + frame_decoded.sdo_od_subindex = can1_sdo_telemetrie_tx_sdo_od_subindex_decode(frame_encoded.sdo_od_subindex); + frame_decoded.sdo_data = can1_sdo_telemetrie_tx_sdo_data_decode(frame_encoded.sdo_data); + return frame_decoded; +} + +inline frame::decoded::can1::laptop_sdo_node_t laptop_sdo_node(const can1_laptop_sdo_node_t frame_encoded) { + frame::decoded::can1::laptop_sdo_node_t frame_decoded; + frame_decoded.node_id_sdo = can1_laptop_sdo_node_node_id_sdo_decode(frame_encoded.node_id_sdo); + return frame_decoded; +} + +inline frame::decoded::can1::x_sens_long_lat_t x_sens_long_lat(const can1_x_sens_long_lat_t frame_encoded) { + frame::decoded::can1::x_sens_long_lat_t frame_decoded; + frame_decoded.x_sens_latitude = can1_x_sens_long_lat_x_sens_latitude_decode(frame_encoded.x_sens_latitude); + frame_decoded.x_sens_longitude = can1_x_sens_long_lat_x_sens_longitude_decode(frame_encoded.x_sens_longitude); + return frame_decoded; +} + +inline frame::decoded::can1::x_sens_rateofturn_t x_sens_rateofturn(const can1_x_sens_rateofturn_t frame_encoded) { + frame::decoded::can1::x_sens_rateofturn_t frame_decoded; + frame_decoded.x_sens_gyr_x = can1_x_sens_rateofturn_x_sens_gyr_x_decode(frame_encoded.x_sens_gyr_x); + frame_decoded.x_sens_gy_y = can1_x_sens_rateofturn_x_sens_gy_y_decode(frame_encoded.x_sens_gy_y); + frame_decoded.x_sens_gy_z = can1_x_sens_rateofturn_x_sens_gy_z_decode(frame_encoded.x_sens_gy_z); + return frame_decoded; +} + +inline frame::decoded::can1::x_sens_acceleration_t x_sens_acceleration(const can1_x_sens_acceleration_t frame_encoded) { + frame::decoded::can1::x_sens_acceleration_t frame_decoded; + frame_decoded.x_sens_acc_x = can1_x_sens_acceleration_x_sens_acc_x_decode(frame_encoded.x_sens_acc_x); + frame_decoded.x_sens_acc_y = can1_x_sens_acceleration_x_sens_acc_y_decode(frame_encoded.x_sens_acc_y); + frame_decoded.x_sens_acc_z = can1_x_sens_acceleration_x_sens_acc_z_decode(frame_encoded.x_sens_acc_z); + return frame_decoded; +} + +inline frame::decoded::can1::x_sens_velocity_t x_sens_velocity(const can1_x_sens_velocity_t frame_encoded) { + frame::decoded::can1::x_sens_velocity_t frame_decoded; + frame_decoded.x_sens_vel_x = can1_x_sens_velocity_x_sens_vel_x_decode(frame_encoded.x_sens_vel_x); + frame_decoded.x_sens_vel_y = can1_x_sens_velocity_x_sens_vel_y_decode(frame_encoded.x_sens_vel_y); + frame_decoded.x_sens_vel_z = can1_x_sens_velocity_x_sens_vel_z_decode(frame_encoded.x_sens_vel_z); + return frame_decoded; +} + +inline frame::decoded::can1::telemetrie_t telemetrie(const can1_telemetrie_t frame_encoded) { + frame::decoded::can1::telemetrie_t frame_decoded; + frame_decoded.ini_check_error_state = can1_telemetrie_ini_check_error_state_decode(frame_encoded.ini_check_error_state); + frame_decoded.powermap = can1_telemetrie_powermap_decode(frame_encoded.powermap); + frame_decoded.apps_ok = can1_telemetrie_apps_ok_decode(frame_encoded.apps_ok); + frame_decoded.brake_ok = can1_telemetrie_brake_ok_decode(frame_encoded.brake_ok); + frame_decoded.allow_torque = can1_telemetrie_allow_torque_decode(frame_encoded.allow_torque); + frame_decoded.asp_ok = can1_telemetrie_asp_ok_decode(frame_encoded.asp_ok); + frame_decoded.pressure_sensor_ok = can1_telemetrie_pressure_sensor_ok_decode(frame_encoded.pressure_sensor_ok); + frame_decoded.torque_vectoring_on = can1_telemetrie_torque_vectoring_on_decode(frame_encoded.torque_vectoring_on); + frame_decoded.reku_on = can1_telemetrie_reku_on_decode(frame_encoded.reku_on); + frame_decoded.traction_control_on = can1_telemetrie_traction_control_on_decode(frame_encoded.traction_control_on); + frame_decoded.ts_deactivate = can1_telemetrie_ts_deactivate_decode(frame_encoded.ts_deactivate); + frame_decoded.torque_limit = can1_telemetrie_torque_limit_decode(frame_encoded.torque_limit); + frame_decoded.power_limit = can1_telemetrie_power_limit_decode(frame_encoded.power_limit); + frame_decoded.torque_limit_dynamisch = can1_telemetrie_torque_limit_dynamisch_decode(frame_encoded.torque_limit_dynamisch); + frame_decoded.torque_ohne_limit_l = can1_telemetrie_torque_ohne_limit_l_decode(frame_encoded.torque_ohne_limit_l); + frame_decoded.torque_ohne_limit_r = can1_telemetrie_torque_ohne_limit_r_decode(frame_encoded.torque_ohne_limit_r); + return frame_decoded; +} + +inline frame::decoded::can1::override_powermap_t override_powermap(const can1_override_powermap_t frame_encoded) { + frame::decoded::can1::override_powermap_t frame_decoded; + frame_decoded.laptopp_power_map = can1_override_powermap_laptopp_power_map_decode(frame_encoded.laptopp_power_map); + frame_decoded.laptop_reku = can1_override_powermap_laptop_reku_decode(frame_encoded.laptop_reku); + frame_decoded.laptop_tc = can1_override_powermap_laptop_tc_decode(frame_encoded.laptop_tc); + frame_decoded.laptop_tv = can1_override_powermap_laptop_tv_decode(frame_encoded.laptop_tv); + frame_decoded.laptop_slipref = can1_override_powermap_laptop_slipref_decode(frame_encoded.laptop_slipref); + frame_decoded.laptop_tc_i = can1_override_powermap_laptop_tc_i_decode(frame_encoded.laptop_tc_i); + frame_decoded.laptop_tc_p = can1_override_powermap_laptop_tc_p_decode(frame_encoded.laptop_tc_p); + frame_decoded.laptop_tc_mumax = can1_override_powermap_laptop_tc_mumax_decode(frame_encoded.laptop_tc_mumax); + return frame_decoded; +} + +inline frame::decoded::can1::override_laptop_2_t override_laptop_2(const can1_override_laptop_2_t frame_encoded) { + frame::decoded::can1::override_laptop_2_t frame_decoded; + frame_decoded.as_mission = can1_override_laptop_2_as_mission_decode(frame_encoded.as_mission); + frame_decoded.as_state = can1_override_laptop_2_as_state_decode(frame_encoded.as_state); + frame_decoded.manual_input_torque = can1_override_laptop_2_manual_input_torque_decode(frame_encoded.manual_input_torque); + frame_decoded.laptop_powerlimit = can1_override_laptop_2_laptop_powerlimit_decode(frame_encoded.laptop_powerlimit); + frame_decoded.laptop_torque_lim = can1_override_laptop_2_laptop_torque_lim_decode(frame_encoded.laptop_torque_lim); + return frame_decoded; +} + +inline frame::decoded::can1::override_epsc_cooling_t override_epsc_cooling(const can1_override_epsc_cooling_t frame_encoded) { + frame::decoded::can1::override_epsc_cooling_t frame_decoded; + frame_decoded.epsc_manual_angle = can1_override_epsc_cooling_epsc_manual_angle_decode(frame_encoded.epsc_manual_angle); + frame_decoded.epsc_mode = can1_override_epsc_cooling_epsc_mode_decode(frame_encoded.epsc_mode); + frame_decoded.ac_cooling_enable = can1_override_epsc_cooling_ac_cooling_enable_decode(frame_encoded.ac_cooling_enable); + frame_decoded.ts_cooling_enable = can1_override_epsc_cooling_ts_cooling_enable_decode(frame_encoded.ts_cooling_enable); + frame_decoded.ac_cooling_pwm = can1_override_epsc_cooling_ac_cooling_pwm_decode(frame_encoded.ac_cooling_pwm); + frame_decoded.ts_cooling_pwm = can1_override_epsc_cooling_ts_cooling_pwm_decode(frame_encoded.ts_cooling_pwm); + return frame_decoded; +} + +inline frame::decoded::can1::override_laptop_t override_laptop(const can1_override_laptop_t frame_encoded) { + frame::decoded::can1::override_laptop_t frame_decoded; + frame_decoded.fake_r2_d = can1_override_laptop_fake_r2_d_decode(frame_encoded.fake_r2_d); + frame_decoded.fake_soundbox_emergency = can1_override_laptop_fake_soundbox_emergency_decode(frame_encoded.fake_soundbox_emergency); + frame_decoded.fake_soundbox_r2_d = can1_override_laptop_fake_soundbox_r2_d_decode(frame_encoded.fake_soundbox_r2_d); + frame_decoded.fake_ts_active = can1_override_laptop_fake_ts_active_decode(frame_encoded.fake_ts_active); + frame_decoded.override_apps = can1_override_laptop_override_apps_decode(frame_encoded.override_apps); + frame_decoded.override_as_mission = can1_override_laptop_override_as_mission_decode(frame_encoded.override_as_mission); + frame_decoded.override_as_state = can1_override_laptop_override_as_state_decode(frame_encoded.override_as_state); + frame_decoded.override_epsc_mode = can1_override_laptop_override_epsc_mode_decode(frame_encoded.override_epsc_mode); + frame_decoded.override_pdu_ac_cooling_enable = can1_override_laptop_override_pdu_ac_cooling_enable_decode(frame_encoded.override_pdu_ac_cooling_enable); + frame_decoded.override_pdu_acu_enable = can1_override_laptop_override_pdu_acu_enable_decode(frame_encoded.override_pdu_acu_enable); + frame_decoded.override_pdu_drs_enable = can1_override_laptop_override_pdu_drs_enable_decode(frame_encoded.override_pdu_drs_enable); + frame_decoded.override_pdu_epsc_enable = can1_override_laptop_override_pdu_epsc_enable_decode(frame_encoded.override_pdu_epsc_enable); + frame_decoded.override_pdu_heartbeat = can1_override_laptop_override_pdu_heartbeat_decode(frame_encoded.override_pdu_heartbeat); + frame_decoded.override_pdu_lidar_enable = can1_override_laptop_override_pdu_lidar_enable_decode(frame_encoded.override_pdu_lidar_enable); + frame_decoded.override_pdu_pn_v1_enable = can1_override_laptop_override_pdu_pn_v1_enable_decode(frame_encoded.override_pdu_pn_v1_enable); + frame_decoded.override_pdu_pn_v2_enable = can1_override_laptop_override_pdu_pn_v2_enable_decode(frame_encoded.override_pdu_pn_v2_enable); + frame_decoded.override_pdu_ts_cooling_enable = can1_override_laptop_override_pdu_ts_cooling_enable_decode(frame_encoded.override_pdu_ts_cooling_enable); + frame_decoded.override_power_map = can1_override_laptop_override_power_map_decode(frame_encoded.override_power_map); + frame_decoded.override_tc_parameter = can1_override_laptop_override_tc_parameter_decode(frame_encoded.override_tc_parameter); + frame_decoded.override_torque_input = can1_override_laptop_override_torque_input_decode(frame_encoded.override_torque_input); + return frame_decoded; +} + +inline frame::decoded::can1::apps_override_t apps_override(const can1_apps_override_t frame_encoded) { + frame::decoded::can1::apps_override_t frame_decoded; + frame_decoded.apps_0_max = can1_apps_override_apps_0_max_decode(frame_encoded.apps_0_max); + frame_decoded.apps_0_min = can1_apps_override_apps_0_min_decode(frame_encoded.apps_0_min); + frame_decoded.apps_1_max = can1_apps_override_apps_1_max_decode(frame_encoded.apps_1_max); + frame_decoded.apps_1_min = can1_apps_override_apps_1_min_decode(frame_encoded.apps_1_min); + return frame_decoded; +} + +inline frame::decoded::can1::ftcu_damper_t ftcu_damper(const can1_ftcu_damper_t frame_encoded) { + frame::decoded::can1::ftcu_damper_t frame_decoded; + frame_decoded.ftcu_damper_fl = can1_ftcu_damper_ftcu_damper_fl_decode(frame_encoded.ftcu_damper_fl); + frame_decoded.ftcu_damper_fr = can1_ftcu_damper_ftcu_damper_fr_decode(frame_encoded.ftcu_damper_fr); + frame_decoded.ftcu_damper_rl = can1_ftcu_damper_ftcu_damper_rl_decode(frame_encoded.ftcu_damper_rl); + frame_decoded.ftcu_damper_rr = can1_ftcu_damper_ftcu_damper_rr_decode(frame_encoded.ftcu_damper_rr); + return frame_decoded; +} + +inline frame::decoded::can1::ftcu_param_confirm_t ftcu_param_confirm(const can1_ftcu_param_confirm_t frame_encoded) { + frame::decoded::can1::ftcu_param_confirm_t frame_decoded; + frame_decoded.ftcu_param_confirm = can1_ftcu_param_confirm_ftcu_param_confirm_decode(frame_encoded.ftcu_param_confirm); + return frame_decoded; +} + +inline frame::decoded::can1::sensornode_f_10_hz_t sensornode_f_10_hz(const can1_sensornode_f_10_hz_t frame_encoded) { + frame::decoded::can1::sensornode_f_10_hz_t frame_decoded; + frame_decoded.ls_l = can1_sensornode_f_10_hz_ls_l_decode(frame_encoded.ls_l); + frame_decoded.ls_r = can1_sensornode_f_10_hz_ls_r_decode(frame_encoded.ls_r); + frame_decoded.sdc_m_pre_bots = can1_sensornode_f_10_hz_sdc_m_pre_bots_decode(frame_encoded.sdc_m_pre_bots); + frame_decoded.sdc_m_post_ins = can1_sensornode_f_10_hz_sdc_m_post_ins_decode(frame_encoded.sdc_m_post_ins); + frame_decoded.sdc_m_post_bspd = can1_sensornode_f_10_hz_sdc_m_post_bspd_decode(frame_encoded.sdc_m_post_bspd); + frame_decoded.bdts_fl = can1_sensornode_f_10_hz_bdts_fl_decode(frame_encoded.bdts_fl); + frame_decoded.bdts_fr = can1_sensornode_f_10_hz_bdts_fr_decode(frame_encoded.bdts_fr); + return frame_decoded; +} + +inline frame::decoded::can1::sensornode_f_100_hz_1_t sensornode_f_100_hz_1(const can1_sensornode_f_100_hz_1_t frame_encoded) { + frame::decoded::can1::sensornode_f_100_hz_1_t frame_decoded; + frame_decoded.apps_1 = can1_sensornode_f_100_hz_1_apps_1_decode(frame_encoded.apps_1); + frame_decoded.apps_2 = can1_sensornode_f_100_hz_1_apps_2_decode(frame_encoded.apps_2); + frame_decoded.bp_f = can1_sensornode_f_100_hz_1_bp_f_decode(frame_encoded.bp_f); + frame_decoded.sas = can1_sensornode_f_100_hz_1_sas_decode(frame_encoded.sas); + frame_decoded.wss_fl = can1_sensornode_f_100_hz_1_wss_fl_decode(frame_encoded.wss_fl); + frame_decoded.wss_fr = can1_sensornode_f_100_hz_1_wss_fr_decode(frame_encoded.wss_fr); + return frame_decoded; +} + +inline frame::decoded::can1::sensornode_f_100_hz_2_t sensornode_f_100_hz_2(const can1_sensornode_f_100_hz_2_t frame_encoded) { + frame::decoded::can1::sensornode_f_100_hz_2_t frame_decoded; + frame_decoded.ds_fl = can1_sensornode_f_100_hz_2_ds_fl_decode(frame_encoded.ds_fl); + frame_decoded.ds_fr = can1_sensornode_f_100_hz_2_ds_fr_decode(frame_encoded.ds_fr); + return frame_decoded; +} + +inline frame::decoded::can1::sensornode_f_1k_hz_t sensornode_f_1k_hz(const can1_sensornode_f_1k_hz_t frame_encoded) { + frame::decoded::can1::sensornode_f_1k_hz_t frame_decoded; + frame_decoded.sls_fl = can1_sensornode_f_1k_hz_sls_fl_decode(frame_encoded.sls_fl); + frame_decoded.sls_fr = can1_sensornode_f_1k_hz_sls_fr_decode(frame_encoded.sls_fr); + return frame_decoded; +} + +inline frame::decoded::can1::sensornode_r_10_hz_t sensornode_r_10_hz(const can1_sensornode_r_10_hz_t frame_encoded) { + frame::decoded::can1::sensornode_r_10_hz_t frame_decoded; + frame_decoded.ext_ts_on = can1_sensornode_r_10_hz_ext_ts_on_decode(frame_encoded.ext_ts_on); + frame_decoded.sdc_m_pre_tsms = can1_sensornode_r_10_hz_sdc_m_pre_tsms_decode(frame_encoded.sdc_m_pre_tsms); + frame_decoded.sdc_m_post_tsms = can1_sensornode_r_10_hz_sdc_m_post_tsms_decode(frame_encoded.sdc_m_post_tsms); + frame_decoded.bdts_rl = can1_sensornode_r_10_hz_bdts_rl_decode(frame_encoded.bdts_rl); + frame_decoded.bdts_rr = can1_sensornode_r_10_hz_bdts_rr_decode(frame_encoded.bdts_rr); + frame_decoded.wt_bat = can1_sensornode_r_10_hz_wt_bat_decode(frame_encoded.wt_bat); + frame_decoded.wt_dt = can1_sensornode_r_10_hz_wt_dt_decode(frame_encoded.wt_dt); + frame_decoded.wp_bat = can1_sensornode_r_10_hz_wp_bat_decode(frame_encoded.wp_bat); + frame_decoded.wp_dt = can1_sensornode_r_10_hz_wp_dt_decode(frame_encoded.wp_dt); + return frame_decoded; +} + +inline frame::decoded::can1::sensornode_r_100_hz_t sensornode_r_100_hz(const can1_sensornode_r_100_hz_t frame_encoded) { + frame::decoded::can1::sensornode_r_100_hz_t frame_decoded; + frame_decoded.ebs_aps_1 = can1_sensornode_r_100_hz_ebs_aps_1_decode(frame_encoded.ebs_aps_1); + frame_decoded.ebs_aps_2 = can1_sensornode_r_100_hz_ebs_aps_2_decode(frame_encoded.ebs_aps_2); + frame_decoded.bp_r = can1_sensornode_r_100_hz_bp_r_decode(frame_encoded.bp_r); + frame_decoded.wss_rl = can1_sensornode_r_100_hz_wss_rl_decode(frame_encoded.wss_rl); + frame_decoded.wss_rr = can1_sensornode_r_100_hz_wss_rr_decode(frame_encoded.wss_rr); + frame_decoded.ds_rl = can1_sensornode_r_100_hz_ds_rl_decode(frame_encoded.ds_rl); + frame_decoded.ds_rr = can1_sensornode_r_100_hz_ds_rr_decode(frame_encoded.ds_rr); + return frame_decoded; +} + +inline frame::decoded::can1::sensornode_r_1k_hz_t sensornode_r_1k_hz(const can1_sensornode_r_1k_hz_t frame_encoded) { + frame::decoded::can1::sensornode_r_1k_hz_t frame_decoded; + frame_decoded.sls_rl = can1_sensornode_r_1k_hz_sls_rl_decode(frame_encoded.sls_rl); + frame_decoded.sls_rr = can1_sensornode_r_1k_hz_sls_rr_decode(frame_encoded.sls_rr); + return frame_decoded; +} + +inline frame::decoded::can1::pwm_duty_cycle_t pwm_duty_cycle(const can1_pwm_duty_cycle_t frame_encoded) { + frame::decoded::can1::pwm_duty_cycle_t frame_decoded; + frame_decoded.dc_drs = can1_pwm_duty_cycle_dc_drs_decode(frame_encoded.dc_drs); + frame_decoded.dc_assi_y = can1_pwm_duty_cycle_dc_assi_y_decode(frame_encoded.dc_assi_y); + frame_decoded.dc_assi_b = can1_pwm_duty_cycle_dc_assi_b_decode(frame_encoded.dc_assi_b); + frame_decoded.dc_bl = can1_pwm_duty_cycle_dc_bl_decode(frame_encoded.dc_bl); + frame_decoded.dc_fans_dt = can1_pwm_duty_cycle_dc_fans_dt_decode(frame_encoded.dc_fans_dt); + frame_decoded.dc_fans_bat = can1_pwm_duty_cycle_dc_fans_bat_decode(frame_encoded.dc_fans_bat); + frame_decoded.dc_sbx = can1_pwm_duty_cycle_dc_sbx_decode(frame_encoded.dc_sbx); + return frame_decoded; +} + +inline frame::decoded::can1::pwm_config_t pwm_config(const can1_pwm_config_t frame_encoded) { + frame::decoded::can1::pwm_config_t frame_decoded; + frame_decoded.freq_pwm1_drs_lighting = can1_pwm_config_freq_pwm1_drs_lighting_decode(frame_encoded.freq_pwm1_drs_lighting); + frame_decoded.freq_pwm3_fans = can1_pwm_config_freq_pwm3_fans_decode(frame_encoded.freq_pwm3_fans); + frame_decoded.freq_pwm2_sbx = can1_pwm_config_freq_pwm2_sbx_decode(frame_encoded.freq_pwm2_sbx); + return frame_decoded; +} + +inline frame::decoded::can1::dashboard_in_t dashboard_in(const can1_dashboard_in_t frame_encoded) { + frame::decoded::can1::dashboard_in_t frame_decoded; + frame_decoded.dashboard_r2_d_button = can1_dashboard_in_dashboard_r2_d_button_decode(frame_encoded.dashboard_r2_d_button); + frame_decoded.dashboard_ts_activate_button = can1_dashboard_in_dashboard_ts_activate_button_decode(frame_encoded.dashboard_ts_activate_button); + frame_decoded.dashboard_race_key = can1_dashboard_in_dashboard_race_key_decode(frame_encoded.dashboard_race_key); + frame_decoded.dashboard_sdc_in = can1_dashboard_in_dashboard_sdc_in_decode(frame_encoded.dashboard_sdc_in); + frame_decoded.dashboard_sdc_out = can1_dashboard_in_dashboard_sdc_out_decode(frame_encoded.dashboard_sdc_out); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave1_status_t ams_slave1_status(const can1_ams_slave1_status_t frame_encoded) { + frame::decoded::can1::ams_slave1_status_t frame_decoded; + frame_decoded.ams_slave_status_error = can1_ams_slave1_status_ams_slave_status_error_decode(frame_encoded.ams_slave_status_error); + frame_decoded.ams_slave_status_id = can1_ams_slave1_status_ams_slave_status_id_decode(frame_encoded.ams_slave_status_id); + frame_decoded.ams_slave_status_temp_sensor = can1_ams_slave1_status_ams_slave_status_temp_sensor_decode(frame_encoded.ams_slave_status_temp_sensor); + frame_decoded.ams_slave_status_min_cell_volt = can1_ams_slave1_status_ams_slave_status_min_cell_volt_decode(frame_encoded.ams_slave_status_min_cell_volt); + frame_decoded.ams_slave_status_max_cell_volt = can1_ams_slave1_status_ams_slave_status_max_cell_volt_decode(frame_encoded.ams_slave_status_max_cell_volt); + frame_decoded.ams_slave_status_max_temp = can1_ams_slave1_status_ams_slave_status_max_temp_decode(frame_encoded.ams_slave_status_max_temp); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave2_log0_t ams_slave2_log0(const can1_ams_slave2_log0_t frame_encoded) { + frame::decoded::can1::ams_slave2_log0_t frame_decoded; + frame_decoded.ams_slave_id_v0 = can1_ams_slave2_log0_ams_slave_id_v0_decode(frame_encoded.ams_slave_id_v0); + frame_decoded.ams_slave_id_v1 = can1_ams_slave2_log0_ams_slave_id_v1_decode(frame_encoded.ams_slave_id_v1); + frame_decoded.ams_slave_id_v2 = can1_ams_slave2_log0_ams_slave_id_v2_decode(frame_encoded.ams_slave_id_v2); + frame_decoded.ams_slave_id_v3 = can1_ams_slave2_log0_ams_slave_id_v3_decode(frame_encoded.ams_slave_id_v3); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave2_log1_t ams_slave2_log1(const can1_ams_slave2_log1_t frame_encoded) { + frame::decoded::can1::ams_slave2_log1_t frame_decoded; + frame_decoded.ams_slave_id_v4 = can1_ams_slave2_log1_ams_slave_id_v4_decode(frame_encoded.ams_slave_id_v4); + frame_decoded.ams_slave_id_v5 = can1_ams_slave2_log1_ams_slave_id_v5_decode(frame_encoded.ams_slave_id_v5); + frame_decoded.ams_slave_id_v6 = can1_ams_slave2_log1_ams_slave_id_v6_decode(frame_encoded.ams_slave_id_v6); + frame_decoded.ams_slave_id_v7 = can1_ams_slave2_log1_ams_slave_id_v7_decode(frame_encoded.ams_slave_id_v7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave2_log2_t ams_slave2_log2(const can1_ams_slave2_log2_t frame_encoded) { + frame::decoded::can1::ams_slave2_log2_t frame_decoded; + frame_decoded.ams_slave_id_v8 = can1_ams_slave2_log2_ams_slave_id_v8_decode(frame_encoded.ams_slave_id_v8); + frame_decoded.ams_slave_id_v9 = can1_ams_slave2_log2_ams_slave_id_v9_decode(frame_encoded.ams_slave_id_v9); + frame_decoded.ams_slave_id_v10 = can1_ams_slave2_log2_ams_slave_id_v10_decode(frame_encoded.ams_slave_id_v10); + frame_decoded.ams_slave_id_v11 = can1_ams_slave2_log2_ams_slave_id_v11_decode(frame_encoded.ams_slave_id_v11); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave2_log3_t ams_slave2_log3(const can1_ams_slave2_log3_t frame_encoded) { + frame::decoded::can1::ams_slave2_log3_t frame_decoded; + frame_decoded.ams_slave_id_v12 = can1_ams_slave2_log3_ams_slave_id_v12_decode(frame_encoded.ams_slave_id_v12); + frame_decoded.ams_slave_id_v13 = can1_ams_slave2_log3_ams_slave_id_v13_decode(frame_encoded.ams_slave_id_v13); + frame_decoded.ams_slave_id_v14 = can1_ams_slave2_log3_ams_slave_id_v14_decode(frame_encoded.ams_slave_id_v14); + frame_decoded.ams_slave_id_v15 = can1_ams_slave2_log3_ams_slave_id_v15_decode(frame_encoded.ams_slave_id_v15); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave2_log4_t ams_slave2_log4(const can1_ams_slave2_log4_t frame_encoded) { + frame::decoded::can1::ams_slave2_log4_t frame_decoded; + frame_decoded.ams_slave_id_failed_sensors = can1_ams_slave2_log4_ams_slave_id_failed_sensors_decode(frame_encoded.ams_slave_id_failed_sensors); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave2_log5_t ams_slave2_log5(const can1_ams_slave2_log5_t frame_encoded) { + frame::decoded::can1::ams_slave2_log5_t frame_decoded; + frame_decoded.ams_slave_id_t0 = can1_ams_slave2_log5_ams_slave_id_t0_decode(frame_encoded.ams_slave_id_t0); + frame_decoded.ams_slave_id_t1 = can1_ams_slave2_log5_ams_slave_id_t1_decode(frame_encoded.ams_slave_id_t1); + frame_decoded.ams_slave_id_t2 = can1_ams_slave2_log5_ams_slave_id_t2_decode(frame_encoded.ams_slave_id_t2); + frame_decoded.ams_slave_id_t3 = can1_ams_slave2_log5_ams_slave_id_t3_decode(frame_encoded.ams_slave_id_t3); + frame_decoded.ams_slave_id_t4 = can1_ams_slave2_log5_ams_slave_id_t4_decode(frame_encoded.ams_slave_id_t4); + frame_decoded.ams_slave_id_t5 = can1_ams_slave2_log5_ams_slave_id_t5_decode(frame_encoded.ams_slave_id_t5); + frame_decoded.ams_slave_id_t6 = can1_ams_slave2_log5_ams_slave_id_t6_decode(frame_encoded.ams_slave_id_t6); + frame_decoded.ams_slave_id_t7 = can1_ams_slave2_log5_ams_slave_id_t7_decode(frame_encoded.ams_slave_id_t7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave5_log6_t ams_slave5_log6(const can1_ams_slave5_log6_t frame_encoded) { + frame::decoded::can1::ams_slave5_log6_t frame_decoded; + frame_decoded.ams_slave_id_t8 = can1_ams_slave5_log6_ams_slave_id_t8_decode(frame_encoded.ams_slave_id_t8); + frame_decoded.ams_slave_id_t9 = can1_ams_slave5_log6_ams_slave_id_t9_decode(frame_encoded.ams_slave_id_t9); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave4_log6_t ams_slave4_log6(const can1_ams_slave4_log6_t frame_encoded) { + frame::decoded::can1::ams_slave4_log6_t frame_decoded; + frame_decoded.ams_slave_id_t8 = can1_ams_slave4_log6_ams_slave_id_t8_decode(frame_encoded.ams_slave_id_t8); + frame_decoded.ams_slave_id_t9 = can1_ams_slave4_log6_ams_slave_id_t9_decode(frame_encoded.ams_slave_id_t9); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave3_log6_t ams_slave3_log6(const can1_ams_slave3_log6_t frame_encoded) { + frame::decoded::can1::ams_slave3_log6_t frame_decoded; + frame_decoded.ams_slave_id_t8 = can1_ams_slave3_log6_ams_slave_id_t8_decode(frame_encoded.ams_slave_id_t8); + frame_decoded.ams_slave_id_t9 = can1_ams_slave3_log6_ams_slave_id_t9_decode(frame_encoded.ams_slave_id_t9); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave2_log6_t ams_slave2_log6(const can1_ams_slave2_log6_t frame_encoded) { + frame::decoded::can1::ams_slave2_log6_t frame_decoded; + frame_decoded.ams_slave_id_t8 = can1_ams_slave2_log6_ams_slave_id_t8_decode(frame_encoded.ams_slave_id_t8); + frame_decoded.ams_slave_id_t9 = can1_ams_slave2_log6_ams_slave_id_t9_decode(frame_encoded.ams_slave_id_t9); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave1_log6_t ams_slave1_log6(const can1_ams_slave1_log6_t frame_encoded) { + frame::decoded::can1::ams_slave1_log6_t frame_decoded; + frame_decoded.ams_slave_id_t8 = can1_ams_slave1_log6_ams_slave_id_t8_decode(frame_encoded.ams_slave_id_t8); + frame_decoded.ams_slave_id_t9 = can1_ams_slave1_log6_ams_slave_id_t9_decode(frame_encoded.ams_slave_id_t9); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave5_log5_t ams_slave5_log5(const can1_ams_slave5_log5_t frame_encoded) { + frame::decoded::can1::ams_slave5_log5_t frame_decoded; + frame_decoded.ams_slave_id_t0 = can1_ams_slave5_log5_ams_slave_id_t0_decode(frame_encoded.ams_slave_id_t0); + frame_decoded.ams_slave_id_t1 = can1_ams_slave5_log5_ams_slave_id_t1_decode(frame_encoded.ams_slave_id_t1); + frame_decoded.ams_slave_id_t2 = can1_ams_slave5_log5_ams_slave_id_t2_decode(frame_encoded.ams_slave_id_t2); + frame_decoded.ams_slave_id_t3 = can1_ams_slave5_log5_ams_slave_id_t3_decode(frame_encoded.ams_slave_id_t3); + frame_decoded.ams_slave_id_t4 = can1_ams_slave5_log5_ams_slave_id_t4_decode(frame_encoded.ams_slave_id_t4); + frame_decoded.ams_slave_id_t5 = can1_ams_slave5_log5_ams_slave_id_t5_decode(frame_encoded.ams_slave_id_t5); + frame_decoded.ams_slave_id_t6 = can1_ams_slave5_log5_ams_slave_id_t6_decode(frame_encoded.ams_slave_id_t6); + frame_decoded.ams_slave_id_t7 = can1_ams_slave5_log5_ams_slave_id_t7_decode(frame_encoded.ams_slave_id_t7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave4_log5_t ams_slave4_log5(const can1_ams_slave4_log5_t frame_encoded) { + frame::decoded::can1::ams_slave4_log5_t frame_decoded; + frame_decoded.ams_slave_id_t0 = can1_ams_slave4_log5_ams_slave_id_t0_decode(frame_encoded.ams_slave_id_t0); + frame_decoded.ams_slave_id_t1 = can1_ams_slave4_log5_ams_slave_id_t1_decode(frame_encoded.ams_slave_id_t1); + frame_decoded.ams_slave_id_t2 = can1_ams_slave4_log5_ams_slave_id_t2_decode(frame_encoded.ams_slave_id_t2); + frame_decoded.ams_slave_id_t3 = can1_ams_slave4_log5_ams_slave_id_t3_decode(frame_encoded.ams_slave_id_t3); + frame_decoded.ams_slave_id_t4 = can1_ams_slave4_log5_ams_slave_id_t4_decode(frame_encoded.ams_slave_id_t4); + frame_decoded.ams_slave_id_t5 = can1_ams_slave4_log5_ams_slave_id_t5_decode(frame_encoded.ams_slave_id_t5); + frame_decoded.ams_slave_id_t6 = can1_ams_slave4_log5_ams_slave_id_t6_decode(frame_encoded.ams_slave_id_t6); + frame_decoded.ams_slave_id_t7 = can1_ams_slave4_log5_ams_slave_id_t7_decode(frame_encoded.ams_slave_id_t7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave3_log5_t ams_slave3_log5(const can1_ams_slave3_log5_t frame_encoded) { + frame::decoded::can1::ams_slave3_log5_t frame_decoded; + frame_decoded.ams_slave_id_t0 = can1_ams_slave3_log5_ams_slave_id_t0_decode(frame_encoded.ams_slave_id_t0); + frame_decoded.ams_slave_id_t1 = can1_ams_slave3_log5_ams_slave_id_t1_decode(frame_encoded.ams_slave_id_t1); + frame_decoded.ams_slave_id_t2 = can1_ams_slave3_log5_ams_slave_id_t2_decode(frame_encoded.ams_slave_id_t2); + frame_decoded.ams_slave_id_t3 = can1_ams_slave3_log5_ams_slave_id_t3_decode(frame_encoded.ams_slave_id_t3); + frame_decoded.ams_slave_id_t4 = can1_ams_slave3_log5_ams_slave_id_t4_decode(frame_encoded.ams_slave_id_t4); + frame_decoded.ams_slave_id_t5 = can1_ams_slave3_log5_ams_slave_id_t5_decode(frame_encoded.ams_slave_id_t5); + frame_decoded.ams_slave_id_t6 = can1_ams_slave3_log5_ams_slave_id_t6_decode(frame_encoded.ams_slave_id_t6); + frame_decoded.ams_slave_id_t7 = can1_ams_slave3_log5_ams_slave_id_t7_decode(frame_encoded.ams_slave_id_t7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave1_log5_t ams_slave1_log5(const can1_ams_slave1_log5_t frame_encoded) { + frame::decoded::can1::ams_slave1_log5_t frame_decoded; + frame_decoded.ams_slave_id_t0 = can1_ams_slave1_log5_ams_slave_id_t0_decode(frame_encoded.ams_slave_id_t0); + frame_decoded.ams_slave_id_t1 = can1_ams_slave1_log5_ams_slave_id_t1_decode(frame_encoded.ams_slave_id_t1); + frame_decoded.ams_slave_id_t2 = can1_ams_slave1_log5_ams_slave_id_t2_decode(frame_encoded.ams_slave_id_t2); + frame_decoded.ams_slave_id_t3 = can1_ams_slave1_log5_ams_slave_id_t3_decode(frame_encoded.ams_slave_id_t3); + frame_decoded.ams_slave_id_t4 = can1_ams_slave1_log5_ams_slave_id_t4_decode(frame_encoded.ams_slave_id_t4); + frame_decoded.ams_slave_id_t5 = can1_ams_slave1_log5_ams_slave_id_t5_decode(frame_encoded.ams_slave_id_t5); + frame_decoded.ams_slave_id_t6 = can1_ams_slave1_log5_ams_slave_id_t6_decode(frame_encoded.ams_slave_id_t6); + frame_decoded.ams_slave_id_t7 = can1_ams_slave1_log5_ams_slave_id_t7_decode(frame_encoded.ams_slave_id_t7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave5_log4_t ams_slave5_log4(const can1_ams_slave5_log4_t frame_encoded) { + frame::decoded::can1::ams_slave5_log4_t frame_decoded; + frame_decoded.ams_slave_id_failed_sensors = can1_ams_slave5_log4_ams_slave_id_failed_sensors_decode(frame_encoded.ams_slave_id_failed_sensors); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave4_log4_t ams_slave4_log4(const can1_ams_slave4_log4_t frame_encoded) { + frame::decoded::can1::ams_slave4_log4_t frame_decoded; + frame_decoded.ams_slave_id_failed_sensors = can1_ams_slave4_log4_ams_slave_id_failed_sensors_decode(frame_encoded.ams_slave_id_failed_sensors); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave3_log4_t ams_slave3_log4(const can1_ams_slave3_log4_t frame_encoded) { + frame::decoded::can1::ams_slave3_log4_t frame_decoded; + frame_decoded.ams_slave_id_failed_sensors = can1_ams_slave3_log4_ams_slave_id_failed_sensors_decode(frame_encoded.ams_slave_id_failed_sensors); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave1_log4_t ams_slave1_log4(const can1_ams_slave1_log4_t frame_encoded) { + frame::decoded::can1::ams_slave1_log4_t frame_decoded; + frame_decoded.ams_slave_id_failed_sensors = can1_ams_slave1_log4_ams_slave_id_failed_sensors_decode(frame_encoded.ams_slave_id_failed_sensors); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave5_log3_t ams_slave5_log3(const can1_ams_slave5_log3_t frame_encoded) { + frame::decoded::can1::ams_slave5_log3_t frame_decoded; + frame_decoded.ams_slave_id_v12 = can1_ams_slave5_log3_ams_slave_id_v12_decode(frame_encoded.ams_slave_id_v12); + frame_decoded.ams_slave_id_v13 = can1_ams_slave5_log3_ams_slave_id_v13_decode(frame_encoded.ams_slave_id_v13); + frame_decoded.ams_slave_id_v14 = can1_ams_slave5_log3_ams_slave_id_v14_decode(frame_encoded.ams_slave_id_v14); + frame_decoded.ams_slave_id_v15 = can1_ams_slave5_log3_ams_slave_id_v15_decode(frame_encoded.ams_slave_id_v15); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave4_log3_t ams_slave4_log3(const can1_ams_slave4_log3_t frame_encoded) { + frame::decoded::can1::ams_slave4_log3_t frame_decoded; + frame_decoded.ams_slave_id_v12 = can1_ams_slave4_log3_ams_slave_id_v12_decode(frame_encoded.ams_slave_id_v12); + frame_decoded.ams_slave_id_v13 = can1_ams_slave4_log3_ams_slave_id_v13_decode(frame_encoded.ams_slave_id_v13); + frame_decoded.ams_slave_id_v14 = can1_ams_slave4_log3_ams_slave_id_v14_decode(frame_encoded.ams_slave_id_v14); + frame_decoded.ams_slave_id_v15 = can1_ams_slave4_log3_ams_slave_id_v15_decode(frame_encoded.ams_slave_id_v15); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave3_log3_t ams_slave3_log3(const can1_ams_slave3_log3_t frame_encoded) { + frame::decoded::can1::ams_slave3_log3_t frame_decoded; + frame_decoded.ams_slave_id_v12 = can1_ams_slave3_log3_ams_slave_id_v12_decode(frame_encoded.ams_slave_id_v12); + frame_decoded.ams_slave_id_v13 = can1_ams_slave3_log3_ams_slave_id_v13_decode(frame_encoded.ams_slave_id_v13); + frame_decoded.ams_slave_id_v14 = can1_ams_slave3_log3_ams_slave_id_v14_decode(frame_encoded.ams_slave_id_v14); + frame_decoded.ams_slave_id_v15 = can1_ams_slave3_log3_ams_slave_id_v15_decode(frame_encoded.ams_slave_id_v15); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave1_log3_t ams_slave1_log3(const can1_ams_slave1_log3_t frame_encoded) { + frame::decoded::can1::ams_slave1_log3_t frame_decoded; + frame_decoded.ams_slave_id_v12 = can1_ams_slave1_log3_ams_slave_id_v12_decode(frame_encoded.ams_slave_id_v12); + frame_decoded.ams_slave_id_v13 = can1_ams_slave1_log3_ams_slave_id_v13_decode(frame_encoded.ams_slave_id_v13); + frame_decoded.ams_slave_id_v14 = can1_ams_slave1_log3_ams_slave_id_v14_decode(frame_encoded.ams_slave_id_v14); + frame_decoded.ams_slave_id_v15 = can1_ams_slave1_log3_ams_slave_id_v15_decode(frame_encoded.ams_slave_id_v15); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave5_log2_t ams_slave5_log2(const can1_ams_slave5_log2_t frame_encoded) { + frame::decoded::can1::ams_slave5_log2_t frame_decoded; + frame_decoded.ams_slave_id_v8 = can1_ams_slave5_log2_ams_slave_id_v8_decode(frame_encoded.ams_slave_id_v8); + frame_decoded.ams_slave_id_v9 = can1_ams_slave5_log2_ams_slave_id_v9_decode(frame_encoded.ams_slave_id_v9); + frame_decoded.ams_slave_id_v10 = can1_ams_slave5_log2_ams_slave_id_v10_decode(frame_encoded.ams_slave_id_v10); + frame_decoded.ams_slave_id_v11 = can1_ams_slave5_log2_ams_slave_id_v11_decode(frame_encoded.ams_slave_id_v11); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave4_log2_t ams_slave4_log2(const can1_ams_slave4_log2_t frame_encoded) { + frame::decoded::can1::ams_slave4_log2_t frame_decoded; + frame_decoded.ams_slave_id_v8 = can1_ams_slave4_log2_ams_slave_id_v8_decode(frame_encoded.ams_slave_id_v8); + frame_decoded.ams_slave_id_v9 = can1_ams_slave4_log2_ams_slave_id_v9_decode(frame_encoded.ams_slave_id_v9); + frame_decoded.ams_slave_id_v10 = can1_ams_slave4_log2_ams_slave_id_v10_decode(frame_encoded.ams_slave_id_v10); + frame_decoded.ams_slave_id_v11 = can1_ams_slave4_log2_ams_slave_id_v11_decode(frame_encoded.ams_slave_id_v11); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave3_log2_t ams_slave3_log2(const can1_ams_slave3_log2_t frame_encoded) { + frame::decoded::can1::ams_slave3_log2_t frame_decoded; + frame_decoded.ams_slave_id_v8 = can1_ams_slave3_log2_ams_slave_id_v8_decode(frame_encoded.ams_slave_id_v8); + frame_decoded.ams_slave_id_v9 = can1_ams_slave3_log2_ams_slave_id_v9_decode(frame_encoded.ams_slave_id_v9); + frame_decoded.ams_slave_id_v10 = can1_ams_slave3_log2_ams_slave_id_v10_decode(frame_encoded.ams_slave_id_v10); + frame_decoded.ams_slave_id_v11 = can1_ams_slave3_log2_ams_slave_id_v11_decode(frame_encoded.ams_slave_id_v11); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave1_log2_t ams_slave1_log2(const can1_ams_slave1_log2_t frame_encoded) { + frame::decoded::can1::ams_slave1_log2_t frame_decoded; + frame_decoded.ams_slave_id_v8 = can1_ams_slave1_log2_ams_slave_id_v8_decode(frame_encoded.ams_slave_id_v8); + frame_decoded.ams_slave_id_v9 = can1_ams_slave1_log2_ams_slave_id_v9_decode(frame_encoded.ams_slave_id_v9); + frame_decoded.ams_slave_id_v10 = can1_ams_slave1_log2_ams_slave_id_v10_decode(frame_encoded.ams_slave_id_v10); + frame_decoded.ams_slave_id_v11 = can1_ams_slave1_log2_ams_slave_id_v11_decode(frame_encoded.ams_slave_id_v11); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave5_log1_t ams_slave5_log1(const can1_ams_slave5_log1_t frame_encoded) { + frame::decoded::can1::ams_slave5_log1_t frame_decoded; + frame_decoded.ams_slave_id_v4 = can1_ams_slave5_log1_ams_slave_id_v4_decode(frame_encoded.ams_slave_id_v4); + frame_decoded.ams_slave_id_v5 = can1_ams_slave5_log1_ams_slave_id_v5_decode(frame_encoded.ams_slave_id_v5); + frame_decoded.ams_slave_id_v6 = can1_ams_slave5_log1_ams_slave_id_v6_decode(frame_encoded.ams_slave_id_v6); + frame_decoded.ams_slave_id_v7 = can1_ams_slave5_log1_ams_slave_id_v7_decode(frame_encoded.ams_slave_id_v7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave4_log1_t ams_slave4_log1(const can1_ams_slave4_log1_t frame_encoded) { + frame::decoded::can1::ams_slave4_log1_t frame_decoded; + frame_decoded.ams_slave_id_v4 = can1_ams_slave4_log1_ams_slave_id_v4_decode(frame_encoded.ams_slave_id_v4); + frame_decoded.ams_slave_id_v5 = can1_ams_slave4_log1_ams_slave_id_v5_decode(frame_encoded.ams_slave_id_v5); + frame_decoded.ams_slave_id_v6 = can1_ams_slave4_log1_ams_slave_id_v6_decode(frame_encoded.ams_slave_id_v6); + frame_decoded.ams_slave_id_v7 = can1_ams_slave4_log1_ams_slave_id_v7_decode(frame_encoded.ams_slave_id_v7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave3_log1_t ams_slave3_log1(const can1_ams_slave3_log1_t frame_encoded) { + frame::decoded::can1::ams_slave3_log1_t frame_decoded; + frame_decoded.ams_slave_id_v4 = can1_ams_slave3_log1_ams_slave_id_v4_decode(frame_encoded.ams_slave_id_v4); + frame_decoded.ams_slave_id_v5 = can1_ams_slave3_log1_ams_slave_id_v5_decode(frame_encoded.ams_slave_id_v5); + frame_decoded.ams_slave_id_v6 = can1_ams_slave3_log1_ams_slave_id_v6_decode(frame_encoded.ams_slave_id_v6); + frame_decoded.ams_slave_id_v7 = can1_ams_slave3_log1_ams_slave_id_v7_decode(frame_encoded.ams_slave_id_v7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave1_log1_t ams_slave1_log1(const can1_ams_slave1_log1_t frame_encoded) { + frame::decoded::can1::ams_slave1_log1_t frame_decoded; + frame_decoded.ams_slave_id_v4 = can1_ams_slave1_log1_ams_slave_id_v4_decode(frame_encoded.ams_slave_id_v4); + frame_decoded.ams_slave_id_v5 = can1_ams_slave1_log1_ams_slave_id_v5_decode(frame_encoded.ams_slave_id_v5); + frame_decoded.ams_slave_id_v6 = can1_ams_slave1_log1_ams_slave_id_v6_decode(frame_encoded.ams_slave_id_v6); + frame_decoded.ams_slave_id_v7 = can1_ams_slave1_log1_ams_slave_id_v7_decode(frame_encoded.ams_slave_id_v7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave5_log0_t ams_slave5_log0(const can1_ams_slave5_log0_t frame_encoded) { + frame::decoded::can1::ams_slave5_log0_t frame_decoded; + frame_decoded.ams_slave_id_v0 = can1_ams_slave5_log0_ams_slave_id_v0_decode(frame_encoded.ams_slave_id_v0); + frame_decoded.ams_slave_id_v1 = can1_ams_slave5_log0_ams_slave_id_v1_decode(frame_encoded.ams_slave_id_v1); + frame_decoded.ams_slave_id_v2 = can1_ams_slave5_log0_ams_slave_id_v2_decode(frame_encoded.ams_slave_id_v2); + frame_decoded.ams_slave_id_v3 = can1_ams_slave5_log0_ams_slave_id_v3_decode(frame_encoded.ams_slave_id_v3); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave4_log0_t ams_slave4_log0(const can1_ams_slave4_log0_t frame_encoded) { + frame::decoded::can1::ams_slave4_log0_t frame_decoded; + frame_decoded.ams_slave_id_v0 = can1_ams_slave4_log0_ams_slave_id_v0_decode(frame_encoded.ams_slave_id_v0); + frame_decoded.ams_slave_id_v1 = can1_ams_slave4_log0_ams_slave_id_v1_decode(frame_encoded.ams_slave_id_v1); + frame_decoded.ams_slave_id_v2 = can1_ams_slave4_log0_ams_slave_id_v2_decode(frame_encoded.ams_slave_id_v2); + frame_decoded.ams_slave_id_v3 = can1_ams_slave4_log0_ams_slave_id_v3_decode(frame_encoded.ams_slave_id_v3); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave3_log0_t ams_slave3_log0(const can1_ams_slave3_log0_t frame_encoded) { + frame::decoded::can1::ams_slave3_log0_t frame_decoded; + frame_decoded.ams_slave_id_v0 = can1_ams_slave3_log0_ams_slave_id_v0_decode(frame_encoded.ams_slave_id_v0); + frame_decoded.ams_slave_id_v1 = can1_ams_slave3_log0_ams_slave_id_v1_decode(frame_encoded.ams_slave_id_v1); + frame_decoded.ams_slave_id_v2 = can1_ams_slave3_log0_ams_slave_id_v2_decode(frame_encoded.ams_slave_id_v2); + frame_decoded.ams_slave_id_v3 = can1_ams_slave3_log0_ams_slave_id_v3_decode(frame_encoded.ams_slave_id_v3); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave1_log0_t ams_slave1_log0(const can1_ams_slave1_log0_t frame_encoded) { + frame::decoded::can1::ams_slave1_log0_t frame_decoded; + frame_decoded.ams_slave_id_v0 = can1_ams_slave1_log0_ams_slave_id_v0_decode(frame_encoded.ams_slave_id_v0); + frame_decoded.ams_slave_id_v1 = can1_ams_slave1_log0_ams_slave_id_v1_decode(frame_encoded.ams_slave_id_v1); + frame_decoded.ams_slave_id_v2 = can1_ams_slave1_log0_ams_slave_id_v2_decode(frame_encoded.ams_slave_id_v2); + frame_decoded.ams_slave_id_v3 = can1_ams_slave1_log0_ams_slave_id_v3_decode(frame_encoded.ams_slave_id_v3); + return frame_decoded; +} + +inline frame::decoded::can1::pdu_heartbeat_t pdu_heartbeat(const can1_pdu_heartbeat_t frame_encoded) { + frame::decoded::can1::pdu_heartbeat_t frame_decoded; + frame_decoded.pdu_heartbeat = can1_pdu_heartbeat_pdu_heartbeat_decode(frame_encoded.pdu_heartbeat); + return frame_decoded; +} + +inline frame::decoded::can1::ftcu_pneumatik_t ftcu_pneumatik(const can1_ftcu_pneumatik_t frame_encoded) { + frame::decoded::can1::ftcu_pneumatik_t frame_decoded; + frame_decoded.ftcu_tank_pressure_1 = can1_ftcu_pneumatik_ftcu_tank_pressure_1_decode(frame_encoded.ftcu_tank_pressure_1); + frame_decoded.ftcu_tank_pressure_2 = can1_ftcu_pneumatik_ftcu_tank_pressure_2_decode(frame_encoded.ftcu_tank_pressure_2); + return frame_decoded; +} + +inline frame::decoded::can1::acu_tx_commands_t acu_tx_commands(const can1_acu_tx_commands_t frame_encoded) { + frame::decoded::can1::acu_tx_commands_t frame_decoded; + frame_decoded.abx_speed_fl = can1_acu_tx_commands_abx_speed_fl_decode(frame_encoded.abx_speed_fl); + frame_decoded.abx_speed_fr = can1_acu_tx_commands_abx_speed_fr_decode(frame_encoded.abx_speed_fr); + frame_decoded.abx_speed_rl = can1_acu_tx_commands_abx_speed_rl_decode(frame_encoded.abx_speed_rl); + frame_decoded.abx_speed_rr = can1_acu_tx_commands_abx_speed_rr_decode(frame_encoded.abx_speed_rr); + frame_decoded.abx_steering_angle_left = can1_acu_tx_commands_abx_steering_angle_left_decode(frame_encoded.abx_steering_angle_left); + frame_decoded.abx_steering_angle_right = can1_acu_tx_commands_abx_steering_angle_right_decode(frame_encoded.abx_steering_angle_right); + return frame_decoded; +} + +inline frame::decoded::can1::acu_rx_commands_t acu_rx_commands(const can1_acu_rx_commands_t frame_encoded) { + frame::decoded::can1::acu_rx_commands_t frame_decoded; + frame_decoded.acu_speed_target_left = can1_acu_rx_commands_acu_speed_target_left_decode(frame_encoded.acu_speed_target_left); + frame_decoded.acu_speed_target_right = can1_acu_rx_commands_acu_speed_target_right_decode(frame_encoded.acu_speed_target_right); + frame_decoded.acu_steering_angle_right = can1_acu_rx_commands_acu_steering_angle_right_decode(frame_encoded.acu_steering_angle_right); + frame_decoded.acu_steering_angle_left = can1_acu_rx_commands_acu_steering_angle_left_decode(frame_encoded.acu_steering_angle_left); + return frame_decoded; +} + +inline frame::decoded::can1::acu_rx_t acu_rx(const can1_acu_rx_t frame_encoded) { + frame::decoded::can1::acu_rx_t frame_decoded; + frame_decoded.acu_as_mission_complete = can1_acu_rx_acu_as_mission_complete_decode(frame_encoded.acu_as_mission_complete); + frame_decoded.acu_as_ok = can1_acu_rx_acu_as_ok_decode(frame_encoded.acu_as_ok); + frame_decoded.acu_drs = can1_acu_rx_acu_drs_decode(frame_encoded.acu_drs); + frame_decoded.acu_lap_count = can1_acu_rx_acu_lap_count_decode(frame_encoded.acu_lap_count); + frame_decoded.acu_cones_all = can1_acu_rx_acu_cones_all_decode(frame_encoded.acu_cones_all); + frame_decoded.acu_cones_actual = can1_acu_rx_acu_cones_actual_decode(frame_encoded.acu_cones_actual); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave0_log0_t ams_slave0_log0(const can1_ams_slave0_log0_t frame_encoded) { + frame::decoded::can1::ams_slave0_log0_t frame_decoded; + frame_decoded.ams_slave_id_v0 = can1_ams_slave0_log0_ams_slave_id_v0_decode(frame_encoded.ams_slave_id_v0); + frame_decoded.ams_slave_id_v1 = can1_ams_slave0_log0_ams_slave_id_v1_decode(frame_encoded.ams_slave_id_v1); + frame_decoded.ams_slave_id_v2 = can1_ams_slave0_log0_ams_slave_id_v2_decode(frame_encoded.ams_slave_id_v2); + frame_decoded.ams_slave_id_v3 = can1_ams_slave0_log0_ams_slave_id_v3_decode(frame_encoded.ams_slave_id_v3); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave0_log1_t ams_slave0_log1(const can1_ams_slave0_log1_t frame_encoded) { + frame::decoded::can1::ams_slave0_log1_t frame_decoded; + frame_decoded.ams_slave_id_v4 = can1_ams_slave0_log1_ams_slave_id_v4_decode(frame_encoded.ams_slave_id_v4); + frame_decoded.ams_slave_id_v5 = can1_ams_slave0_log1_ams_slave_id_v5_decode(frame_encoded.ams_slave_id_v5); + frame_decoded.ams_slave_id_v6 = can1_ams_slave0_log1_ams_slave_id_v6_decode(frame_encoded.ams_slave_id_v6); + frame_decoded.ams_slave_id_v7 = can1_ams_slave0_log1_ams_slave_id_v7_decode(frame_encoded.ams_slave_id_v7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave0_log3_t ams_slave0_log3(const can1_ams_slave0_log3_t frame_encoded) { + frame::decoded::can1::ams_slave0_log3_t frame_decoded; + frame_decoded.ams_slave_id_v12 = can1_ams_slave0_log3_ams_slave_id_v12_decode(frame_encoded.ams_slave_id_v12); + frame_decoded.ams_slave_id_v13 = can1_ams_slave0_log3_ams_slave_id_v13_decode(frame_encoded.ams_slave_id_v13); + frame_decoded.ams_slave_id_v14 = can1_ams_slave0_log3_ams_slave_id_v14_decode(frame_encoded.ams_slave_id_v14); + frame_decoded.ams_slave_id_v15 = can1_ams_slave0_log3_ams_slave_id_v15_decode(frame_encoded.ams_slave_id_v15); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave0_log4_t ams_slave0_log4(const can1_ams_slave0_log4_t frame_encoded) { + frame::decoded::can1::ams_slave0_log4_t frame_decoded; + frame_decoded.ams_slave_id_failed_sensors = can1_ams_slave0_log4_ams_slave_id_failed_sensors_decode(frame_encoded.ams_slave_id_failed_sensors); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave0_log5_t ams_slave0_log5(const can1_ams_slave0_log5_t frame_encoded) { + frame::decoded::can1::ams_slave0_log5_t frame_decoded; + frame_decoded.ams_slave_id_t0 = can1_ams_slave0_log5_ams_slave_id_t0_decode(frame_encoded.ams_slave_id_t0); + frame_decoded.ams_slave_id_t1 = can1_ams_slave0_log5_ams_slave_id_t1_decode(frame_encoded.ams_slave_id_t1); + frame_decoded.ams_slave_id_t2 = can1_ams_slave0_log5_ams_slave_id_t2_decode(frame_encoded.ams_slave_id_t2); + frame_decoded.ams_slave_id_t3 = can1_ams_slave0_log5_ams_slave_id_t3_decode(frame_encoded.ams_slave_id_t3); + frame_decoded.ams_slave_id_t4 = can1_ams_slave0_log5_ams_slave_id_t4_decode(frame_encoded.ams_slave_id_t4); + frame_decoded.ams_slave_id_t5 = can1_ams_slave0_log5_ams_slave_id_t5_decode(frame_encoded.ams_slave_id_t5); + frame_decoded.ams_slave_id_t6 = can1_ams_slave0_log5_ams_slave_id_t6_decode(frame_encoded.ams_slave_id_t6); + frame_decoded.ams_slave_id_t7 = can1_ams_slave0_log5_ams_slave_id_t7_decode(frame_encoded.ams_slave_id_t7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave0_log6_t ams_slave0_log6(const can1_ams_slave0_log6_t frame_encoded) { + frame::decoded::can1::ams_slave0_log6_t frame_decoded; + frame_decoded.ams_slave_id_t8 = can1_ams_slave0_log6_ams_slave_id_t8_decode(frame_encoded.ams_slave_id_t8); + frame_decoded.ams_slave_id_t9 = can1_ams_slave0_log6_ams_slave_id_t9_decode(frame_encoded.ams_slave_id_t9); + return frame_decoded; +} + +inline frame::decoded::can1::acu_tx_t acu_tx(const can1_acu_tx_t frame_encoded) { + frame::decoded::can1::acu_tx_t frame_decoded; + frame_decoded.acu_as_mission = can1_acu_tx_acu_as_mission_decode(frame_encoded.acu_as_mission); + frame_decoded.acu_as_state = can1_acu_tx_acu_as_state_decode(frame_encoded.acu_as_state); + frame_decoded.acu_power_off = can1_acu_tx_acu_power_off_decode(frame_encoded.acu_power_off); + frame_decoded.acu_reset = can1_acu_tx_acu_reset_decode(frame_encoded.acu_reset); + frame_decoded.acu_allow_torque = can1_acu_tx_acu_allow_torque_decode(frame_encoded.acu_allow_torque); + frame_decoded.abx_con_mon_error = can1_acu_tx_abx_con_mon_error_decode(frame_encoded.abx_con_mon_error); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave5_status_t ams_slave5_status(const can1_ams_slave5_status_t frame_encoded) { + frame::decoded::can1::ams_slave5_status_t frame_decoded; + frame_decoded.ams_slave_status_error = can1_ams_slave5_status_ams_slave_status_error_decode(frame_encoded.ams_slave_status_error); + frame_decoded.ams_slave_status_id = can1_ams_slave5_status_ams_slave_status_id_decode(frame_encoded.ams_slave_status_id); + frame_decoded.ams_slave_status_temp_sensor = can1_ams_slave5_status_ams_slave_status_temp_sensor_decode(frame_encoded.ams_slave_status_temp_sensor); + frame_decoded.ams_slave_status_min_cell_volt = can1_ams_slave5_status_ams_slave_status_min_cell_volt_decode(frame_encoded.ams_slave_status_min_cell_volt); + frame_decoded.ams_slave_status_max_cell_volt = can1_ams_slave5_status_ams_slave_status_max_cell_volt_decode(frame_encoded.ams_slave_status_max_cell_volt); + frame_decoded.ams_slave_status_max_temp = can1_ams_slave5_status_ams_slave_status_max_temp_decode(frame_encoded.ams_slave_status_max_temp); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave4_status_t ams_slave4_status(const can1_ams_slave4_status_t frame_encoded) { + frame::decoded::can1::ams_slave4_status_t frame_decoded; + frame_decoded.ams_slave_status_error = can1_ams_slave4_status_ams_slave_status_error_decode(frame_encoded.ams_slave_status_error); + frame_decoded.ams_slave_status_id = can1_ams_slave4_status_ams_slave_status_id_decode(frame_encoded.ams_slave_status_id); + frame_decoded.ams_slave_status_temp_sensor = can1_ams_slave4_status_ams_slave_status_temp_sensor_decode(frame_encoded.ams_slave_status_temp_sensor); + frame_decoded.ams_slave_status_min_cell_volt = can1_ams_slave4_status_ams_slave_status_min_cell_volt_decode(frame_encoded.ams_slave_status_min_cell_volt); + frame_decoded.ams_slave_status_max_cell_volt = can1_ams_slave4_status_ams_slave_status_max_cell_volt_decode(frame_encoded.ams_slave_status_max_cell_volt); + frame_decoded.ams_slave_status_max_temp = can1_ams_slave4_status_ams_slave_status_max_temp_decode(frame_encoded.ams_slave_status_max_temp); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave3_status_t ams_slave3_status(const can1_ams_slave3_status_t frame_encoded) { + frame::decoded::can1::ams_slave3_status_t frame_decoded; + frame_decoded.ams_slave_status_error = can1_ams_slave3_status_ams_slave_status_error_decode(frame_encoded.ams_slave_status_error); + frame_decoded.ams_slave_status_id = can1_ams_slave3_status_ams_slave_status_id_decode(frame_encoded.ams_slave_status_id); + frame_decoded.ams_slave_status_temp_sensor = can1_ams_slave3_status_ams_slave_status_temp_sensor_decode(frame_encoded.ams_slave_status_temp_sensor); + frame_decoded.ams_slave_status_min_cell_volt = can1_ams_slave3_status_ams_slave_status_min_cell_volt_decode(frame_encoded.ams_slave_status_min_cell_volt); + frame_decoded.ams_slave_status_max_cell_volt = can1_ams_slave3_status_ams_slave_status_max_cell_volt_decode(frame_encoded.ams_slave_status_max_cell_volt); + frame_decoded.ams_slave_status_max_temp = can1_ams_slave3_status_ams_slave_status_max_temp_decode(frame_encoded.ams_slave_status_max_temp); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave2_status_t ams_slave2_status(const can1_ams_slave2_status_t frame_encoded) { + frame::decoded::can1::ams_slave2_status_t frame_decoded; + frame_decoded.ams_slave_status_error = can1_ams_slave2_status_ams_slave_status_error_decode(frame_encoded.ams_slave_status_error); + frame_decoded.ams_slave_status_id = can1_ams_slave2_status_ams_slave_status_id_decode(frame_encoded.ams_slave_status_id); + frame_decoded.ams_slave_status_temp_sensor = can1_ams_slave2_status_ams_slave_status_temp_sensor_decode(frame_encoded.ams_slave_status_temp_sensor); + frame_decoded.ams_slave_status_min_cell_volt = can1_ams_slave2_status_ams_slave_status_min_cell_volt_decode(frame_encoded.ams_slave_status_min_cell_volt); + frame_decoded.ams_slave_status_max_cell_volt = can1_ams_slave2_status_ams_slave_status_max_cell_volt_decode(frame_encoded.ams_slave_status_max_cell_volt); + frame_decoded.ams_slave_status_max_temp = can1_ams_slave2_status_ams_slave_status_max_temp_decode(frame_encoded.ams_slave_status_max_temp); + return frame_decoded; +} + +inline frame::decoded::can1::ams_error_t ams_error(const can1_ams_error_t frame_encoded) { + frame::decoded::can1::ams_error_t frame_decoded; + frame_decoded.ams_error_kind = can1_ams_error_ams_error_kind_decode(frame_encoded.ams_error_kind); + frame_decoded.ams_error_arg = can1_ams_error_ams_error_arg_decode(frame_encoded.ams_error_arg); + return frame_decoded; +} + +inline frame::decoded::can1::ftcu_cooling_t ftcu_cooling(const can1_ftcu_cooling_t frame_encoded) { + frame::decoded::can1::ftcu_cooling_t frame_decoded; + frame_decoded.ftcu_water_pressure_2 = can1_ftcu_cooling_ftcu_water_pressure_2_decode(frame_encoded.ftcu_water_pressure_2); + frame_decoded.ftcu_water_pressure_1 = can1_ftcu_cooling_ftcu_water_pressure_1_decode(frame_encoded.ftcu_water_pressure_1); + frame_decoded.ftcu_water_temperature_1 = can1_ftcu_cooling_ftcu_water_temperature_1_decode(frame_encoded.ftcu_water_temperature_1); + frame_decoded.ftcu_water_temperature_2 = can1_ftcu_cooling_ftcu_water_temperature_2_decode(frame_encoded.ftcu_water_temperature_2); + frame_decoded.ftcu_flow_rate = can1_ftcu_cooling_ftcu_flow_rate_decode(frame_encoded.ftcu_flow_rate); + return frame_decoded; +} + +inline frame::decoded::can1::ftcu_brake_t_t ftcu_brake_t(const can1_ftcu_brake_t_t frame_encoded) { + frame::decoded::can1::ftcu_brake_t_t frame_decoded; + frame_decoded.ftcu_brake_t_fl = can1_ftcu_brake_t_ftcu_brake_t_fl_decode(frame_encoded.ftcu_brake_t_fl); + frame_decoded.ftcu_brake_t_fr = can1_ftcu_brake_t_ftcu_brake_t_fr_decode(frame_encoded.ftcu_brake_t_fr); + frame_decoded.ftcu_brake_t_rl = can1_ftcu_brake_t_ftcu_brake_t_rl_decode(frame_encoded.ftcu_brake_t_rl); + frame_decoded.ftcu_brake_t_rr = can1_ftcu_brake_t_ftcu_brake_t_rr_decode(frame_encoded.ftcu_brake_t_rr); + return frame_decoded; +} + +inline frame::decoded::can1::ftcu_wheelspeed_t ftcu_wheelspeed(const can1_ftcu_wheelspeed_t frame_encoded) { + frame::decoded::can1::ftcu_wheelspeed_t frame_decoded; + frame_decoded.ftcu_wheelspeed_fl = can1_ftcu_wheelspeed_ftcu_wheelspeed_fl_decode(frame_encoded.ftcu_wheelspeed_fl); + frame_decoded.ftcu_wheelspeed_fr = can1_ftcu_wheelspeed_ftcu_wheelspeed_fr_decode(frame_encoded.ftcu_wheelspeed_fr); + frame_decoded.ftcu_wheelspeed_rl = can1_ftcu_wheelspeed_ftcu_wheelspeed_rl_decode(frame_encoded.ftcu_wheelspeed_rl); + frame_decoded.ftcu_wheelspeed_rr = can1_ftcu_wheelspeed_ftcu_wheelspeed_rr_decode(frame_encoded.ftcu_wheelspeed_rr); + frame_decoded.ftcu_distance_session = can1_ftcu_wheelspeed_ftcu_distance_session_decode(frame_encoded.ftcu_distance_session); + return frame_decoded; +} + +inline frame::decoded::can1::ftcu_timings_t ftcu_timings(const can1_ftcu_timings_t frame_encoded) { + frame::decoded::can1::ftcu_timings_t frame_decoded; + frame_decoded.ftcu_laptime_best = can1_ftcu_timings_ftcu_laptime_best_decode(frame_encoded.ftcu_laptime_best); + frame_decoded.ftcu_laptime_last = can1_ftcu_timings_ftcu_laptime_last_decode(frame_encoded.ftcu_laptime_last); + frame_decoded.ftcu_sectortime_best = can1_ftcu_timings_ftcu_sectortime_best_decode(frame_encoded.ftcu_sectortime_best); + frame_decoded.ftcu_sectortime_last = can1_ftcu_timings_ftcu_sectortime_last_decode(frame_encoded.ftcu_sectortime_last); + return frame_decoded; +} + +inline frame::decoded::can1::ftcu_driver_t ftcu_driver(const can1_ftcu_driver_t frame_encoded) { + frame::decoded::can1::ftcu_driver_t frame_decoded; + frame_decoded.ftcu_apps_percent = can1_ftcu_driver_ftcu_apps_percent_decode(frame_encoded.ftcu_apps_percent); + frame_decoded.ftcu_brake_pressure_f = can1_ftcu_driver_ftcu_brake_pressure_f_decode(frame_encoded.ftcu_brake_pressure_f); + frame_decoded.ftcu_brake_pressure_r = can1_ftcu_driver_ftcu_brake_pressure_r_decode(frame_encoded.ftcu_brake_pressure_r); + frame_decoded.ftcu_steering_angle = can1_ftcu_driver_ftcu_steering_angle_decode(frame_encoded.ftcu_steering_angle); + frame_decoded.ftcu_speed = can1_ftcu_driver_ftcu_speed_decode(frame_encoded.ftcu_speed); + frame_decoded.ftcu_lapcounter = can1_ftcu_driver_ftcu_lapcounter_decode(frame_encoded.ftcu_lapcounter); + frame_decoded.ftcu_sectorcounter = can1_ftcu_driver_ftcu_sectorcounter_decode(frame_encoded.ftcu_sectorcounter); + return frame_decoded; +} + +inline frame::decoded::can1::tts_rr_t tts_rr(const can1_tts_rr_t frame_encoded) { + frame::decoded::can1::tts_rr_t frame_decoded; + frame_decoded.tts_outer_left = can1_tts_rr_tts_outer_left_decode(frame_encoded.tts_outer_left); + frame_decoded.tts_center_left = can1_tts_rr_tts_center_left_decode(frame_encoded.tts_center_left); + frame_decoded.tts_center = can1_tts_rr_tts_center_decode(frame_encoded.tts_center); + frame_decoded.tts_center_right = can1_tts_rr_tts_center_right_decode(frame_encoded.tts_center_right); + frame_decoded.tts_outet_right = can1_tts_rr_tts_outet_right_decode(frame_encoded.tts_outet_right); + frame_decoded.tts_status = can1_tts_rr_tts_status_decode(frame_encoded.tts_status); + return frame_decoded; +} + +inline frame::decoded::can1::tts_rl_t tts_rl(const can1_tts_rl_t frame_encoded) { + frame::decoded::can1::tts_rl_t frame_decoded; + frame_decoded.tts_outer_left = can1_tts_rl_tts_outer_left_decode(frame_encoded.tts_outer_left); + frame_decoded.tts_center_left = can1_tts_rl_tts_center_left_decode(frame_encoded.tts_center_left); + frame_decoded.tts_center = can1_tts_rl_tts_center_decode(frame_encoded.tts_center); + frame_decoded.tts_center_right = can1_tts_rl_tts_center_right_decode(frame_encoded.tts_center_right); + frame_decoded.tts_outer_right = can1_tts_rl_tts_outer_right_decode(frame_encoded.tts_outer_right); + frame_decoded.tts_status = can1_tts_rl_tts_status_decode(frame_encoded.tts_status); + return frame_decoded; +} + +inline frame::decoded::can1::tts_fr_t tts_fr(const can1_tts_fr_t frame_encoded) { + frame::decoded::can1::tts_fr_t frame_decoded; + frame_decoded.tts_outer_left = can1_tts_fr_tts_outer_left_decode(frame_encoded.tts_outer_left); + frame_decoded.tts_center_left = can1_tts_fr_tts_center_left_decode(frame_encoded.tts_center_left); + frame_decoded.tts_center = can1_tts_fr_tts_center_decode(frame_encoded.tts_center); + frame_decoded.tts_center_right = can1_tts_fr_tts_center_right_decode(frame_encoded.tts_center_right); + frame_decoded.tts_outer_right = can1_tts_fr_tts_outer_right_decode(frame_encoded.tts_outer_right); + frame_decoded.tts_status = can1_tts_fr_tts_status_decode(frame_encoded.tts_status); + return frame_decoded; +} + +inline frame::decoded::can1::tts_fl_t tts_fl(const can1_tts_fl_t frame_encoded) { + frame::decoded::can1::tts_fl_t frame_decoded; + frame_decoded.tts_outer_left = can1_tts_fl_tts_outer_left_decode(frame_encoded.tts_outer_left); + frame_decoded.tts_center_left = can1_tts_fl_tts_center_left_decode(frame_encoded.tts_center_left); + frame_decoded.tts_center = can1_tts_fl_tts_center_decode(frame_encoded.tts_center); + frame_decoded.tts_center_right = can1_tts_fl_tts_center_right_decode(frame_encoded.tts_center_right); + frame_decoded.tts_outer_right = can1_tts_fl_tts_outer_right_decode(frame_encoded.tts_outer_right); + frame_decoded.tts_status = can1_tts_fl_tts_status_decode(frame_encoded.tts_status); + return frame_decoded; +} + +inline frame::decoded::can1::stw_param_set_t stw_param_set(const can1_stw_param_set_t frame_encoded) { + frame::decoded::can1::stw_param_set_t frame_decoded; + frame_decoded.stw_param_set = can1_stw_param_set_stw_param_set_decode(frame_encoded.stw_param_set); + frame_decoded.stw_param_tc_slipref = can1_stw_param_set_stw_param_tc_slipref_decode(frame_encoded.stw_param_tc_slipref); + frame_decoded.stw_param_tc_mumax = can1_stw_param_set_stw_param_tc_mumax_decode(frame_encoded.stw_param_tc_mumax); + frame_decoded.stw_param_tc_i = can1_stw_param_set_stw_param_tc_i_decode(frame_encoded.stw_param_tc_i); + frame_decoded.stw_param_plim = can1_stw_param_set_stw_param_plim_decode(frame_encoded.stw_param_plim); + frame_decoded.stw_param_tlim = can1_stw_param_set_stw_param_tlim_decode(frame_encoded.stw_param_tlim); + frame_decoded.stw_param_tc_p = can1_stw_param_set_stw_param_tc_p_decode(frame_encoded.stw_param_tc_p); + frame_decoded.stw_param_reku = can1_stw_param_set_stw_param_reku_decode(frame_encoded.stw_param_reku); + frame_decoded.stw_param_tc_on = can1_stw_param_set_stw_param_tc_on_decode(frame_encoded.stw_param_tc_on); + frame_decoded.stw_param_tv_on = can1_stw_param_set_stw_param_tv_on_decode(frame_encoded.stw_param_tv_on); + frame_decoded.stw_param_discipline = can1_stw_param_set_stw_param_discipline_decode(frame_encoded.stw_param_discipline); + frame_decoded.stw_param_slim = can1_stw_param_set_stw_param_slim_decode(frame_encoded.stw_param_slim); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave0_status_t ams_slave0_status(const can1_ams_slave0_status_t frame_encoded) { + frame::decoded::can1::ams_slave0_status_t frame_decoded; + frame_decoded.ams_slave_status_error = can1_ams_slave0_status_ams_slave_status_error_decode(frame_encoded.ams_slave_status_error); + frame_decoded.ams_slave_status_id = can1_ams_slave0_status_ams_slave_status_id_decode(frame_encoded.ams_slave_status_id); + frame_decoded.ams_slave_status_temp_sensor = can1_ams_slave0_status_ams_slave_status_temp_sensor_decode(frame_encoded.ams_slave_status_temp_sensor); + frame_decoded.ams_slave_status_min_cell_volt = can1_ams_slave0_status_ams_slave_status_min_cell_volt_decode(frame_encoded.ams_slave_status_min_cell_volt); + frame_decoded.ams_slave_status_max_cell_volt = can1_ams_slave0_status_ams_slave_status_max_cell_volt_decode(frame_encoded.ams_slave_status_max_cell_volt); + frame_decoded.ams_slave_status_max_temp = can1_ams_slave0_status_ams_slave_status_max_temp_decode(frame_encoded.ams_slave_status_max_temp); + return frame_decoded; +} + +inline frame::decoded::can1::ssu_message_t ssu_message(const can1_ssu_message_t frame_encoded) { + frame::decoded::can1::ssu_message_t frame_decoded; + frame_decoded.ssu_pressure = can1_ssu_message_ssu_pressure_decode(frame_encoded.ssu_pressure); + frame_decoded.ssu_air_temp = can1_ssu_message_ssu_air_temp_decode(frame_encoded.ssu_air_temp); + return frame_decoded; +} + +inline frame::decoded::can1::ams_status_t ams_status(const can1_ams_status_t frame_encoded) { + frame::decoded::can1::ams_status_t frame_decoded; + frame_decoded.ams_state = can1_ams_status_ams_state_decode(frame_encoded.ams_state); + frame_decoded.sdc_closed = can1_ams_status_sdc_closed_decode(frame_encoded.sdc_closed); + frame_decoded.soc = can1_ams_status_soc_decode(frame_encoded.soc); + frame_decoded.min_cell_volt = can1_ams_status_min_cell_volt_decode(frame_encoded.min_cell_volt); + frame_decoded.max_cell_temp = can1_ams_status_max_cell_temp_decode(frame_encoded.max_cell_temp); + frame_decoded.ams_imd_state = can1_ams_status_ams_imd_state_decode(frame_encoded.ams_imd_state); + frame_decoded.ams_imd_ok = can1_ams_status_ams_imd_ok_decode(frame_encoded.ams_imd_ok); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave_panic_t ams_slave_panic(const can1_ams_slave_panic_t frame_encoded) { + frame::decoded::can1::ams_slave_panic_t frame_decoded; + frame_decoded.ams_slave_panic_slave_id = can1_ams_slave_panic_ams_slave_panic_slave_id_decode(frame_encoded.ams_slave_panic_slave_id); + frame_decoded.ams_slave_panic_kind = can1_ams_slave_panic_ams_slave_panic_kind_decode(frame_encoded.ams_slave_panic_kind); + frame_decoded.ams_slave_panic_arg = can1_ams_slave_panic_ams_slave_panic_arg_decode(frame_encoded.ams_slave_panic_arg); + return frame_decoded; +} + +inline frame::decoded::can1::ams_in_t ams_in(const can1_ams_in_t frame_encoded) { + frame::decoded::can1::ams_in_t frame_decoded; + frame_decoded.ts_activate = can1_ams_in_ts_activate_decode(frame_encoded.ts_activate); + frame_decoded.inverters_discharged = can1_ams_in_inverters_discharged_decode(frame_encoded.inverters_discharged); + frame_decoded.lap_number = can1_ams_in_lap_number_decode(frame_encoded.lap_number); + return frame_decoded; +} + +inline frame::decoded::can1::shunt_current_t shunt_current(const can1_shunt_current_t frame_encoded) { + frame::decoded::can1::shunt_current_t frame_decoded; + frame_decoded.shunt_current = can1_shunt_current_shunt_current_decode(frame_encoded.shunt_current); + return frame_decoded; +} + +inline frame::decoded::can1::shunt_voltage1_t shunt_voltage1(const can1_shunt_voltage1_t frame_encoded) { + frame::decoded::can1::shunt_voltage1_t frame_decoded; + frame_decoded.shunt_voltage1 = can1_shunt_voltage1_shunt_voltage1_decode(frame_encoded.shunt_voltage1); + return frame_decoded; +} + +inline frame::decoded::can1::shunt_voltage2_t shunt_voltage2(const can1_shunt_voltage2_t frame_encoded) { + frame::decoded::can1::shunt_voltage2_t frame_decoded; + frame_decoded.shunt_voltage2 = can1_shunt_voltage2_shunt_voltage2_decode(frame_encoded.shunt_voltage2); + return frame_decoded; +} + +inline frame::decoded::can1::shunt_voltage3_t shunt_voltage3(const can1_shunt_voltage3_t frame_encoded) { + frame::decoded::can1::shunt_voltage3_t frame_decoded; + frame_decoded.shunt_voltage3 = can1_shunt_voltage3_shunt_voltage3_decode(frame_encoded.shunt_voltage3); + return frame_decoded; +} + +inline frame::decoded::can1::shunt_temperature_t shunt_temperature(const can1_shunt_temperature_t frame_encoded) { + frame::decoded::can1::shunt_temperature_t frame_decoded; + frame_decoded.shunt_temperature = can1_shunt_temperature_shunt_temperature_decode(frame_encoded.shunt_temperature); + return frame_decoded; +} + +inline frame::decoded::can1::pdu_command_t pdu_command(const can1_pdu_command_t frame_encoded) { + frame::decoded::can1::pdu_command_t frame_decoded; + frame_decoded.pdu_enable_misc = can1_pdu_command_pdu_enable_misc_decode(frame_encoded.pdu_enable_misc); + frame_decoded.pdu_enable_sdc = can1_pdu_command_pdu_enable_sdc_decode(frame_encoded.pdu_enable_sdc); + frame_decoded.pdu_enable_inverter = can1_pdu_command_pdu_enable_inverter_decode(frame_encoded.pdu_enable_inverter); + frame_decoded.pdu_enable_ts_cooling = can1_pdu_command_pdu_enable_ts_cooling_decode(frame_encoded.pdu_enable_ts_cooling); + frame_decoded.pdu_enable_acc_cooling = can1_pdu_command_pdu_enable_acc_cooling_decode(frame_encoded.pdu_enable_acc_cooling); + frame_decoded.pdu_enable_lldar = can1_pdu_command_pdu_enable_lldar_decode(frame_encoded.pdu_enable_lldar); + frame_decoded.pdu_enable_drs = can1_pdu_command_pdu_enable_drs_decode(frame_encoded.pdu_enable_drs); + frame_decoded.pdu_enable_epsc = can1_pdu_command_pdu_enable_epsc_decode(frame_encoded.pdu_enable_epsc); + frame_decoded.pdu_enable_acu = can1_pdu_command_pdu_enable_acu_decode(frame_encoded.pdu_enable_acu); + frame_decoded.pdu_enable_ebs_a = can1_pdu_command_pdu_enable_ebs_a_decode(frame_encoded.pdu_enable_ebs_a); + frame_decoded.pdu_enable_ebs_b = can1_pdu_command_pdu_enable_ebs_b_decode(frame_encoded.pdu_enable_ebs_b); + frame_decoded.pdu_enable_ebs_c = can1_pdu_command_pdu_enable_ebs_c_decode(frame_encoded.pdu_enable_ebs_c); + return frame_decoded; +} + +inline frame::decoded::can1::pdu_response_t pdu_response(const can1_pdu_response_t frame_encoded) { + frame::decoded::can1::pdu_response_t frame_decoded; + frame_decoded.pdu_alwayson_tx = can1_pdu_response_pdu_alwayson_tx_decode(frame_encoded.pdu_alwayson_tx); + frame_decoded.pdu_shutdown_circuit_tx = can1_pdu_response_pdu_shutdown_circuit_tx_decode(frame_encoded.pdu_shutdown_circuit_tx); + frame_decoded.pdu_lidar_tx = can1_pdu_response_pdu_lidar_tx_decode(frame_encoded.pdu_lidar_tx); + frame_decoded.pdu_acu_tx = can1_pdu_response_pdu_acu_tx_decode(frame_encoded.pdu_acu_tx); + frame_decoded.pdu_servos_regler_tx = can1_pdu_response_pdu_servos_regler_tx_decode(frame_encoded.pdu_servos_regler_tx); + frame_decoded.pdu_inverter_tx = can1_pdu_response_pdu_inverter_tx_decode(frame_encoded.pdu_inverter_tx); + frame_decoded.pdu_misc_tx = can1_pdu_response_pdu_misc_tx_decode(frame_encoded.pdu_misc_tx); + frame_decoded.pdu_servo_tx = can1_pdu_response_pdu_servo_tx_decode(frame_encoded.pdu_servo_tx); + frame_decoded.pdu_ebs_valve_1_tx = can1_pdu_response_pdu_ebs_valve_1_tx_decode(frame_encoded.pdu_ebs_valve_1_tx); + frame_decoded.pdu_ebs_valve_2_tx = can1_pdu_response_pdu_ebs_valve_2_tx_decode(frame_encoded.pdu_ebs_valve_2_tx); + frame_decoded.pdu_cs_valve_tx = can1_pdu_response_pdu_cs_valve_tx_decode(frame_encoded.pdu_cs_valve_tx); + frame_decoded.pdu_aggregat_tx = can1_pdu_response_pdu_aggregat_tx_decode(frame_encoded.pdu_aggregat_tx); + frame_decoded.pdu_steering_tx = can1_pdu_response_pdu_steering_tx_decode(frame_encoded.pdu_steering_tx); + frame_decoded.pdu_pwm_tsac_fans = can1_pdu_response_pdu_pwm_tsac_fans_decode(frame_encoded.pdu_pwm_tsac_fans); + frame_decoded.pdu_pwm_radiatot_fans_tx = can1_pdu_response_pdu_pwm_radiatot_fans_tx_decode(frame_encoded.pdu_pwm_radiatot_fans_tx); + frame_decoded.pdu_pwm_aggregat = can1_pdu_response_pdu_pwm_aggregat_decode(frame_encoded.pdu_pwm_aggregat); + frame_decoded.pdu_pwm_pump = can1_pdu_response_pdu_pwm_pump_decode(frame_encoded.pdu_pwm_pump); + frame_decoded.pdu_heartbeat_ok_tx = can1_pdu_response_pdu_heartbeat_ok_tx_decode(frame_encoded.pdu_heartbeat_ok_tx); + return frame_decoded; +} + +inline frame::decoded::can1::as_mission_fb_t as_mission_fb(const can1_as_mission_fb_t frame_encoded) { + frame::decoded::can1::as_mission_fb_t frame_decoded; + frame_decoded.mission_selection = can1_as_mission_fb_mission_selection_decode(frame_encoded.mission_selection); + return frame_decoded; +} + +inline frame::decoded::can1::stw_mission_selected_t stw_mission_selected(const can1_stw_mission_selected_t frame_encoded) { + frame::decoded::can1::stw_mission_selected_t frame_decoded; + frame_decoded.mission_selection = can1_stw_mission_selected_mission_selection_decode(frame_encoded.mission_selection); + return frame_decoded; +} + +inline frame::decoded::can1::epsc_out_t epsc_out(const can1_epsc_out_t frame_encoded) { + frame::decoded::can1::epsc_out_t frame_decoded; + frame_decoded.epsc_measured_rpm = can1_epsc_out_epsc_measured_rpm_decode(frame_encoded.epsc_measured_rpm); + frame_decoded.epsc_measured_steering_angle = can1_epsc_out_epsc_measured_steering_angle_decode(frame_encoded.epsc_measured_steering_angle); + frame_decoded.epsc_measured_mosfet_temperature = can1_epsc_out_epsc_measured_mosfet_temperature_decode(frame_encoded.epsc_measured_mosfet_temperature); + frame_decoded.epsc_measured_voltage = can1_epsc_out_epsc_measured_voltage_decode(frame_encoded.epsc_measured_voltage); + frame_decoded.epsc_measured_current = can1_epsc_out_epsc_measured_current_decode(frame_encoded.epsc_measured_current); + return frame_decoded; +} + +inline frame::decoded::can1::epsc_steering_in_t epsc_steering_in(const can1_epsc_steering_in_t frame_encoded) { + frame::decoded::can1::epsc_steering_in_t frame_decoded; + frame_decoded.epsc_desired_steering_angle = can1_epsc_steering_in_epsc_desired_steering_angle_decode(frame_encoded.epsc_desired_steering_angle); + return frame_decoded; +} + +inline frame::decoded::can1::stw_buttons_t stw_buttons(const can1_stw_buttons_t frame_encoded) { + frame::decoded::can1::stw_buttons_t frame_decoded; + frame_decoded.stw_button_drs = can1_stw_buttons_stw_button_drs_decode(frame_encoded.stw_button_drs); + frame_decoded.stw_button_1 = can1_stw_buttons_stw_button_1_decode(frame_encoded.stw_button_1); + frame_decoded.stw_button_2 = can1_stw_buttons_stw_button_2_decode(frame_encoded.stw_button_2); + frame_decoded.stw_button_3 = can1_stw_buttons_stw_button_3_decode(frame_encoded.stw_button_3); + frame_decoded.stw_button_4 = can1_stw_buttons_stw_button_4_decode(frame_encoded.stw_button_4); + return frame_decoded; +} + +inline frame::decoded::can1::stw_status_t stw_status(const can1_stw_status_t frame_encoded) { + frame::decoded::can1::stw_status_t frame_decoded; + frame_decoded.lap_count = can1_stw_status_lap_count_decode(frame_encoded.lap_count); + frame_decoded.err_pdu = can1_stw_status_err_pdu_decode(frame_encoded.err_pdu); + frame_decoded.err_res = can1_stw_status_err_res_decode(frame_encoded.err_res); + frame_decoded.r2_d_progress = can1_stw_status_r2_d_progress_decode(frame_encoded.r2_d_progress); + frame_decoded.as_state_stw = can1_stw_status_as_state_stw_decode(frame_encoded.as_state_stw); + frame_decoded.err_as = can1_stw_status_err_as_decode(frame_encoded.err_as); + frame_decoded.err_app_sp = can1_stw_status_err_app_sp_decode(frame_encoded.err_app_sp); + frame_decoded.err_s_bspd = can1_stw_status_err_s_bspd_decode(frame_encoded.err_s_bspd); + frame_decoded.err_scs = can1_stw_status_err_scs_decode(frame_encoded.err_scs); + frame_decoded.err_con_mon = can1_stw_status_err_con_mon_decode(frame_encoded.err_con_mon); + frame_decoded.err_ini_chk = can1_stw_status_err_ini_chk_decode(frame_encoded.err_ini_chk); + frame_decoded.err_inv2 = can1_stw_status_err_inv2_decode(frame_encoded.err_inv2); + frame_decoded.err_inv1 = can1_stw_status_err_inv1_decode(frame_encoded.err_inv1); + frame_decoded.err_ams = can1_stw_status_err_ams_decode(frame_encoded.err_ams); + frame_decoded.err_sdc = can1_stw_status_err_sdc_decode(frame_encoded.err_sdc); + frame_decoded.sdc_status = can1_stw_status_sdc_status_decode(frame_encoded.sdc_status); + frame_decoded.inv2_ready = can1_stw_status_inv2_ready_decode(frame_encoded.inv2_ready); + frame_decoded.inv1_ready = can1_stw_status_inv1_ready_decode(frame_encoded.inv1_ready); + frame_decoded.energy_per_lap = can1_stw_status_energy_per_lap_decode(frame_encoded.energy_per_lap); + frame_decoded.ini_chk_state = can1_stw_status_ini_chk_state_decode(frame_encoded.ini_chk_state); + return frame_decoded; +} + +inline frame::decoded::can1::pdu_current_1_t pdu_current_1(const can1_pdu_current_1_t frame_encoded) { + frame::decoded::can1::pdu_current_1_t frame_decoded; + frame_decoded.pdu_always_on_current = can1_pdu_current_1_pdu_always_on_current_decode(frame_encoded.pdu_always_on_current); + frame_decoded.pdu_lvms_current = can1_pdu_current_1_pdu_lvms_current_decode(frame_encoded.pdu_lvms_current); + frame_decoded.pdu_asms_current = can1_pdu_current_1_pdu_asms_current_decode(frame_encoded.pdu_asms_current); + frame_decoded.pdu_misc_current = can1_pdu_current_1_pdu_misc_current_decode(frame_encoded.pdu_misc_current); + return frame_decoded; +} + +inline frame::decoded::can1::pdu_current_2_t pdu_current_2(const can1_pdu_current_2_t frame_encoded) { + frame::decoded::can1::pdu_current_2_t frame_decoded; + frame_decoded.pdu_sdc_current = can1_pdu_current_2_pdu_sdc_current_decode(frame_encoded.pdu_sdc_current); + frame_decoded.pdu_inverter_current = can1_pdu_current_2_pdu_inverter_current_decode(frame_encoded.pdu_inverter_current); + frame_decoded.pdu_ts_cooling_current = can1_pdu_current_2_pdu_ts_cooling_current_decode(frame_encoded.pdu_ts_cooling_current); + frame_decoded.pdu_acc_cooling_current = can1_pdu_current_2_pdu_acc_cooling_current_decode(frame_encoded.pdu_acc_cooling_current); + return frame_decoded; +} + +inline frame::decoded::can1::pdu_current_3_t pdu_current_3(const can1_pdu_current_3_t frame_encoded) { + frame::decoded::can1::pdu_current_3_t frame_decoded; + frame_decoded.pdu_lidar_current = can1_pdu_current_3_pdu_lidar_current_decode(frame_encoded.pdu_lidar_current); + frame_decoded.pdu_drs_current = can1_pdu_current_3_pdu_drs_current_decode(frame_encoded.pdu_drs_current); + frame_decoded.pdu_epsc_current = can1_pdu_current_3_pdu_epsc_current_decode(frame_encoded.pdu_epsc_current); + frame_decoded.pdu_acu_current = can1_pdu_current_3_pdu_acu_current_decode(frame_encoded.pdu_acu_current); + return frame_decoded; +} + +inline frame::decoded::can1::pdu_current_4_t pdu_current_4(const can1_pdu_current_4_t frame_encoded) { + frame::decoded::can1::pdu_current_4_t frame_decoded; + frame_decoded.pdu_ebs_a_current = can1_pdu_current_4_pdu_ebs_a_current_decode(frame_encoded.pdu_ebs_a_current); + frame_decoded.pdu_ebs_b_current = can1_pdu_current_4_pdu_ebs_b_current_decode(frame_encoded.pdu_ebs_b_current); + return frame_decoded; +} + +inline frame::decoded::can1::epsc_config_in_t epsc_config_in(const can1_epsc_config_in_t frame_encoded) { + frame::decoded::can1::epsc_config_in_t frame_decoded; + frame_decoded.epsc_config_p_gain = can1_epsc_config_in_epsc_config_p_gain_decode(frame_encoded.epsc_config_p_gain); + frame_decoded.epsc_config_i_gain = can1_epsc_config_in_epsc_config_i_gain_decode(frame_encoded.epsc_config_i_gain); + frame_decoded.epsc_config_d_gain = can1_epsc_config_in_epsc_config_d_gain_decode(frame_encoded.epsc_config_d_gain); + return frame_decoded; +} + +} +} + +// callback structure +namespace callback { +namespace can1 { + inline std::function inverter_velocity = NULL; + inline std::function inverter_errors_warnings = NULL; + inline std::function inverter_torque_actual_cw = NULL; + inline std::function inverter_temperatur = NULL; + inline std::function inverter_torque_wanted = NULL; + inline std::function sdo_telemetrie_rx_node1 = NULL; + inline std::function sdo_telemetrie_rx_node2 = NULL; + inline std::function sdo_telemetrie_tx = NULL; + inline std::function laptop_sdo_node = NULL; + inline std::function x_sens_long_lat = NULL; + inline std::function x_sens_rateofturn = NULL; + inline std::function x_sens_acceleration = NULL; + inline std::function x_sens_velocity = NULL; + inline std::function telemetrie = NULL; + inline std::function override_powermap = NULL; + inline std::function override_laptop_2 = NULL; + inline std::function override_epsc_cooling = NULL; + inline std::function override_laptop = NULL; + inline std::function apps_override = NULL; + inline std::function ftcu_damper = NULL; + inline std::function ftcu_param_confirm = NULL; + inline std::function sensornode_f_10_hz = NULL; + inline std::function sensornode_f_100_hz_1 = NULL; + inline std::function sensornode_f_100_hz_2 = NULL; + inline std::function sensornode_f_1k_hz = NULL; + inline std::function sensornode_r_10_hz = NULL; + inline std::function sensornode_r_100_hz = NULL; + inline std::function sensornode_r_1k_hz = NULL; + inline std::function pwm_duty_cycle = NULL; + inline std::function pwm_config = NULL; + inline std::function dashboard_in = NULL; + inline std::function ams_slave1_status = NULL; + inline std::function ams_slave2_log0 = NULL; + inline std::function ams_slave2_log1 = NULL; + inline std::function ams_slave2_log2 = NULL; + inline std::function ams_slave2_log3 = NULL; + inline std::function ams_slave2_log4 = NULL; + inline std::function ams_slave2_log5 = NULL; + inline std::function ams_slave5_log6 = NULL; + inline std::function ams_slave4_log6 = NULL; + inline std::function ams_slave3_log6 = NULL; + inline std::function ams_slave2_log6 = NULL; + inline std::function ams_slave1_log6 = NULL; + inline std::function ams_slave5_log5 = NULL; + inline std::function ams_slave4_log5 = NULL; + inline std::function ams_slave3_log5 = NULL; + inline std::function ams_slave1_log5 = NULL; + inline std::function ams_slave5_log4 = NULL; + inline std::function ams_slave4_log4 = NULL; + inline std::function ams_slave3_log4 = NULL; + inline std::function ams_slave1_log4 = NULL; + inline std::function ams_slave5_log3 = NULL; + inline std::function ams_slave4_log3 = NULL; + inline std::function ams_slave3_log3 = NULL; + inline std::function ams_slave1_log3 = NULL; + inline std::function ams_slave5_log2 = NULL; + inline std::function ams_slave4_log2 = NULL; + inline std::function ams_slave3_log2 = NULL; + inline std::function ams_slave1_log2 = NULL; + inline std::function ams_slave5_log1 = NULL; + inline std::function ams_slave4_log1 = NULL; + inline std::function ams_slave3_log1 = NULL; + inline std::function ams_slave1_log1 = NULL; + inline std::function ams_slave5_log0 = NULL; + inline std::function ams_slave4_log0 = NULL; + inline std::function ams_slave3_log0 = NULL; + inline std::function ams_slave1_log0 = NULL; + inline std::function pdu_heartbeat = NULL; + inline std::function ftcu_pneumatik = NULL; + inline std::function acu_tx_commands = NULL; + inline std::function acu_rx_commands = NULL; + inline std::function acu_rx = NULL; + inline std::function ams_slave0_log0 = NULL; + inline std::function ams_slave0_log1 = NULL; + inline std::function ams_slave0_log3 = NULL; + inline std::function ams_slave0_log4 = NULL; + inline std::function ams_slave0_log5 = NULL; + inline std::function ams_slave0_log6 = NULL; + inline std::function acu_tx = NULL; + inline std::function ams_slave5_status = NULL; + inline std::function ams_slave4_status = NULL; + inline std::function ams_slave3_status = NULL; + inline std::function ams_slave2_status = NULL; + inline std::function ams_error = NULL; + inline std::function ftcu_cooling = NULL; + inline std::function ftcu_brake_t = NULL; + inline std::function ftcu_wheelspeed = NULL; + inline std::function ftcu_timings = NULL; + inline std::function ftcu_driver = NULL; + inline std::function tts_rr = NULL; + inline std::function tts_rl = NULL; + inline std::function tts_fr = NULL; + inline std::function tts_fl = NULL; + inline std::function stw_param_set = NULL; + inline std::function ams_slave0_status = NULL; + inline std::function ssu_message = NULL; + inline std::function ams_status = NULL; + inline std::function ams_slave_panic = NULL; + inline std::function ams_in = NULL; + inline std::function shunt_current = NULL; + inline std::function shunt_voltage1 = NULL; + inline std::function shunt_voltage2 = NULL; + inline std::function shunt_voltage3 = NULL; + inline std::function shunt_temperature = NULL; + inline std::function pdu_command = NULL; + inline std::function pdu_response = NULL; + inline std::function as_mission_fb = NULL; + inline std::function stw_mission_selected = NULL; + inline std::function epsc_out = NULL; + inline std::function epsc_steering_in = NULL; + inline std::function stw_buttons = NULL; + inline std::function stw_status = NULL; + inline std::function pdu_current_1 = NULL; + inline std::function pdu_current_2 = NULL; + inline std::function pdu_current_3 = NULL; + inline std::function pdu_current_4 = NULL; + inline std::function epsc_config_in = NULL; +} +} +} + + +#endif // _ENDEC_HPP_ + diff --git a/ros2_ws/src/ft_can_transceiver_lib/include/ft_can_transceiver_lib/transceiver.h b/ros2_ws/src/ft_can_transceiver_lib/include/ft_can_transceiver_lib/transceiver.h new file mode 100644 index 0000000..c146da6 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/include/ft_can_transceiver_lib/transceiver.h @@ -0,0 +1,275 @@ +#ifndef _TRANSCEIVER_H_ +#define _TRANSCEIVER_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "endec.hpp" + +#define STANDARD_TIMEOUT 10000 + +namespace canlib { +class Transceiver { +public: + Transceiver(); + Transceiver(std::string device_name, std::vector filters); + ~Transceiver(); + + virtual void transmit(canlib::frame::decoded::can1::inverter_velocity_t inverter_velocity); + virtual void transmit(canlib::frame::decoded::can1::inverter_errors_warnings_t inverter_errors_warnings); + virtual void transmit(canlib::frame::decoded::can1::inverter_torque_actual_cw_t inverter_torque_actual_cw); + virtual void transmit(canlib::frame::decoded::can1::inverter_temperatur_t inverter_temperatur); + virtual void transmit(canlib::frame::decoded::can1::inverter_torque_wanted_t inverter_torque_wanted); + virtual void transmit(canlib::frame::decoded::can1::sdo_telemetrie_rx_node1_t sdo_telemetrie_rx_node1); + virtual void transmit(canlib::frame::decoded::can1::sdo_telemetrie_rx_node2_t sdo_telemetrie_rx_node2); + virtual void transmit(canlib::frame::decoded::can1::sdo_telemetrie_tx_t sdo_telemetrie_tx); + virtual void transmit(canlib::frame::decoded::can1::laptop_sdo_node_t laptop_sdo_node); + virtual void transmit(canlib::frame::decoded::can1::x_sens_long_lat_t x_sens_long_lat); + virtual void transmit(canlib::frame::decoded::can1::x_sens_rateofturn_t x_sens_rateofturn); + virtual void transmit(canlib::frame::decoded::can1::x_sens_acceleration_t x_sens_acceleration); + virtual void transmit(canlib::frame::decoded::can1::x_sens_velocity_t x_sens_velocity); + virtual void transmit(canlib::frame::decoded::can1::telemetrie_t telemetrie); + virtual void transmit(canlib::frame::decoded::can1::override_powermap_t override_powermap); + virtual void transmit(canlib::frame::decoded::can1::override_laptop_2_t override_laptop_2); + virtual void transmit(canlib::frame::decoded::can1::override_epsc_cooling_t override_epsc_cooling); + virtual void transmit(canlib::frame::decoded::can1::override_laptop_t override_laptop); + virtual void transmit(canlib::frame::decoded::can1::apps_override_t apps_override); + virtual void transmit(canlib::frame::decoded::can1::ftcu_damper_t ftcu_damper); + virtual void transmit(canlib::frame::decoded::can1::ftcu_param_confirm_t ftcu_param_confirm); + virtual void transmit(canlib::frame::decoded::can1::sensornode_f_10_hz_t sensornode_f_10_hz); + virtual void transmit(canlib::frame::decoded::can1::sensornode_f_100_hz_1_t sensornode_f_100_hz_1); + virtual void transmit(canlib::frame::decoded::can1::sensornode_f_100_hz_2_t sensornode_f_100_hz_2); + virtual void transmit(canlib::frame::decoded::can1::sensornode_f_1k_hz_t sensornode_f_1k_hz); + virtual void transmit(canlib::frame::decoded::can1::sensornode_r_10_hz_t sensornode_r_10_hz); + virtual void transmit(canlib::frame::decoded::can1::sensornode_r_100_hz_t sensornode_r_100_hz); + virtual void transmit(canlib::frame::decoded::can1::sensornode_r_1k_hz_t sensornode_r_1k_hz); + virtual void transmit(canlib::frame::decoded::can1::pwm_duty_cycle_t pwm_duty_cycle); + virtual void transmit(canlib::frame::decoded::can1::pwm_config_t pwm_config); + virtual void transmit(canlib::frame::decoded::can1::dashboard_in_t dashboard_in); + virtual void transmit(canlib::frame::decoded::can1::ams_slave1_status_t ams_slave1_status); + virtual void transmit(canlib::frame::decoded::can1::ams_slave2_log0_t ams_slave2_log0); + virtual void transmit(canlib::frame::decoded::can1::ams_slave2_log1_t ams_slave2_log1); + virtual void transmit(canlib::frame::decoded::can1::ams_slave2_log2_t ams_slave2_log2); + virtual void transmit(canlib::frame::decoded::can1::ams_slave2_log3_t ams_slave2_log3); + virtual void transmit(canlib::frame::decoded::can1::ams_slave2_log4_t ams_slave2_log4); + virtual void transmit(canlib::frame::decoded::can1::ams_slave2_log5_t ams_slave2_log5); + virtual void transmit(canlib::frame::decoded::can1::ams_slave5_log6_t ams_slave5_log6); + virtual void transmit(canlib::frame::decoded::can1::ams_slave4_log6_t ams_slave4_log6); + virtual void transmit(canlib::frame::decoded::can1::ams_slave3_log6_t ams_slave3_log6); + virtual void transmit(canlib::frame::decoded::can1::ams_slave2_log6_t ams_slave2_log6); + virtual void transmit(canlib::frame::decoded::can1::ams_slave1_log6_t ams_slave1_log6); + virtual void transmit(canlib::frame::decoded::can1::ams_slave5_log5_t ams_slave5_log5); + virtual void transmit(canlib::frame::decoded::can1::ams_slave4_log5_t ams_slave4_log5); + virtual void transmit(canlib::frame::decoded::can1::ams_slave3_log5_t ams_slave3_log5); + virtual void transmit(canlib::frame::decoded::can1::ams_slave1_log5_t ams_slave1_log5); + virtual void transmit(canlib::frame::decoded::can1::ams_slave5_log4_t ams_slave5_log4); + virtual void transmit(canlib::frame::decoded::can1::ams_slave4_log4_t ams_slave4_log4); + virtual void transmit(canlib::frame::decoded::can1::ams_slave3_log4_t ams_slave3_log4); + virtual void transmit(canlib::frame::decoded::can1::ams_slave1_log4_t ams_slave1_log4); + virtual void transmit(canlib::frame::decoded::can1::ams_slave5_log3_t ams_slave5_log3); + virtual void transmit(canlib::frame::decoded::can1::ams_slave4_log3_t ams_slave4_log3); + virtual void transmit(canlib::frame::decoded::can1::ams_slave3_log3_t ams_slave3_log3); + virtual void transmit(canlib::frame::decoded::can1::ams_slave1_log3_t ams_slave1_log3); + virtual void transmit(canlib::frame::decoded::can1::ams_slave5_log2_t ams_slave5_log2); + virtual void transmit(canlib::frame::decoded::can1::ams_slave4_log2_t ams_slave4_log2); + virtual void transmit(canlib::frame::decoded::can1::ams_slave3_log2_t ams_slave3_log2); + virtual void transmit(canlib::frame::decoded::can1::ams_slave1_log2_t ams_slave1_log2); + virtual void transmit(canlib::frame::decoded::can1::ams_slave5_log1_t ams_slave5_log1); + virtual void transmit(canlib::frame::decoded::can1::ams_slave4_log1_t ams_slave4_log1); + virtual void transmit(canlib::frame::decoded::can1::ams_slave3_log1_t ams_slave3_log1); + virtual void transmit(canlib::frame::decoded::can1::ams_slave1_log1_t ams_slave1_log1); + virtual void transmit(canlib::frame::decoded::can1::ams_slave5_log0_t ams_slave5_log0); + virtual void transmit(canlib::frame::decoded::can1::ams_slave4_log0_t ams_slave4_log0); + virtual void transmit(canlib::frame::decoded::can1::ams_slave3_log0_t ams_slave3_log0); + virtual void transmit(canlib::frame::decoded::can1::ams_slave1_log0_t ams_slave1_log0); + virtual void transmit(canlib::frame::decoded::can1::pdu_heartbeat_t pdu_heartbeat); + virtual void transmit(canlib::frame::decoded::can1::ftcu_pneumatik_t ftcu_pneumatik); + virtual void transmit(canlib::frame::decoded::can1::acu_tx_commands_t acu_tx_commands); + virtual void transmit(canlib::frame::decoded::can1::acu_rx_commands_t acu_rx_commands); + virtual void transmit(canlib::frame::decoded::can1::acu_rx_t acu_rx); + virtual void transmit(canlib::frame::decoded::can1::ams_slave0_log0_t ams_slave0_log0); + virtual void transmit(canlib::frame::decoded::can1::ams_slave0_log1_t ams_slave0_log1); + virtual void transmit(canlib::frame::decoded::can1::ams_slave0_log3_t ams_slave0_log3); + virtual void transmit(canlib::frame::decoded::can1::ams_slave0_log4_t ams_slave0_log4); + virtual void transmit(canlib::frame::decoded::can1::ams_slave0_log5_t ams_slave0_log5); + virtual void transmit(canlib::frame::decoded::can1::ams_slave0_log6_t ams_slave0_log6); + virtual void transmit(canlib::frame::decoded::can1::acu_tx_t acu_tx); + virtual void transmit(canlib::frame::decoded::can1::ams_slave5_status_t ams_slave5_status); + virtual void transmit(canlib::frame::decoded::can1::ams_slave4_status_t ams_slave4_status); + virtual void transmit(canlib::frame::decoded::can1::ams_slave3_status_t ams_slave3_status); + virtual void transmit(canlib::frame::decoded::can1::ams_slave2_status_t ams_slave2_status); + virtual void transmit(canlib::frame::decoded::can1::ams_error_t ams_error); + virtual void transmit(canlib::frame::decoded::can1::ftcu_cooling_t ftcu_cooling); + virtual void transmit(canlib::frame::decoded::can1::ftcu_brake_t_t ftcu_brake_t); + virtual void transmit(canlib::frame::decoded::can1::ftcu_wheelspeed_t ftcu_wheelspeed); + virtual void transmit(canlib::frame::decoded::can1::ftcu_timings_t ftcu_timings); + virtual void transmit(canlib::frame::decoded::can1::ftcu_driver_t ftcu_driver); + virtual void transmit(canlib::frame::decoded::can1::tts_rr_t tts_rr); + virtual void transmit(canlib::frame::decoded::can1::tts_rl_t tts_rl); + virtual void transmit(canlib::frame::decoded::can1::tts_fr_t tts_fr); + virtual void transmit(canlib::frame::decoded::can1::tts_fl_t tts_fl); + virtual void transmit(canlib::frame::decoded::can1::stw_param_set_t stw_param_set); + virtual void transmit(canlib::frame::decoded::can1::ams_slave0_status_t ams_slave0_status); + virtual void transmit(canlib::frame::decoded::can1::ssu_message_t ssu_message); + virtual void transmit(canlib::frame::decoded::can1::ams_status_t ams_status); + virtual void transmit(canlib::frame::decoded::can1::ams_slave_panic_t ams_slave_panic); + virtual void transmit(canlib::frame::decoded::can1::ams_in_t ams_in); + virtual void transmit(canlib::frame::decoded::can1::shunt_current_t shunt_current); + virtual void transmit(canlib::frame::decoded::can1::shunt_voltage1_t shunt_voltage1); + virtual void transmit(canlib::frame::decoded::can1::shunt_voltage2_t shunt_voltage2); + virtual void transmit(canlib::frame::decoded::can1::shunt_voltage3_t shunt_voltage3); + virtual void transmit(canlib::frame::decoded::can1::shunt_temperature_t shunt_temperature); + virtual void transmit(canlib::frame::decoded::can1::pdu_command_t pdu_command); + virtual void transmit(canlib::frame::decoded::can1::pdu_response_t pdu_response); + virtual void transmit(canlib::frame::decoded::can1::as_mission_fb_t as_mission_fb); + virtual void transmit(canlib::frame::decoded::can1::stw_mission_selected_t stw_mission_selected); + virtual void transmit(canlib::frame::decoded::can1::epsc_out_t epsc_out); + virtual void transmit(canlib::frame::decoded::can1::epsc_steering_in_t epsc_steering_in); + virtual void transmit(canlib::frame::decoded::can1::stw_buttons_t stw_buttons); + virtual void transmit(canlib::frame::decoded::can1::stw_status_t stw_status); + virtual void transmit(canlib::frame::decoded::can1::pdu_current_1_t pdu_current_1); + virtual void transmit(canlib::frame::decoded::can1::pdu_current_2_t pdu_current_2); + virtual void transmit(canlib::frame::decoded::can1::pdu_current_3_t pdu_current_3); + virtual void transmit(canlib::frame::decoded::can1::pdu_current_4_t pdu_current_4); + virtual void transmit(canlib::frame::decoded::can1::epsc_config_in_t epsc_config_in); + + virtual bool receive(int timeout_us = STANDARD_TIMEOUT); + +private: + virtual bool read(struct can_frame &frame, int timeout_usec); + + can1_inverter_velocity_t can1_inverter_velocity_frame; + can1_inverter_errors_warnings_t can1_inverter_errors_warnings_frame; + can1_inverter_torque_actual_cw_t can1_inverter_torque_actual_cw_frame; + can1_inverter_temperatur_t can1_inverter_temperatur_frame; + can1_inverter_torque_wanted_t can1_inverter_torque_wanted_frame; + can1_sdo_telemetrie_rx_node1_t can1_sdo_telemetrie_rx_node1_frame; + can1_sdo_telemetrie_rx_node2_t can1_sdo_telemetrie_rx_node2_frame; + can1_sdo_telemetrie_tx_t can1_sdo_telemetrie_tx_frame; + can1_laptop_sdo_node_t can1_laptop_sdo_node_frame; + can1_x_sens_long_lat_t can1_x_sens_long_lat_frame; + can1_x_sens_rateofturn_t can1_x_sens_rateofturn_frame; + can1_x_sens_acceleration_t can1_x_sens_acceleration_frame; + can1_x_sens_velocity_t can1_x_sens_velocity_frame; + can1_telemetrie_t can1_telemetrie_frame; + can1_override_powermap_t can1_override_powermap_frame; + can1_override_laptop_2_t can1_override_laptop_2_frame; + can1_override_epsc_cooling_t can1_override_epsc_cooling_frame; + can1_override_laptop_t can1_override_laptop_frame; + can1_apps_override_t can1_apps_override_frame; + can1_ftcu_damper_t can1_ftcu_damper_frame; + can1_ftcu_param_confirm_t can1_ftcu_param_confirm_frame; + can1_sensornode_f_10_hz_t can1_sensornode_f_10_hz_frame; + can1_sensornode_f_100_hz_1_t can1_sensornode_f_100_hz_1_frame; + can1_sensornode_f_100_hz_2_t can1_sensornode_f_100_hz_2_frame; + can1_sensornode_f_1k_hz_t can1_sensornode_f_1k_hz_frame; + can1_sensornode_r_10_hz_t can1_sensornode_r_10_hz_frame; + can1_sensornode_r_100_hz_t can1_sensornode_r_100_hz_frame; + can1_sensornode_r_1k_hz_t can1_sensornode_r_1k_hz_frame; + can1_pwm_duty_cycle_t can1_pwm_duty_cycle_frame; + can1_pwm_config_t can1_pwm_config_frame; + can1_dashboard_in_t can1_dashboard_in_frame; + can1_ams_slave1_status_t can1_ams_slave1_status_frame; + can1_ams_slave2_log0_t can1_ams_slave2_log0_frame; + can1_ams_slave2_log1_t can1_ams_slave2_log1_frame; + can1_ams_slave2_log2_t can1_ams_slave2_log2_frame; + can1_ams_slave2_log3_t can1_ams_slave2_log3_frame; + can1_ams_slave2_log4_t can1_ams_slave2_log4_frame; + can1_ams_slave2_log5_t can1_ams_slave2_log5_frame; + can1_ams_slave5_log6_t can1_ams_slave5_log6_frame; + can1_ams_slave4_log6_t can1_ams_slave4_log6_frame; + can1_ams_slave3_log6_t can1_ams_slave3_log6_frame; + can1_ams_slave2_log6_t can1_ams_slave2_log6_frame; + can1_ams_slave1_log6_t can1_ams_slave1_log6_frame; + can1_ams_slave5_log5_t can1_ams_slave5_log5_frame; + can1_ams_slave4_log5_t can1_ams_slave4_log5_frame; + can1_ams_slave3_log5_t can1_ams_slave3_log5_frame; + can1_ams_slave1_log5_t can1_ams_slave1_log5_frame; + can1_ams_slave5_log4_t can1_ams_slave5_log4_frame; + can1_ams_slave4_log4_t can1_ams_slave4_log4_frame; + can1_ams_slave3_log4_t can1_ams_slave3_log4_frame; + can1_ams_slave1_log4_t can1_ams_slave1_log4_frame; + can1_ams_slave5_log3_t can1_ams_slave5_log3_frame; + can1_ams_slave4_log3_t can1_ams_slave4_log3_frame; + can1_ams_slave3_log3_t can1_ams_slave3_log3_frame; + can1_ams_slave1_log3_t can1_ams_slave1_log3_frame; + can1_ams_slave5_log2_t can1_ams_slave5_log2_frame; + can1_ams_slave4_log2_t can1_ams_slave4_log2_frame; + can1_ams_slave3_log2_t can1_ams_slave3_log2_frame; + can1_ams_slave1_log2_t can1_ams_slave1_log2_frame; + can1_ams_slave5_log1_t can1_ams_slave5_log1_frame; + can1_ams_slave4_log1_t can1_ams_slave4_log1_frame; + can1_ams_slave3_log1_t can1_ams_slave3_log1_frame; + can1_ams_slave1_log1_t can1_ams_slave1_log1_frame; + can1_ams_slave5_log0_t can1_ams_slave5_log0_frame; + can1_ams_slave4_log0_t can1_ams_slave4_log0_frame; + can1_ams_slave3_log0_t can1_ams_slave3_log0_frame; + can1_ams_slave1_log0_t can1_ams_slave1_log0_frame; + can1_pdu_heartbeat_t can1_pdu_heartbeat_frame; + can1_ftcu_pneumatik_t can1_ftcu_pneumatik_frame; + can1_acu_tx_commands_t can1_acu_tx_commands_frame; + can1_acu_rx_commands_t can1_acu_rx_commands_frame; + can1_acu_rx_t can1_acu_rx_frame; + can1_ams_slave0_log0_t can1_ams_slave0_log0_frame; + can1_ams_slave0_log1_t can1_ams_slave0_log1_frame; + can1_ams_slave0_log3_t can1_ams_slave0_log3_frame; + can1_ams_slave0_log4_t can1_ams_slave0_log4_frame; + can1_ams_slave0_log5_t can1_ams_slave0_log5_frame; + can1_ams_slave0_log6_t can1_ams_slave0_log6_frame; + can1_acu_tx_t can1_acu_tx_frame; + can1_ams_slave5_status_t can1_ams_slave5_status_frame; + can1_ams_slave4_status_t can1_ams_slave4_status_frame; + can1_ams_slave3_status_t can1_ams_slave3_status_frame; + can1_ams_slave2_status_t can1_ams_slave2_status_frame; + can1_ams_error_t can1_ams_error_frame; + can1_ftcu_cooling_t can1_ftcu_cooling_frame; + can1_ftcu_brake_t_t can1_ftcu_brake_t_frame; + can1_ftcu_wheelspeed_t can1_ftcu_wheelspeed_frame; + can1_ftcu_timings_t can1_ftcu_timings_frame; + can1_ftcu_driver_t can1_ftcu_driver_frame; + can1_tts_rr_t can1_tts_rr_frame; + can1_tts_rl_t can1_tts_rl_frame; + can1_tts_fr_t can1_tts_fr_frame; + can1_tts_fl_t can1_tts_fl_frame; + can1_stw_param_set_t can1_stw_param_set_frame; + can1_ams_slave0_status_t can1_ams_slave0_status_frame; + can1_ssu_message_t can1_ssu_message_frame; + can1_ams_status_t can1_ams_status_frame; + can1_ams_slave_panic_t can1_ams_slave_panic_frame; + can1_ams_in_t can1_ams_in_frame; + can1_shunt_current_t can1_shunt_current_frame; + can1_shunt_voltage1_t can1_shunt_voltage1_frame; + can1_shunt_voltage2_t can1_shunt_voltage2_frame; + can1_shunt_voltage3_t can1_shunt_voltage3_frame; + can1_shunt_temperature_t can1_shunt_temperature_frame; + can1_pdu_command_t can1_pdu_command_frame; + can1_pdu_response_t can1_pdu_response_frame; + can1_as_mission_fb_t can1_as_mission_fb_frame; + can1_stw_mission_selected_t can1_stw_mission_selected_frame; + can1_epsc_out_t can1_epsc_out_frame; + can1_epsc_steering_in_t can1_epsc_steering_in_frame; + can1_stw_buttons_t can1_stw_buttons_frame; + can1_stw_status_t can1_stw_status_frame; + can1_pdu_current_1_t can1_pdu_current_1_frame; + can1_pdu_current_2_t can1_pdu_current_2_frame; + can1_pdu_current_3_t can1_pdu_current_3_frame; + can1_pdu_current_4_t can1_pdu_current_4_frame; + can1_epsc_config_in_t can1_epsc_config_in_frame; + + struct can_frame frame; + int socket_instance; +}; + +} + +#endif // _TRANSCEIVER_H_ diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/.colcon_install_layout b/ros2_ws/src/ft_can_transceiver_lib/install/.colcon_install_layout new file mode 100644 index 0000000..3aad533 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/.colcon_install_layout @@ -0,0 +1 @@ +isolated diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/COLCON_IGNORE b/ros2_ws/src/ft_can_transceiver_lib/install/COLCON_IGNORE new file mode 100644 index 0000000..e69de29 diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/_local_setup_util_ps1.py b/ros2_ws/src/ft_can_transceiver_lib/install/_local_setup_util_ps1.py new file mode 100644 index 0000000..3c6d9e8 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/_local_setup_util_ps1.py @@ -0,0 +1,407 @@ +# Copyright 2016-2019 Dirk Thomas +# Licensed under the Apache License, Version 2.0 + +import argparse +from collections import OrderedDict +import os +from pathlib import Path +import sys + + +FORMAT_STR_COMMENT_LINE = '# {comment}' +FORMAT_STR_SET_ENV_VAR = 'Set-Item -Path "Env:{name}" -Value "{value}"' +FORMAT_STR_USE_ENV_VAR = '$env:{name}' +FORMAT_STR_INVOKE_SCRIPT = '_colcon_prefix_powershell_source_script "{script_path}"' # noqa: E501 +FORMAT_STR_REMOVE_LEADING_SEPARATOR = '' # noqa: E501 +FORMAT_STR_REMOVE_TRAILING_SEPARATOR = '' # noqa: E501 + +DSV_TYPE_APPEND_NON_DUPLICATE = 'append-non-duplicate' +DSV_TYPE_PREPEND_NON_DUPLICATE = 'prepend-non-duplicate' +DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS = 'prepend-non-duplicate-if-exists' +DSV_TYPE_SET = 'set' +DSV_TYPE_SET_IF_UNSET = 'set-if-unset' +DSV_TYPE_SOURCE = 'source' + + +def main(argv=sys.argv[1:]): # noqa: D103 + parser = argparse.ArgumentParser( + description='Output shell commands for the packages in topological ' + 'order') + parser.add_argument( + 'primary_extension', + help='The file extension of the primary shell') + parser.add_argument( + 'additional_extension', nargs='?', + help='The additional file extension to be considered') + parser.add_argument( + '--merged-install', action='store_true', + help='All install prefixes are merged into a single location') + args = parser.parse_args(argv) + + packages = get_packages(Path(__file__).parent, args.merged_install) + + ordered_packages = order_packages(packages) + for pkg_name in ordered_packages: + if _include_comments(): + print( + FORMAT_STR_COMMENT_LINE.format_map( + {'comment': 'Package: ' + pkg_name})) + prefix = os.path.abspath(os.path.dirname(__file__)) + if not args.merged_install: + prefix = os.path.join(prefix, pkg_name) + for line in get_commands( + pkg_name, prefix, args.primary_extension, + args.additional_extension + ): + print(line) + + for line in _remove_ending_separators(): + print(line) + + +def get_packages(prefix_path, merged_install): + """ + Find packages based on colcon-specific files created during installation. + + :param Path prefix_path: The install prefix path of all packages + :param bool merged_install: The flag if the packages are all installed + directly in the prefix or if each package is installed in a subdirectory + named after the package + :returns: A mapping from the package name to the set of runtime + dependencies + :rtype: dict + """ + packages = {} + # since importing colcon_core isn't feasible here the following constant + # must match colcon_core.location.get_relative_package_index_path() + subdirectory = 'share/colcon-core/packages' + if merged_install: + # return if workspace is empty + if not (prefix_path / subdirectory).is_dir(): + return packages + # find all files in the subdirectory + for p in (prefix_path / subdirectory).iterdir(): + if not p.is_file(): + continue + if p.name.startswith('.'): + continue + add_package_runtime_dependencies(p, packages) + else: + # for each subdirectory look for the package specific file + for p in prefix_path.iterdir(): + if not p.is_dir(): + continue + if p.name.startswith('.'): + continue + p = p / subdirectory / p.name + if p.is_file(): + add_package_runtime_dependencies(p, packages) + + # remove unknown dependencies + pkg_names = set(packages.keys()) + for k in packages.keys(): + packages[k] = {d for d in packages[k] if d in pkg_names} + + return packages + + +def add_package_runtime_dependencies(path, packages): + """ + Check the path and if it exists extract the packages runtime dependencies. + + :param Path path: The resource file containing the runtime dependencies + :param dict packages: A mapping from package names to the sets of runtime + dependencies to add to + """ + content = path.read_text() + dependencies = set(content.split(os.pathsep) if content else []) + packages[path.name] = dependencies + + +def order_packages(packages): + """ + Order packages topologically. + + :param dict packages: A mapping from package name to the set of runtime + dependencies + :returns: The package names + :rtype: list + """ + # select packages with no dependencies in alphabetical order + to_be_ordered = list(packages.keys()) + ordered = [] + while to_be_ordered: + pkg_names_without_deps = [ + name for name in to_be_ordered if not packages[name]] + if not pkg_names_without_deps: + reduce_cycle_set(packages) + raise RuntimeError( + 'Circular dependency between: ' + ', '.join(sorted(packages))) + pkg_names_without_deps.sort() + pkg_name = pkg_names_without_deps[0] + to_be_ordered.remove(pkg_name) + ordered.append(pkg_name) + # remove item from dependency lists + for k in list(packages.keys()): + if pkg_name in packages[k]: + packages[k].remove(pkg_name) + return ordered + + +def reduce_cycle_set(packages): + """ + Reduce the set of packages to the ones part of the circular dependency. + + :param dict packages: A mapping from package name to the set of runtime + dependencies which is modified in place + """ + last_depended = None + while len(packages) > 0: + # get all remaining dependencies + depended = set() + for pkg_name, dependencies in packages.items(): + depended = depended.union(dependencies) + # remove all packages which are not dependent on + for name in list(packages.keys()): + if name not in depended: + del packages[name] + if last_depended: + # if remaining packages haven't changed return them + if last_depended == depended: + return packages.keys() + # otherwise reduce again + last_depended = depended + + +def _include_comments(): + # skipping comment lines when COLCON_TRACE is not set speeds up the + # processing especially on Windows + return bool(os.environ.get('COLCON_TRACE')) + + +def get_commands(pkg_name, prefix, primary_extension, additional_extension): + commands = [] + package_dsv_path = os.path.join(prefix, 'share', pkg_name, 'package.dsv') + if os.path.exists(package_dsv_path): + commands += process_dsv_file( + package_dsv_path, prefix, primary_extension, additional_extension) + return commands + + +def process_dsv_file( + dsv_path, prefix, primary_extension=None, additional_extension=None +): + commands = [] + if _include_comments(): + commands.append(FORMAT_STR_COMMENT_LINE.format_map({'comment': dsv_path})) + with open(dsv_path, 'r') as h: + content = h.read() + lines = content.splitlines() + + basenames = OrderedDict() + for i, line in enumerate(lines): + # skip over empty or whitespace-only lines + if not line.strip(): + continue + # skip over comments + if line.startswith('#'): + continue + try: + type_, remainder = line.split(';', 1) + except ValueError: + raise RuntimeError( + "Line %d in '%s' doesn't contain a semicolon separating the " + 'type from the arguments' % (i + 1, dsv_path)) + if type_ != DSV_TYPE_SOURCE: + # handle non-source lines + try: + commands += handle_dsv_types_except_source( + type_, remainder, prefix) + except RuntimeError as e: + raise RuntimeError( + "Line %d in '%s' %s" % (i + 1, dsv_path, e)) from e + else: + # group remaining source lines by basename + path_without_ext, ext = os.path.splitext(remainder) + if path_without_ext not in basenames: + basenames[path_without_ext] = set() + assert ext.startswith('.') + ext = ext[1:] + if ext in (primary_extension, additional_extension): + basenames[path_without_ext].add(ext) + + # add the dsv extension to each basename if the file exists + for basename, extensions in basenames.items(): + if not os.path.isabs(basename): + basename = os.path.join(prefix, basename) + if os.path.exists(basename + '.dsv'): + extensions.add('dsv') + + for basename, extensions in basenames.items(): + if not os.path.isabs(basename): + basename = os.path.join(prefix, basename) + if 'dsv' in extensions: + # process dsv files recursively + commands += process_dsv_file( + basename + '.dsv', prefix, primary_extension=primary_extension, + additional_extension=additional_extension) + elif primary_extension in extensions and len(extensions) == 1: + # source primary-only files + commands += [ + FORMAT_STR_INVOKE_SCRIPT.format_map({ + 'prefix': prefix, + 'script_path': basename + '.' + primary_extension})] + elif additional_extension in extensions: + # source non-primary files + commands += [ + FORMAT_STR_INVOKE_SCRIPT.format_map({ + 'prefix': prefix, + 'script_path': basename + '.' + additional_extension})] + + return commands + + +def handle_dsv_types_except_source(type_, remainder, prefix): + commands = [] + if type_ in (DSV_TYPE_SET, DSV_TYPE_SET_IF_UNSET): + try: + env_name, value = remainder.split(';', 1) + except ValueError: + raise RuntimeError( + "doesn't contain a semicolon separating the environment name " + 'from the value') + try_prefixed_value = os.path.join(prefix, value) if value else prefix + if os.path.exists(try_prefixed_value): + value = try_prefixed_value + if type_ == DSV_TYPE_SET: + commands += _set(env_name, value) + elif type_ == DSV_TYPE_SET_IF_UNSET: + commands += _set_if_unset(env_name, value) + else: + assert False + elif type_ in ( + DSV_TYPE_APPEND_NON_DUPLICATE, + DSV_TYPE_PREPEND_NON_DUPLICATE, + DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS + ): + try: + env_name_and_values = remainder.split(';') + except ValueError: + raise RuntimeError( + "doesn't contain a semicolon separating the environment name " + 'from the values') + env_name = env_name_and_values[0] + values = env_name_and_values[1:] + for value in values: + if not value: + value = prefix + elif not os.path.isabs(value): + value = os.path.join(prefix, value) + if ( + type_ == DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS and + not os.path.exists(value) + ): + comment = f'skip extending {env_name} with not existing ' \ + f'path: {value}' + if _include_comments(): + commands.append( + FORMAT_STR_COMMENT_LINE.format_map({'comment': comment})) + elif type_ == DSV_TYPE_APPEND_NON_DUPLICATE: + commands += _append_unique_value(env_name, value) + else: + commands += _prepend_unique_value(env_name, value) + else: + raise RuntimeError( + 'contains an unknown environment hook type: ' + type_) + return commands + + +env_state = {} + + +def _append_unique_value(name, value): + global env_state + if name not in env_state: + if os.environ.get(name): + env_state[name] = set(os.environ[name].split(os.pathsep)) + else: + env_state[name] = set() + # append even if the variable has not been set yet, in case a shell script sets the + # same variable without the knowledge of this Python script. + # later _remove_ending_separators() will cleanup any unintentional leading separator + extend = FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + os.pathsep + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': extend + value}) + if value not in env_state[name]: + env_state[name].add(value) + else: + if not _include_comments(): + return [] + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +def _prepend_unique_value(name, value): + global env_state + if name not in env_state: + if os.environ.get(name): + env_state[name] = set(os.environ[name].split(os.pathsep)) + else: + env_state[name] = set() + # prepend even if the variable has not been set yet, in case a shell script sets the + # same variable without the knowledge of this Python script. + # later _remove_ending_separators() will cleanup any unintentional trailing separator + extend = os.pathsep + FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value + extend}) + if value not in env_state[name]: + env_state[name].add(value) + else: + if not _include_comments(): + return [] + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +# generate commands for removing prepended underscores +def _remove_ending_separators(): + # do nothing if the shell extension does not implement the logic + if FORMAT_STR_REMOVE_TRAILING_SEPARATOR is None: + return [] + + global env_state + commands = [] + for name in env_state: + # skip variables that already had values before this script started prepending + if name in os.environ: + continue + commands += [ + FORMAT_STR_REMOVE_LEADING_SEPARATOR.format_map({'name': name}), + FORMAT_STR_REMOVE_TRAILING_SEPARATOR.format_map({'name': name})] + return commands + + +def _set(name, value): + global env_state + env_state[name] = value + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value}) + return [line] + + +def _set_if_unset(name, value): + global env_state + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value}) + if env_state.get(name, os.environ.get(name)): + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +if __name__ == '__main__': # pragma: no cover + try: + rc = main() + except RuntimeError as e: + print(str(e), file=sys.stderr) + rc = 1 + sys.exit(rc) diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/_local_setup_util_sh.py b/ros2_ws/src/ft_can_transceiver_lib/install/_local_setup_util_sh.py new file mode 100644 index 0000000..f67eaa9 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/_local_setup_util_sh.py @@ -0,0 +1,407 @@ +# Copyright 2016-2019 Dirk Thomas +# Licensed under the Apache License, Version 2.0 + +import argparse +from collections import OrderedDict +import os +from pathlib import Path +import sys + + +FORMAT_STR_COMMENT_LINE = '# {comment}' +FORMAT_STR_SET_ENV_VAR = 'export {name}="{value}"' +FORMAT_STR_USE_ENV_VAR = '${name}' +FORMAT_STR_INVOKE_SCRIPT = 'COLCON_CURRENT_PREFIX="{prefix}" _colcon_prefix_sh_source_script "{script_path}"' # noqa: E501 +FORMAT_STR_REMOVE_LEADING_SEPARATOR = 'if [ "$(echo -n ${name} | head -c 1)" = ":" ]; then export {name}=${{{name}#?}} ; fi' # noqa: E501 +FORMAT_STR_REMOVE_TRAILING_SEPARATOR = 'if [ "$(echo -n ${name} | tail -c 1)" = ":" ]; then export {name}=${{{name}%?}} ; fi' # noqa: E501 + +DSV_TYPE_APPEND_NON_DUPLICATE = 'append-non-duplicate' +DSV_TYPE_PREPEND_NON_DUPLICATE = 'prepend-non-duplicate' +DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS = 'prepend-non-duplicate-if-exists' +DSV_TYPE_SET = 'set' +DSV_TYPE_SET_IF_UNSET = 'set-if-unset' +DSV_TYPE_SOURCE = 'source' + + +def main(argv=sys.argv[1:]): # noqa: D103 + parser = argparse.ArgumentParser( + description='Output shell commands for the packages in topological ' + 'order') + parser.add_argument( + 'primary_extension', + help='The file extension of the primary shell') + parser.add_argument( + 'additional_extension', nargs='?', + help='The additional file extension to be considered') + parser.add_argument( + '--merged-install', action='store_true', + help='All install prefixes are merged into a single location') + args = parser.parse_args(argv) + + packages = get_packages(Path(__file__).parent, args.merged_install) + + ordered_packages = order_packages(packages) + for pkg_name in ordered_packages: + if _include_comments(): + print( + FORMAT_STR_COMMENT_LINE.format_map( + {'comment': 'Package: ' + pkg_name})) + prefix = os.path.abspath(os.path.dirname(__file__)) + if not args.merged_install: + prefix = os.path.join(prefix, pkg_name) + for line in get_commands( + pkg_name, prefix, args.primary_extension, + args.additional_extension + ): + print(line) + + for line in _remove_ending_separators(): + print(line) + + +def get_packages(prefix_path, merged_install): + """ + Find packages based on colcon-specific files created during installation. + + :param Path prefix_path: The install prefix path of all packages + :param bool merged_install: The flag if the packages are all installed + directly in the prefix or if each package is installed in a subdirectory + named after the package + :returns: A mapping from the package name to the set of runtime + dependencies + :rtype: dict + """ + packages = {} + # since importing colcon_core isn't feasible here the following constant + # must match colcon_core.location.get_relative_package_index_path() + subdirectory = 'share/colcon-core/packages' + if merged_install: + # return if workspace is empty + if not (prefix_path / subdirectory).is_dir(): + return packages + # find all files in the subdirectory + for p in (prefix_path / subdirectory).iterdir(): + if not p.is_file(): + continue + if p.name.startswith('.'): + continue + add_package_runtime_dependencies(p, packages) + else: + # for each subdirectory look for the package specific file + for p in prefix_path.iterdir(): + if not p.is_dir(): + continue + if p.name.startswith('.'): + continue + p = p / subdirectory / p.name + if p.is_file(): + add_package_runtime_dependencies(p, packages) + + # remove unknown dependencies + pkg_names = set(packages.keys()) + for k in packages.keys(): + packages[k] = {d for d in packages[k] if d in pkg_names} + + return packages + + +def add_package_runtime_dependencies(path, packages): + """ + Check the path and if it exists extract the packages runtime dependencies. + + :param Path path: The resource file containing the runtime dependencies + :param dict packages: A mapping from package names to the sets of runtime + dependencies to add to + """ + content = path.read_text() + dependencies = set(content.split(os.pathsep) if content else []) + packages[path.name] = dependencies + + +def order_packages(packages): + """ + Order packages topologically. + + :param dict packages: A mapping from package name to the set of runtime + dependencies + :returns: The package names + :rtype: list + """ + # select packages with no dependencies in alphabetical order + to_be_ordered = list(packages.keys()) + ordered = [] + while to_be_ordered: + pkg_names_without_deps = [ + name for name in to_be_ordered if not packages[name]] + if not pkg_names_without_deps: + reduce_cycle_set(packages) + raise RuntimeError( + 'Circular dependency between: ' + ', '.join(sorted(packages))) + pkg_names_without_deps.sort() + pkg_name = pkg_names_without_deps[0] + to_be_ordered.remove(pkg_name) + ordered.append(pkg_name) + # remove item from dependency lists + for k in list(packages.keys()): + if pkg_name in packages[k]: + packages[k].remove(pkg_name) + return ordered + + +def reduce_cycle_set(packages): + """ + Reduce the set of packages to the ones part of the circular dependency. + + :param dict packages: A mapping from package name to the set of runtime + dependencies which is modified in place + """ + last_depended = None + while len(packages) > 0: + # get all remaining dependencies + depended = set() + for pkg_name, dependencies in packages.items(): + depended = depended.union(dependencies) + # remove all packages which are not dependent on + for name in list(packages.keys()): + if name not in depended: + del packages[name] + if last_depended: + # if remaining packages haven't changed return them + if last_depended == depended: + return packages.keys() + # otherwise reduce again + last_depended = depended + + +def _include_comments(): + # skipping comment lines when COLCON_TRACE is not set speeds up the + # processing especially on Windows + return bool(os.environ.get('COLCON_TRACE')) + + +def get_commands(pkg_name, prefix, primary_extension, additional_extension): + commands = [] + package_dsv_path = os.path.join(prefix, 'share', pkg_name, 'package.dsv') + if os.path.exists(package_dsv_path): + commands += process_dsv_file( + package_dsv_path, prefix, primary_extension, additional_extension) + return commands + + +def process_dsv_file( + dsv_path, prefix, primary_extension=None, additional_extension=None +): + commands = [] + if _include_comments(): + commands.append(FORMAT_STR_COMMENT_LINE.format_map({'comment': dsv_path})) + with open(dsv_path, 'r') as h: + content = h.read() + lines = content.splitlines() + + basenames = OrderedDict() + for i, line in enumerate(lines): + # skip over empty or whitespace-only lines + if not line.strip(): + continue + # skip over comments + if line.startswith('#'): + continue + try: + type_, remainder = line.split(';', 1) + except ValueError: + raise RuntimeError( + "Line %d in '%s' doesn't contain a semicolon separating the " + 'type from the arguments' % (i + 1, dsv_path)) + if type_ != DSV_TYPE_SOURCE: + # handle non-source lines + try: + commands += handle_dsv_types_except_source( + type_, remainder, prefix) + except RuntimeError as e: + raise RuntimeError( + "Line %d in '%s' %s" % (i + 1, dsv_path, e)) from e + else: + # group remaining source lines by basename + path_without_ext, ext = os.path.splitext(remainder) + if path_without_ext not in basenames: + basenames[path_without_ext] = set() + assert ext.startswith('.') + ext = ext[1:] + if ext in (primary_extension, additional_extension): + basenames[path_without_ext].add(ext) + + # add the dsv extension to each basename if the file exists + for basename, extensions in basenames.items(): + if not os.path.isabs(basename): + basename = os.path.join(prefix, basename) + if os.path.exists(basename + '.dsv'): + extensions.add('dsv') + + for basename, extensions in basenames.items(): + if not os.path.isabs(basename): + basename = os.path.join(prefix, basename) + if 'dsv' in extensions: + # process dsv files recursively + commands += process_dsv_file( + basename + '.dsv', prefix, primary_extension=primary_extension, + additional_extension=additional_extension) + elif primary_extension in extensions and len(extensions) == 1: + # source primary-only files + commands += [ + FORMAT_STR_INVOKE_SCRIPT.format_map({ + 'prefix': prefix, + 'script_path': basename + '.' + primary_extension})] + elif additional_extension in extensions: + # source non-primary files + commands += [ + FORMAT_STR_INVOKE_SCRIPT.format_map({ + 'prefix': prefix, + 'script_path': basename + '.' + additional_extension})] + + return commands + + +def handle_dsv_types_except_source(type_, remainder, prefix): + commands = [] + if type_ in (DSV_TYPE_SET, DSV_TYPE_SET_IF_UNSET): + try: + env_name, value = remainder.split(';', 1) + except ValueError: + raise RuntimeError( + "doesn't contain a semicolon separating the environment name " + 'from the value') + try_prefixed_value = os.path.join(prefix, value) if value else prefix + if os.path.exists(try_prefixed_value): + value = try_prefixed_value + if type_ == DSV_TYPE_SET: + commands += _set(env_name, value) + elif type_ == DSV_TYPE_SET_IF_UNSET: + commands += _set_if_unset(env_name, value) + else: + assert False + elif type_ in ( + DSV_TYPE_APPEND_NON_DUPLICATE, + DSV_TYPE_PREPEND_NON_DUPLICATE, + DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS + ): + try: + env_name_and_values = remainder.split(';') + except ValueError: + raise RuntimeError( + "doesn't contain a semicolon separating the environment name " + 'from the values') + env_name = env_name_and_values[0] + values = env_name_and_values[1:] + for value in values: + if not value: + value = prefix + elif not os.path.isabs(value): + value = os.path.join(prefix, value) + if ( + type_ == DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS and + not os.path.exists(value) + ): + comment = f'skip extending {env_name} with not existing ' \ + f'path: {value}' + if _include_comments(): + commands.append( + FORMAT_STR_COMMENT_LINE.format_map({'comment': comment})) + elif type_ == DSV_TYPE_APPEND_NON_DUPLICATE: + commands += _append_unique_value(env_name, value) + else: + commands += _prepend_unique_value(env_name, value) + else: + raise RuntimeError( + 'contains an unknown environment hook type: ' + type_) + return commands + + +env_state = {} + + +def _append_unique_value(name, value): + global env_state + if name not in env_state: + if os.environ.get(name): + env_state[name] = set(os.environ[name].split(os.pathsep)) + else: + env_state[name] = set() + # append even if the variable has not been set yet, in case a shell script sets the + # same variable without the knowledge of this Python script. + # later _remove_ending_separators() will cleanup any unintentional leading separator + extend = FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + os.pathsep + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': extend + value}) + if value not in env_state[name]: + env_state[name].add(value) + else: + if not _include_comments(): + return [] + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +def _prepend_unique_value(name, value): + global env_state + if name not in env_state: + if os.environ.get(name): + env_state[name] = set(os.environ[name].split(os.pathsep)) + else: + env_state[name] = set() + # prepend even if the variable has not been set yet, in case a shell script sets the + # same variable without the knowledge of this Python script. + # later _remove_ending_separators() will cleanup any unintentional trailing separator + extend = os.pathsep + FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value + extend}) + if value not in env_state[name]: + env_state[name].add(value) + else: + if not _include_comments(): + return [] + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +# generate commands for removing prepended underscores +def _remove_ending_separators(): + # do nothing if the shell extension does not implement the logic + if FORMAT_STR_REMOVE_TRAILING_SEPARATOR is None: + return [] + + global env_state + commands = [] + for name in env_state: + # skip variables that already had values before this script started prepending + if name in os.environ: + continue + commands += [ + FORMAT_STR_REMOVE_LEADING_SEPARATOR.format_map({'name': name}), + FORMAT_STR_REMOVE_TRAILING_SEPARATOR.format_map({'name': name})] + return commands + + +def _set(name, value): + global env_state + env_state[name] = value + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value}) + return [line] + + +def _set_if_unset(name, value): + global env_state + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value}) + if env_state.get(name, os.environ.get(name)): + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +if __name__ == '__main__': # pragma: no cover + try: + rc = main() + except RuntimeError as e: + print(str(e), file=sys.stderr) + rc = 1 + sys.exit(rc) diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/can1.h b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/can1.h new file mode 100644 index 0000000..986f62c --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/can1.h @@ -0,0 +1,24612 @@ +/** + * @file can1.h + * + * @brief This header file was generated by cantools version 40.2.3 Thu Jul 10 17:27:34 2025. + * + * @copyright Copyright (c) 2018-2019 Erik Moqvist + * + * @par License + * The MIT License (MIT) + * + * 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. + */ + +#ifndef CAN1_H +#define CAN1_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#ifndef EINVAL +# define EINVAL 22 +#endif + +/* Frame ids. */ +#define CAN1_INVERTER_VELOCITY_FRAME_ID (0x776u) +#define CAN1_INVERTER_ERRORS_WARNINGS_FRAME_ID (0x780u) +#define CAN1_INVERTER_TORQUE_ACTUAL_CW_FRAME_ID (0x779u) +#define CAN1_INVERTER_TEMPERATUR_FRAME_ID (0x778u) +#define CAN1_INVERTER_TORQUE_WANTED_FRAME_ID (0x777u) +#define CAN1_SDO_TELEMETRIE_RX_NODE1_FRAME_ID (0x733u) +#define CAN1_SDO_TELEMETRIE_RX_NODE2_FRAME_ID (0x731u) +#define CAN1_SDO_TELEMETRIE_TX_FRAME_ID (0x732u) +#define CAN1_LAPTOP_SDO_NODE_FRAME_ID (0x730u) +#define CAN1_X_SENS_LONG_LAT_FRAME_ID (0x713u) +#define CAN1_X_SENS_RATEOFTURN_FRAME_ID (0x712u) +#define CAN1_X_SENS_ACCELERATION_FRAME_ID (0x711u) +#define CAN1_X_SENS_VELOCITY_FRAME_ID (0x714u) +#define CAN1_TELEMETRIE_FRAME_ID (0x720u) +#define CAN1_OVERRIDE_POWERMAP_FRAME_ID (0x725u) +#define CAN1_OVERRIDE_LAPTOP_2_FRAME_ID (0x724u) +#define CAN1_OVERRIDE_EPSC_COOLING_FRAME_ID (0x723u) +#define CAN1_OVERRIDE_LAPTOP_FRAME_ID (0x721u) +#define CAN1_APPS_OVERRIDE_FRAME_ID (0x722u) +#define CAN1_FTCU_DAMPER_FRAME_ID (0x103u) +#define CAN1_FTCU_PARAM_CONFIRM_FRAME_ID (0x413u) +#define CAN1_SENSORNODE_F_10_HZ_FRAME_ID (0xd1u) +#define CAN1_SENSORNODE_F_100_HZ_1_FRAME_ID (0xd3u) +#define CAN1_SENSORNODE_F_100_HZ_2_FRAME_ID (0xd5u) +#define CAN1_SENSORNODE_F_1K_HZ_FRAME_ID (0xd7u) +#define CAN1_SENSORNODE_R_10_HZ_FRAME_ID (0xd2u) +#define CAN1_SENSORNODE_R_100_HZ_FRAME_ID (0xd4u) +#define CAN1_SENSORNODE_R_1K_HZ_FRAME_ID (0xd8u) +#define CAN1_PWM_DUTY_CYCLE_FRAME_ID (0xdcu) +#define CAN1_PWM_CONFIG_FRAME_ID (0xddu) +#define CAN1_DASHBOARD_IN_FRAME_ID (0x420u) +#define CAN1_AMS_SLAVE1_STATUS_FRAME_ID (0x81u) +#define CAN1_AMS_SLAVE2_LOG0_FRAME_ID (0x620u) +#define CAN1_AMS_SLAVE2_LOG1_FRAME_ID (0x621u) +#define CAN1_AMS_SLAVE2_LOG2_FRAME_ID (0x622u) +#define CAN1_AMS_SLAVE2_LOG3_FRAME_ID (0x623u) +#define CAN1_AMS_SLAVE2_LOG4_FRAME_ID (0x624u) +#define CAN1_AMS_SLAVE2_LOG5_FRAME_ID (0x625u) +#define CAN1_AMS_SLAVE5_LOG6_FRAME_ID (0x656u) +#define CAN1_AMS_SLAVE4_LOG6_FRAME_ID (0x646u) +#define CAN1_AMS_SLAVE3_LOG6_FRAME_ID (0x636u) +#define CAN1_AMS_SLAVE2_LOG6_FRAME_ID (0x626u) +#define CAN1_AMS_SLAVE1_LOG6_FRAME_ID (0x616u) +#define CAN1_AMS_SLAVE5_LOG5_FRAME_ID (0x655u) +#define CAN1_AMS_SLAVE4_LOG5_FRAME_ID (0x645u) +#define CAN1_AMS_SLAVE3_LOG5_FRAME_ID (0x635u) +#define CAN1_AMS_SLAVE1_LOG5_FRAME_ID (0x615u) +#define CAN1_AMS_SLAVE5_LOG4_FRAME_ID (0x654u) +#define CAN1_AMS_SLAVE4_LOG4_FRAME_ID (0x644u) +#define CAN1_AMS_SLAVE3_LOG4_FRAME_ID (0x634u) +#define CAN1_AMS_SLAVE1_LOG4_FRAME_ID (0x614u) +#define CAN1_AMS_SLAVE5_LOG3_FRAME_ID (0x653u) +#define CAN1_AMS_SLAVE4_LOG3_FRAME_ID (0x643u) +#define CAN1_AMS_SLAVE3_LOG3_FRAME_ID (0x633u) +#define CAN1_AMS_SLAVE1_LOG3_FRAME_ID (0x613u) +#define CAN1_AMS_SLAVE5_LOG2_FRAME_ID (0x652u) +#define CAN1_AMS_SLAVE4_LOG2_FRAME_ID (0x642u) +#define CAN1_AMS_SLAVE3_LOG2_FRAME_ID (0x632u) +#define CAN1_AMS_SLAVE1_LOG2_FRAME_ID (0x612u) +#define CAN1_AMS_SLAVE5_LOG1_FRAME_ID (0x651u) +#define CAN1_AMS_SLAVE4_LOG1_FRAME_ID (0x641u) +#define CAN1_AMS_SLAVE3_LOG1_FRAME_ID (0x631u) +#define CAN1_AMS_SLAVE1_LOG1_FRAME_ID (0x611u) +#define CAN1_AMS_SLAVE5_LOG0_FRAME_ID (0x650u) +#define CAN1_AMS_SLAVE4_LOG0_FRAME_ID (0x640u) +#define CAN1_AMS_SLAVE3_LOG0_FRAME_ID (0x630u) +#define CAN1_AMS_SLAVE1_LOG0_FRAME_ID (0x610u) +#define CAN1_PDU_HEARTBEAT_FRAME_ID (0xceu) +#define CAN1_FTCU_PNEUMATIK_FRAME_ID (0x110u) +#define CAN1_ACU_TX_COMMANDS_FRAME_ID (0xe3u) +#define CAN1_ACU_RX_COMMANDS_FRAME_ID (0xe2u) +#define CAN1_ACU_RX_FRAME_ID (0xe1u) +#define CAN1_AMS_SLAVE0_LOG0_FRAME_ID (0x600u) +#define CAN1_AMS_SLAVE0_LOG1_FRAME_ID (0x601u) +#define CAN1_AMS_SLAVE0_LOG3_FRAME_ID (0x603u) +#define CAN1_AMS_SLAVE0_LOG4_FRAME_ID (0x604u) +#define CAN1_AMS_SLAVE0_LOG5_FRAME_ID (0x605u) +#define CAN1_AMS_SLAVE0_LOG6_FRAME_ID (0x606u) +#define CAN1_ACU_TX_FRAME_ID (0xe0u) +#define CAN1_AMS_SLAVE5_STATUS_FRAME_ID (0x85u) +#define CAN1_AMS_SLAVE4_STATUS_FRAME_ID (0x84u) +#define CAN1_AMS_SLAVE3_STATUS_FRAME_ID (0x83u) +#define CAN1_AMS_SLAVE2_STATUS_FRAME_ID (0x82u) +#define CAN1_AMS_ERROR_FRAME_ID (0x0cu) +#define CAN1_FTCU_COOLING_FRAME_ID (0x107u) +#define CAN1_FTCU_BRAKE_T_FRAME_ID (0x105u) +#define CAN1_FTCU_WHEELSPEED_FRAME_ID (0x104u) +#define CAN1_FTCU_TIMINGS_FRAME_ID (0x102u) +#define CAN1_FTCU_DRIVER_FRAME_ID (0x111u) +#define CAN1_TTS_RR_FRAME_ID (0x704u) +#define CAN1_TTS_RL_FRAME_ID (0x703u) +#define CAN1_TTS_FR_FRAME_ID (0x702u) +#define CAN1_TTS_FL_FRAME_ID (0x701u) +#define CAN1_STW_PARAM_SET_FRAME_ID (0x402u) +#define CAN1_AMS_SLAVE0_STATUS_FRAME_ID (0x80u) +#define CAN1_SSU_MESSAGE_FRAME_ID (0x500u) +#define CAN1_AMS_STATUS_FRAME_ID (0x0au) +#define CAN1_AMS_SLAVE_PANIC_FRAME_ID (0x09u) +#define CAN1_AMS_IN_FRAME_ID (0x0bu) +#define CAN1_SHUNT_CURRENT_FRAME_ID (0x521u) +#define CAN1_SHUNT_VOLTAGE1_FRAME_ID (0x522u) +#define CAN1_SHUNT_VOLTAGE2_FRAME_ID (0x523u) +#define CAN1_SHUNT_VOLTAGE3_FRAME_ID (0x524u) +#define CAN1_SHUNT_TEMPERATURE_FRAME_ID (0x525u) +#define CAN1_PDU_COMMAND_FRAME_ID (0xc8u) +#define CAN1_PDU_RESPONSE_FRAME_ID (0xc9u) +#define CAN1_AS_MISSION_FB_FRAME_ID (0x410u) +#define CAN1_STW_MISSION_SELECTED_FRAME_ID (0x400u) +#define CAN1_EPSC_OUT_FRAME_ID (0x125u) +#define CAN1_EPSC_STEERING_IN_FRAME_ID (0x123u) +#define CAN1_STW_BUTTONS_FRAME_ID (0x401u) +#define CAN1_STW_STATUS_FRAME_ID (0x412u) +#define CAN1_PDU_CURRENT_1_FRAME_ID (0xcau) +#define CAN1_PDU_CURRENT_2_FRAME_ID (0xcbu) +#define CAN1_PDU_CURRENT_3_FRAME_ID (0xccu) +#define CAN1_PDU_CURRENT_4_FRAME_ID (0xcdu) +#define CAN1_EPSC_CONFIG_IN_FRAME_ID (0x124u) + +/* Frame lengths in bytes. */ +#define CAN1_INVERTER_VELOCITY_LENGTH (8u) +#define CAN1_INVERTER_ERRORS_WARNINGS_LENGTH (8u) +#define CAN1_INVERTER_TORQUE_ACTUAL_CW_LENGTH (8u) +#define CAN1_INVERTER_TEMPERATUR_LENGTH (8u) +#define CAN1_INVERTER_TORQUE_WANTED_LENGTH (8u) +#define CAN1_SDO_TELEMETRIE_RX_NODE1_LENGTH (8u) +#define CAN1_SDO_TELEMETRIE_RX_NODE2_LENGTH (8u) +#define CAN1_SDO_TELEMETRIE_TX_LENGTH (8u) +#define CAN1_LAPTOP_SDO_NODE_LENGTH (1u) +#define CAN1_X_SENS_LONG_LAT_LENGTH (8u) +#define CAN1_X_SENS_RATEOFTURN_LENGTH (6u) +#define CAN1_X_SENS_ACCELERATION_LENGTH (6u) +#define CAN1_X_SENS_VELOCITY_LENGTH (6u) +#define CAN1_TELEMETRIE_LENGTH (7u) +#define CAN1_OVERRIDE_POWERMAP_LENGTH (8u) +#define CAN1_OVERRIDE_LAPTOP_2_LENGTH (5u) +#define CAN1_OVERRIDE_EPSC_COOLING_LENGTH (8u) +#define CAN1_OVERRIDE_LAPTOP_LENGTH (3u) +#define CAN1_APPS_OVERRIDE_LENGTH (5u) +#define CAN1_FTCU_DAMPER_LENGTH (8u) +#define CAN1_FTCU_PARAM_CONFIRM_LENGTH (1u) +#define CAN1_SENSORNODE_F_10_HZ_LENGTH (3u) +#define CAN1_SENSORNODE_F_100_HZ_1_LENGTH (7u) +#define CAN1_SENSORNODE_F_100_HZ_2_LENGTH (3u) +#define CAN1_SENSORNODE_F_1K_HZ_LENGTH (3u) +#define CAN1_SENSORNODE_R_10_HZ_LENGTH (7u) +#define CAN1_SENSORNODE_R_100_HZ_LENGTH (8u) +#define CAN1_SENSORNODE_R_1K_HZ_LENGTH (3u) +#define CAN1_PWM_DUTY_CYCLE_LENGTH (7u) +#define CAN1_PWM_CONFIG_LENGTH (6u) +#define CAN1_DASHBOARD_IN_LENGTH (1u) +#define CAN1_AMS_SLAVE1_STATUS_LENGTH (8u) +#define CAN1_AMS_SLAVE2_LOG0_LENGTH (8u) +#define CAN1_AMS_SLAVE2_LOG1_LENGTH (8u) +#define CAN1_AMS_SLAVE2_LOG2_LENGTH (8u) +#define CAN1_AMS_SLAVE2_LOG3_LENGTH (8u) +#define CAN1_AMS_SLAVE2_LOG4_LENGTH (6u) +#define CAN1_AMS_SLAVE2_LOG5_LENGTH (8u) +#define CAN1_AMS_SLAVE5_LOG6_LENGTH (8u) +#define CAN1_AMS_SLAVE4_LOG6_LENGTH (8u) +#define CAN1_AMS_SLAVE3_LOG6_LENGTH (8u) +#define CAN1_AMS_SLAVE2_LOG6_LENGTH (8u) +#define CAN1_AMS_SLAVE1_LOG6_LENGTH (8u) +#define CAN1_AMS_SLAVE5_LOG5_LENGTH (8u) +#define CAN1_AMS_SLAVE4_LOG5_LENGTH (8u) +#define CAN1_AMS_SLAVE3_LOG5_LENGTH (8u) +#define CAN1_AMS_SLAVE1_LOG5_LENGTH (8u) +#define CAN1_AMS_SLAVE5_LOG4_LENGTH (6u) +#define CAN1_AMS_SLAVE4_LOG4_LENGTH (6u) +#define CAN1_AMS_SLAVE3_LOG4_LENGTH (6u) +#define CAN1_AMS_SLAVE1_LOG4_LENGTH (6u) +#define CAN1_AMS_SLAVE5_LOG3_LENGTH (8u) +#define CAN1_AMS_SLAVE4_LOG3_LENGTH (8u) +#define CAN1_AMS_SLAVE3_LOG3_LENGTH (8u) +#define CAN1_AMS_SLAVE1_LOG3_LENGTH (8u) +#define CAN1_AMS_SLAVE5_LOG2_LENGTH (8u) +#define CAN1_AMS_SLAVE4_LOG2_LENGTH (8u) +#define CAN1_AMS_SLAVE3_LOG2_LENGTH (8u) +#define CAN1_AMS_SLAVE1_LOG2_LENGTH (8u) +#define CAN1_AMS_SLAVE5_LOG1_LENGTH (8u) +#define CAN1_AMS_SLAVE4_LOG1_LENGTH (8u) +#define CAN1_AMS_SLAVE3_LOG1_LENGTH (8u) +#define CAN1_AMS_SLAVE1_LOG1_LENGTH (8u) +#define CAN1_AMS_SLAVE5_LOG0_LENGTH (8u) +#define CAN1_AMS_SLAVE4_LOG0_LENGTH (8u) +#define CAN1_AMS_SLAVE3_LOG0_LENGTH (8u) +#define CAN1_AMS_SLAVE1_LOG0_LENGTH (8u) +#define CAN1_PDU_HEARTBEAT_LENGTH (1u) +#define CAN1_FTCU_PNEUMATIK_LENGTH (8u) +#define CAN1_ACU_TX_COMMANDS_LENGTH (6u) +#define CAN1_ACU_RX_COMMANDS_LENGTH (4u) +#define CAN1_ACU_RX_LENGTH (3u) +#define CAN1_AMS_SLAVE0_LOG0_LENGTH (8u) +#define CAN1_AMS_SLAVE0_LOG1_LENGTH (8u) +#define CAN1_AMS_SLAVE0_LOG3_LENGTH (8u) +#define CAN1_AMS_SLAVE0_LOG4_LENGTH (6u) +#define CAN1_AMS_SLAVE0_LOG5_LENGTH (8u) +#define CAN1_AMS_SLAVE0_LOG6_LENGTH (8u) +#define CAN1_ACU_TX_LENGTH (2u) +#define CAN1_AMS_SLAVE5_STATUS_LENGTH (8u) +#define CAN1_AMS_SLAVE4_STATUS_LENGTH (8u) +#define CAN1_AMS_SLAVE3_STATUS_LENGTH (8u) +#define CAN1_AMS_SLAVE2_STATUS_LENGTH (8u) +#define CAN1_AMS_ERROR_LENGTH (2u) +#define CAN1_FTCU_COOLING_LENGTH (8u) +#define CAN1_FTCU_BRAKE_T_LENGTH (8u) +#define CAN1_FTCU_WHEELSPEED_LENGTH (8u) +#define CAN1_FTCU_TIMINGS_LENGTH (8u) +#define CAN1_FTCU_DRIVER_LENGTH (8u) +#define CAN1_TTS_RR_LENGTH (8u) +#define CAN1_TTS_RL_LENGTH (8u) +#define CAN1_TTS_FR_LENGTH (8u) +#define CAN1_TTS_FL_LENGTH (8u) +#define CAN1_STW_PARAM_SET_LENGTH (6u) +#define CAN1_AMS_SLAVE0_STATUS_LENGTH (8u) +#define CAN1_SSU_MESSAGE_LENGTH (4u) +#define CAN1_AMS_STATUS_LENGTH (8u) +#define CAN1_AMS_SLAVE_PANIC_LENGTH (8u) +#define CAN1_AMS_IN_LENGTH (1u) +#define CAN1_SHUNT_CURRENT_LENGTH (6u) +#define CAN1_SHUNT_VOLTAGE1_LENGTH (6u) +#define CAN1_SHUNT_VOLTAGE2_LENGTH (6u) +#define CAN1_SHUNT_VOLTAGE3_LENGTH (6u) +#define CAN1_SHUNT_TEMPERATURE_LENGTH (6u) +#define CAN1_PDU_COMMAND_LENGTH (7u) +#define CAN1_PDU_RESPONSE_LENGTH (7u) +#define CAN1_AS_MISSION_FB_LENGTH (1u) +#define CAN1_STW_MISSION_SELECTED_LENGTH (1u) +#define CAN1_EPSC_OUT_LENGTH (8u) +#define CAN1_EPSC_STEERING_IN_LENGTH (2u) +#define CAN1_STW_BUTTONS_LENGTH (1u) +#define CAN1_STW_STATUS_LENGTH (7u) +#define CAN1_PDU_CURRENT_1_LENGTH (8u) +#define CAN1_PDU_CURRENT_2_LENGTH (8u) +#define CAN1_PDU_CURRENT_3_LENGTH (8u) +#define CAN1_PDU_CURRENT_4_LENGTH (8u) +#define CAN1_EPSC_CONFIG_IN_LENGTH (6u) + +/* Extended or standard frame types. */ +#define CAN1_INVERTER_VELOCITY_IS_EXTENDED (0) +#define CAN1_INVERTER_ERRORS_WARNINGS_IS_EXTENDED (0) +#define CAN1_INVERTER_TORQUE_ACTUAL_CW_IS_EXTENDED (0) +#define CAN1_INVERTER_TEMPERATUR_IS_EXTENDED (0) +#define CAN1_INVERTER_TORQUE_WANTED_IS_EXTENDED (0) +#define CAN1_SDO_TELEMETRIE_RX_NODE1_IS_EXTENDED (0) +#define CAN1_SDO_TELEMETRIE_RX_NODE2_IS_EXTENDED (0) +#define CAN1_SDO_TELEMETRIE_TX_IS_EXTENDED (0) +#define CAN1_LAPTOP_SDO_NODE_IS_EXTENDED (0) +#define CAN1_X_SENS_LONG_LAT_IS_EXTENDED (0) +#define CAN1_X_SENS_RATEOFTURN_IS_EXTENDED (0) +#define CAN1_X_SENS_ACCELERATION_IS_EXTENDED (0) +#define CAN1_X_SENS_VELOCITY_IS_EXTENDED (0) +#define CAN1_TELEMETRIE_IS_EXTENDED (0) +#define CAN1_OVERRIDE_POWERMAP_IS_EXTENDED (0) +#define CAN1_OVERRIDE_LAPTOP_2_IS_EXTENDED (0) +#define CAN1_OVERRIDE_EPSC_COOLING_IS_EXTENDED (0) +#define CAN1_OVERRIDE_LAPTOP_IS_EXTENDED (0) +#define CAN1_APPS_OVERRIDE_IS_EXTENDED (0) +#define CAN1_FTCU_DAMPER_IS_EXTENDED (0) +#define CAN1_FTCU_PARAM_CONFIRM_IS_EXTENDED (0) +#define CAN1_SENSORNODE_F_10_HZ_IS_EXTENDED (0) +#define CAN1_SENSORNODE_F_100_HZ_1_IS_EXTENDED (0) +#define CAN1_SENSORNODE_F_100_HZ_2_IS_EXTENDED (0) +#define CAN1_SENSORNODE_F_1K_HZ_IS_EXTENDED (0) +#define CAN1_SENSORNODE_R_10_HZ_IS_EXTENDED (0) +#define CAN1_SENSORNODE_R_100_HZ_IS_EXTENDED (0) +#define CAN1_SENSORNODE_R_1K_HZ_IS_EXTENDED (0) +#define CAN1_PWM_DUTY_CYCLE_IS_EXTENDED (0) +#define CAN1_PWM_CONFIG_IS_EXTENDED (0) +#define CAN1_DASHBOARD_IN_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE1_STATUS_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE2_LOG0_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE2_LOG1_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE2_LOG2_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE2_LOG3_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE2_LOG4_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE2_LOG5_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE5_LOG6_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE4_LOG6_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE3_LOG6_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE2_LOG6_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE1_LOG6_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE5_LOG5_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE4_LOG5_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE3_LOG5_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE1_LOG5_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE5_LOG4_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE4_LOG4_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE3_LOG4_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE1_LOG4_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE5_LOG3_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE4_LOG3_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE3_LOG3_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE1_LOG3_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE5_LOG2_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE4_LOG2_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE3_LOG2_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE1_LOG2_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE5_LOG1_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE4_LOG1_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE3_LOG1_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE1_LOG1_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE5_LOG0_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE4_LOG0_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE3_LOG0_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE1_LOG0_IS_EXTENDED (0) +#define CAN1_PDU_HEARTBEAT_IS_EXTENDED (0) +#define CAN1_FTCU_PNEUMATIK_IS_EXTENDED (0) +#define CAN1_ACU_TX_COMMANDS_IS_EXTENDED (0) +#define CAN1_ACU_RX_COMMANDS_IS_EXTENDED (0) +#define CAN1_ACU_RX_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE0_LOG0_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE0_LOG1_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE0_LOG3_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE0_LOG4_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE0_LOG5_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE0_LOG6_IS_EXTENDED (0) +#define CAN1_ACU_TX_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE5_STATUS_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE4_STATUS_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE3_STATUS_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE2_STATUS_IS_EXTENDED (0) +#define CAN1_AMS_ERROR_IS_EXTENDED (0) +#define CAN1_FTCU_COOLING_IS_EXTENDED (0) +#define CAN1_FTCU_BRAKE_T_IS_EXTENDED (0) +#define CAN1_FTCU_WHEELSPEED_IS_EXTENDED (0) +#define CAN1_FTCU_TIMINGS_IS_EXTENDED (0) +#define CAN1_FTCU_DRIVER_IS_EXTENDED (0) +#define CAN1_TTS_RR_IS_EXTENDED (0) +#define CAN1_TTS_RL_IS_EXTENDED (0) +#define CAN1_TTS_FR_IS_EXTENDED (0) +#define CAN1_TTS_FL_IS_EXTENDED (0) +#define CAN1_STW_PARAM_SET_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE0_STATUS_IS_EXTENDED (0) +#define CAN1_SSU_MESSAGE_IS_EXTENDED (0) +#define CAN1_AMS_STATUS_IS_EXTENDED (0) +#define CAN1_AMS_SLAVE_PANIC_IS_EXTENDED (0) +#define CAN1_AMS_IN_IS_EXTENDED (0) +#define CAN1_SHUNT_CURRENT_IS_EXTENDED (0) +#define CAN1_SHUNT_VOLTAGE1_IS_EXTENDED (0) +#define CAN1_SHUNT_VOLTAGE2_IS_EXTENDED (0) +#define CAN1_SHUNT_VOLTAGE3_IS_EXTENDED (0) +#define CAN1_SHUNT_TEMPERATURE_IS_EXTENDED (0) +#define CAN1_PDU_COMMAND_IS_EXTENDED (0) +#define CAN1_PDU_RESPONSE_IS_EXTENDED (0) +#define CAN1_AS_MISSION_FB_IS_EXTENDED (0) +#define CAN1_STW_MISSION_SELECTED_IS_EXTENDED (0) +#define CAN1_EPSC_OUT_IS_EXTENDED (0) +#define CAN1_EPSC_STEERING_IN_IS_EXTENDED (0) +#define CAN1_STW_BUTTONS_IS_EXTENDED (0) +#define CAN1_STW_STATUS_IS_EXTENDED (0) +#define CAN1_PDU_CURRENT_1_IS_EXTENDED (0) +#define CAN1_PDU_CURRENT_2_IS_EXTENDED (0) +#define CAN1_PDU_CURRENT_3_IS_EXTENDED (0) +#define CAN1_PDU_CURRENT_4_IS_EXTENDED (0) +#define CAN1_EPSC_CONFIG_IN_IS_EXTENDED (0) + +/* Frame cycle times in milliseconds. */ + + +/* Signal choices. */ +#define CAN1_AMS_ERROR_AMS_ERROR_KIND_NONE_CHOICE (0) +#define CAN1_AMS_ERROR_AMS_ERROR_KIND_SLAVE__TIMEOUT_CHOICE (1) +#define CAN1_AMS_ERROR_AMS_ERROR_KIND_SLAVE__PANIC_CHOICE (2) +#define CAN1_AMS_ERROR_AMS_ERROR_KIND_SHUNT__TIMEOUT_CHOICE (3) +#define CAN1_AMS_ERROR_AMS_ERROR_KIND_SHUNT__OVERCURRENT_CHOICE (4) +#define CAN1_AMS_ERROR_AMS_ERROR_KIND_SHUNT__OVERTEMPERATURE_CHOICE (5) + +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_SPEED_LIMIT_CHOICE (0u) +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_TORQUE__LIMIT_CHOICE (1u) +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_POWER_LIMIT_CHOICE (2u) +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_DISCIPLINE_CHOICE (3u) +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_TV_ON_CHOICE (4u) +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_TC_ON_CHOICE (5u) +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_REKU_ON_CHOICE (6u) +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_TC_P_CHOICE (7u) +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_TC_I_CHOICE (8u) +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_TC_MUMAX_CHOICE (9u) +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_TC_SLIPREF_CHOICE (10u) + +#define CAN1_AMS_STATUS_AMS_STATE_INACTIVE_CHOICE (0u) +#define CAN1_AMS_STATUS_AMS_STATE_ACTIVE_CHOICE (1u) +#define CAN1_AMS_STATUS_AMS_STATE_PRECHARGE_CHOICE (2u) +#define CAN1_AMS_STATUS_AMS_STATE_DISCHARGE_CHOICE (3u) +#define CAN1_AMS_STATUS_AMS_STATE_ERROR_CHOICE (4u) + +#define CAN1_AMS_SLAVE_PANIC_AMS_SLAVE_PANIC_KIND_OVERTEMPERATURE_CHOICE (0u) +#define CAN1_AMS_SLAVE_PANIC_AMS_SLAVE_PANIC_KIND_UNDERTEMPERATURE_CHOICE (1u) +#define CAN1_AMS_SLAVE_PANIC_AMS_SLAVE_PANIC_KIND_OVERVOLTAGE_CHOICE (2u) +#define CAN1_AMS_SLAVE_PANIC_AMS_SLAVE_PANIC_KIND_UNDERVOLTAGE_CHOICE (3u) +#define CAN1_AMS_SLAVE_PANIC_AMS_SLAVE_PANIC_KIND_TOO_FEW_TEMP_SENSORS_CHOICE (4u) +#define CAN1_AMS_SLAVE_PANIC_AMS_SLAVE_PANIC_KIND_OPEN_CELL_CONNECTION_CHOICE (5u) + +#define CAN1_AS_MISSION_FB_MISSION_SELECTION_ACCELERATION_CHOICE (1u) +#define CAN1_AS_MISSION_FB_MISSION_SELECTION_SKIDPAD_CHOICE (2u) +#define CAN1_AS_MISSION_FB_MISSION_SELECTION_TRACKDRIVE_CHOICE (3u) +#define CAN1_AS_MISSION_FB_MISSION_SELECTION_BRAKETEST_CHOICE (4u) +#define CAN1_AS_MISSION_FB_MISSION_SELECTION_INSPECTION_CHOICE (5u) +#define CAN1_AS_MISSION_FB_MISSION_SELECTION_AUTOCROSS_CHOICE (6u) +#define CAN1_AS_MISSION_FB_MISSION_SELECTION_MANUAL_CHOICE (7u) + +#define CAN1_STW_MISSION_SELECTED_MISSION_SELECTION_ACCELERATION_CHOICE (1u) +#define CAN1_STW_MISSION_SELECTED_MISSION_SELECTION_SKIDPAD_CHOICE (2u) +#define CAN1_STW_MISSION_SELECTED_MISSION_SELECTION_TRACKDRIVE_CHOICE (3u) +#define CAN1_STW_MISSION_SELECTED_MISSION_SELECTION_BRAKETEST_CHOICE (4u) +#define CAN1_STW_MISSION_SELECTED_MISSION_SELECTION_INSPECTION_CHOICE (5u) +#define CAN1_STW_MISSION_SELECTED_MISSION_SELECTION_AUTOCROSS_CHOICE (6u) +#define CAN1_STW_MISSION_SELECTED_MISSION_SELECTION_MANUAL_CHOICE (7u) + +#define CAN1_STW_STATUS_R2_D_PROGRESS_NONE_CHOICE (0u) +#define CAN1_STW_STATUS_R2_D_PROGRESS_TSMS_CHOICE (1u) +#define CAN1_STW_STATUS_R2_D_PROGRESS_TS_ACTIVE_CHOICE (2u) +#define CAN1_STW_STATUS_R2_D_PROGRESS_RESETTING_NODES_CHOICE (3u) +#define CAN1_STW_STATUS_R2_D_PROGRESS_RESETTING_COMMS_CHOICE (4u) +#define CAN1_STW_STATUS_R2_D_PROGRESS_WAITING_INIT_CHOICE (5u) +#define CAN1_STW_STATUS_R2_D_PROGRESS_INIT_STAGE1_CHOICE (6u) +#define CAN1_STW_STATUS_R2_D_PROGRESS_INIT_STAGE2_CHOICE (7u) +#define CAN1_STW_STATUS_R2_D_PROGRESS_INIT_SUCCESS_CHOICE (15u) + +#define CAN1_STW_STATUS_AS_STATE_STW_OFF_CHOICE (0u) +#define CAN1_STW_STATUS_AS_STATE_STW_MANUAL_CHOICE (1u) +#define CAN1_STW_STATUS_AS_STATE_STW_READY_CHOICE (2u) +#define CAN1_STW_STATUS_AS_STATE_STW_DRIVING_CHOICE (3u) +#define CAN1_STW_STATUS_AS_STATE_STW_FINISHED_CHOICE (4u) +#define CAN1_STW_STATUS_AS_STATE_STW_EMERGENCY_CHOICE (5u) + +#define CAN1_STW_STATUS_INI_CHK_STATE_START_CHOICE (0u) +#define CAN1_STW_STATUS_INI_CHK_STATE_WD_CHECK_CHOICE (1u) +#define CAN1_STW_STATUS_INI_CHK_STATE_WD_OK_CHOICE (2u) +#define CAN1_STW_STATUS_INI_CHK_STATE_ASB_CHECK_1_CHOICE (3u) +#define CAN1_STW_STATUS_INI_CHK_STATE_ASB_CHECK_2_CHOICE (4u) +#define CAN1_STW_STATUS_INI_CHK_STATE_WAIT_TS_CHOICE (5u) +#define CAN1_STW_STATUS_INI_CHK_STATE_EBS_CHECK_A_CHOICE (6u) +#define CAN1_STW_STATUS_INI_CHK_STATE_EBS_CHECK_B_CHOICE (7u) +#define CAN1_STW_STATUS_INI_CHK_STATE_DONE_CHOICE (8u) +#define CAN1_STW_STATUS_INI_CHK_STATE_ERROR_CHOICE (9u) + +/* Frame Names. */ +#define CAN1_INVERTER_VELOCITY_NAME "Inverter_Velocity" +#define CAN1_INVERTER_ERRORS_WARNINGS_NAME "Inverter_Errors_Warnings" +#define CAN1_INVERTER_TORQUE_ACTUAL_CW_NAME "Inverter_Torque_Actual_CW" +#define CAN1_INVERTER_TEMPERATUR_NAME "Inverter_Temperatur" +#define CAN1_INVERTER_TORQUE_WANTED_NAME "Inverter_Torque_wanted" +#define CAN1_SDO_TELEMETRIE_RX_NODE1_NAME "SDO_Telemetrie_Rx_Node1" +#define CAN1_SDO_TELEMETRIE_RX_NODE2_NAME "SDO_Telemetrie_Rx_Node2" +#define CAN1_SDO_TELEMETRIE_TX_NAME "SDO_Telemetrie_Tx" +#define CAN1_LAPTOP_SDO_NODE_NAME "Laptop_SDO_Node" +#define CAN1_X_SENS_LONG_LAT_NAME "XSens_LongLat" +#define CAN1_X_SENS_RATEOFTURN_NAME "XSens_rateofturn" +#define CAN1_X_SENS_ACCELERATION_NAME "XSens_Acceleration" +#define CAN1_X_SENS_VELOCITY_NAME "XSens_Velocity" +#define CAN1_TELEMETRIE_NAME "Telemetrie" +#define CAN1_OVERRIDE_POWERMAP_NAME "Override_Powermap" +#define CAN1_OVERRIDE_LAPTOP_2_NAME "Override_Laptop_2" +#define CAN1_OVERRIDE_EPSC_COOLING_NAME "Override_EPSC_Cooling" +#define CAN1_OVERRIDE_LAPTOP_NAME "Override_Laptop" +#define CAN1_APPS_OVERRIDE_NAME "APPS_Override" +#define CAN1_FTCU_DAMPER_NAME "FTCU_Damper" +#define CAN1_FTCU_PARAM_CONFIRM_NAME "FTCU_ParamConfirm" +#define CAN1_SENSORNODE_F_10_HZ_NAME "Sensornode_F_10Hz" +#define CAN1_SENSORNODE_F_100_HZ_1_NAME "Sensornode_F_100Hz_1" +#define CAN1_SENSORNODE_F_100_HZ_2_NAME "Sensornode_F_100Hz_2" +#define CAN1_SENSORNODE_F_1K_HZ_NAME "Sensornode_F_1kHz" +#define CAN1_SENSORNODE_R_10_HZ_NAME "Sensornode_R_10Hz" +#define CAN1_SENSORNODE_R_100_HZ_NAME "Sensornode_R_100Hz" +#define CAN1_SENSORNODE_R_1K_HZ_NAME "Sensornode_R_1kHz" +#define CAN1_PWM_DUTY_CYCLE_NAME "PWM_DutyCycle" +#define CAN1_PWM_CONFIG_NAME "PWM_Config" +#define CAN1_DASHBOARD_IN_NAME "Dashboard_In" +#define CAN1_AMS_SLAVE1_STATUS_NAME "AMS_Slave1Status" +#define CAN1_AMS_SLAVE2_LOG0_NAME "AMS_Slave2_Log0" +#define CAN1_AMS_SLAVE2_LOG1_NAME "AMS_Slave2_Log1" +#define CAN1_AMS_SLAVE2_LOG2_NAME "AMS_Slave2_Log2" +#define CAN1_AMS_SLAVE2_LOG3_NAME "AMS_Slave2_Log3" +#define CAN1_AMS_SLAVE2_LOG4_NAME "AMS_Slave2_Log4" +#define CAN1_AMS_SLAVE2_LOG5_NAME "AMS_Slave2_Log5" +#define CAN1_AMS_SLAVE5_LOG6_NAME "AMS_Slave5_Log6" +#define CAN1_AMS_SLAVE4_LOG6_NAME "AMS_Slave4_Log6" +#define CAN1_AMS_SLAVE3_LOG6_NAME "AMS_Slave3_Log6" +#define CAN1_AMS_SLAVE2_LOG6_NAME "AMS_Slave2_Log6" +#define CAN1_AMS_SLAVE1_LOG6_NAME "AMS_Slave1_Log6" +#define CAN1_AMS_SLAVE5_LOG5_NAME "AMS_Slave5_Log5" +#define CAN1_AMS_SLAVE4_LOG5_NAME "AMS_Slave4_Log5" +#define CAN1_AMS_SLAVE3_LOG5_NAME "AMS_Slave3_Log5" +#define CAN1_AMS_SLAVE1_LOG5_NAME "AMS_Slave1_Log5" +#define CAN1_AMS_SLAVE5_LOG4_NAME "AMS_Slave5_Log4" +#define CAN1_AMS_SLAVE4_LOG4_NAME "AMS_Slave4_Log4" +#define CAN1_AMS_SLAVE3_LOG4_NAME "AMS_Slave3_Log4" +#define CAN1_AMS_SLAVE1_LOG4_NAME "AMS_Slave1_Log4" +#define CAN1_AMS_SLAVE5_LOG3_NAME "AMS_Slave5_Log3" +#define CAN1_AMS_SLAVE4_LOG3_NAME "AMS_Slave4_Log3" +#define CAN1_AMS_SLAVE3_LOG3_NAME "AMS_Slave3_Log3" +#define CAN1_AMS_SLAVE1_LOG3_NAME "AMS_Slave1_Log3" +#define CAN1_AMS_SLAVE5_LOG2_NAME "AMS_Slave5_Log2" +#define CAN1_AMS_SLAVE4_LOG2_NAME "AMS_Slave4_Log2" +#define CAN1_AMS_SLAVE3_LOG2_NAME "AMS_Slave3_Log2" +#define CAN1_AMS_SLAVE1_LOG2_NAME "AMS_Slave1_Log2" +#define CAN1_AMS_SLAVE5_LOG1_NAME "AMS_Slave5_Log1" +#define CAN1_AMS_SLAVE4_LOG1_NAME "AMS_Slave4_Log1" +#define CAN1_AMS_SLAVE3_LOG1_NAME "AMS_Slave3_Log1" +#define CAN1_AMS_SLAVE1_LOG1_NAME "AMS_Slave1_Log1" +#define CAN1_AMS_SLAVE5_LOG0_NAME "AMS_Slave5_Log0" +#define CAN1_AMS_SLAVE4_LOG0_NAME "AMS_Slave4_Log0" +#define CAN1_AMS_SLAVE3_LOG0_NAME "AMS_Slave3_Log0" +#define CAN1_AMS_SLAVE1_LOG0_NAME "AMS_Slave1_Log0" +#define CAN1_PDU_HEARTBEAT_NAME "PDU_Heartbeat" +#define CAN1_FTCU_PNEUMATIK_NAME "FTCU_Pneumatik" +#define CAN1_ACU_TX_COMMANDS_NAME "ACU_TX_Commands" +#define CAN1_ACU_RX_COMMANDS_NAME "ACU_RX_Commands" +#define CAN1_ACU_RX_NAME "ACU_RX" +#define CAN1_AMS_SLAVE0_LOG0_NAME "AMS_Slave0_Log0" +#define CAN1_AMS_SLAVE0_LOG1_NAME "AMS_Slave0_Log1" +#define CAN1_AMS_SLAVE0_LOG3_NAME "AMS_Slave0_Log3" +#define CAN1_AMS_SLAVE0_LOG4_NAME "AMS_Slave0_Log4" +#define CAN1_AMS_SLAVE0_LOG5_NAME "AMS_Slave0_Log5" +#define CAN1_AMS_SLAVE0_LOG6_NAME "AMS_Slave0_Log6" +#define CAN1_ACU_TX_NAME "ACU_TX" +#define CAN1_AMS_SLAVE5_STATUS_NAME "AMS_Slave5Status" +#define CAN1_AMS_SLAVE4_STATUS_NAME "AMS_Slave4Status" +#define CAN1_AMS_SLAVE3_STATUS_NAME "AMS_Slave3Status" +#define CAN1_AMS_SLAVE2_STATUS_NAME "AMS_Slave2Status" +#define CAN1_AMS_ERROR_NAME "AMS_Error" +#define CAN1_FTCU_COOLING_NAME "FTCU_Cooling" +#define CAN1_FTCU_BRAKE_T_NAME "FTCU_BrakeT" +#define CAN1_FTCU_WHEELSPEED_NAME "FTCU_Wheelspeed" +#define CAN1_FTCU_TIMINGS_NAME "FTCU_Timings" +#define CAN1_FTCU_DRIVER_NAME "FTCU_Driver" +#define CAN1_TTS_RR_NAME "TTS_RR" +#define CAN1_TTS_RL_NAME "TTS_RL" +#define CAN1_TTS_FR_NAME "TTS_FR" +#define CAN1_TTS_FL_NAME "TTS_FL" +#define CAN1_STW_PARAM_SET_NAME "STW_Param_Set" +#define CAN1_AMS_SLAVE0_STATUS_NAME "AMS_Slave0Status" +#define CAN1_SSU_MESSAGE_NAME "SSU_Message" +#define CAN1_AMS_STATUS_NAME "AMS_Status" +#define CAN1_AMS_SLAVE_PANIC_NAME "AMS_SlavePanic" +#define CAN1_AMS_IN_NAME "AMS_In" +#define CAN1_SHUNT_CURRENT_NAME "Shunt_Current" +#define CAN1_SHUNT_VOLTAGE1_NAME "Shunt_Voltage1" +#define CAN1_SHUNT_VOLTAGE2_NAME "Shunt_Voltage2" +#define CAN1_SHUNT_VOLTAGE3_NAME "Shunt_Voltage3" +#define CAN1_SHUNT_TEMPERATURE_NAME "Shunt_Temperature" +#define CAN1_PDU_COMMAND_NAME "PDU_Command" +#define CAN1_PDU_RESPONSE_NAME "PDU_Response" +#define CAN1_AS_MISSION_FB_NAME "AS_Mission_fb" +#define CAN1_STW_MISSION_SELECTED_NAME "STW_mission_selected" +#define CAN1_EPSC_OUT_NAME "EPSC_out" +#define CAN1_EPSC_STEERING_IN_NAME "EPSC_Steering_In" +#define CAN1_STW_BUTTONS_NAME "STW_buttons" +#define CAN1_STW_STATUS_NAME "STW_status" +#define CAN1_PDU_CURRENT_1_NAME "PDU_Current_1" +#define CAN1_PDU_CURRENT_2_NAME "PDU_Current_2" +#define CAN1_PDU_CURRENT_3_NAME "PDU_Current_3" +#define CAN1_PDU_CURRENT_4_NAME "PDU_Current_4" +#define CAN1_EPSC_CONFIG_IN_NAME "EPSC_Config_In" + +/* Signal Names. */ +#define CAN1_INVERTER_VELOCITY_INVERTER_1_VELOCITY_NAME "Inverter_1_Velocity" +#define CAN1_INVERTER_VELOCITY_INVERTER_2_VELOCITY_NAME "Inverter_2_Velocity" +#define CAN1_INVERTER_ERRORS_WARNINGS_INVERTER_1_ERRORS_NAME "Inverter_1_Errors" +#define CAN1_INVERTER_ERRORS_WARNINGS_INVERTER_1_WARNINGS_NAME "Inverter_1_Warnings" +#define CAN1_INVERTER_ERRORS_WARNINGS_INVERTER_2_ERRORS_NAME "Inverter_2_Errors" +#define CAN1_INVERTER_ERRORS_WARNINGS_INVERTER_2_WARNINGS_NAME "Inverter_2_Warnings" +#define CAN1_INVERTER_TORQUE_ACTUAL_CW_INVERTER_1_CONTROL_WORD_NAME "Inverter_1_ControlWord" +#define CAN1_INVERTER_TORQUE_ACTUAL_CW_INVERTER_1_TORQUE_ACTUAL_NAME "Inverter_1_Torque_Actual" +#define CAN1_INVERTER_TORQUE_ACTUAL_CW_INVERTER_2_CONTROL_WORD_NAME "Inverter_2_ControlWord" +#define CAN1_INVERTER_TORQUE_ACTUAL_CW_INVERTER_2_TORQUE_ACTUAL_NAME "Inverter_2_Torque_Actual" +#define CAN1_INVERTER_TEMPERATUR_INVERTER_1_TEMP_INV_NAME "Inverter_1_Temp_Inv" +#define CAN1_INVERTER_TEMPERATUR_INVERTER_1_TEMP_MOT_NAME "Inverter_1_Temp_Mot" +#define CAN1_INVERTER_TEMPERATUR_INVERTER_2_TEMP_INV_NAME "Inverter_2_Temp_Inv" +#define CAN1_INVERTER_TEMPERATUR_INVERTER_2_TEMP_MOT_NAME "Inverter_2_Temp_Mot" +#define CAN1_INVERTER_TORQUE_WANTED_INVERTER_1_TORQUE_DEMANDED_NAME "Inverter_1_Torque_Demanded" +#define CAN1_INVERTER_TORQUE_WANTED_INVERTER_2_TORQUE_DEMANDED_NAME "Inverter_2_Torque_Demanded" +#define CAN1_INVERTER_TORQUE_WANTED_INVERTER_1_TORQUE_DESIRED_NAME "Inverter_1_Torque_Desired" +#define CAN1_INVERTER_TORQUE_WANTED_INVERTER_2_TORQUE_DESIRED_NAME "Inverter_2_Torque_Desired" +#define CAN1_SDO_TELEMETRIE_RX_NODE1_SDO_COMMAND_BYTE_NAME "SDO_command_byte" +#define CAN1_SDO_TELEMETRIE_RX_NODE1_SDO_OD_INDEX_NAME "SDO_OD_index" +#define CAN1_SDO_TELEMETRIE_RX_NODE1_SDO_OD_SUBINDEX_NAME "SDO_OD_subindex" +#define CAN1_SDO_TELEMETRIE_RX_NODE1_SDO_DATA_NAME "SDO_data" +#define CAN1_SDO_TELEMETRIE_RX_NODE2_SDO_COMMAND_BYTE_NAME "SDO_command_byte" +#define CAN1_SDO_TELEMETRIE_RX_NODE2_SDO_OD_INDEX_NAME "SDO_OD_index" +#define CAN1_SDO_TELEMETRIE_RX_NODE2_SDO_OD_SUBINDEX_NAME "SDO_OD_subindex" +#define CAN1_SDO_TELEMETRIE_RX_NODE2_SDO_DATA_NAME "SDO_data" +#define CAN1_SDO_TELEMETRIE_TX_SDO_COMMAND_BYTE_NAME "SDO_command_byte" +#define CAN1_SDO_TELEMETRIE_TX_SDO_OD_INDEX_NAME "SDO_OD_index" +#define CAN1_SDO_TELEMETRIE_TX_SDO_OD_SUBINDEX_NAME "SDO_OD_subindex" +#define CAN1_SDO_TELEMETRIE_TX_SDO_DATA_NAME "SDO_data" +#define CAN1_LAPTOP_SDO_NODE_NODE_ID_SDO_NAME "Node_ID_SDO" +#define CAN1_X_SENS_LONG_LAT_X_SENS_LATITUDE_NAME "XSens_latitude" +#define CAN1_X_SENS_LONG_LAT_X_SENS_LONGITUDE_NAME "XSens_longitude" +#define CAN1_X_SENS_RATEOFTURN_X_SENS_GYR_X_NAME "XSens_gyrX" +#define CAN1_X_SENS_RATEOFTURN_X_SENS_GY_Y_NAME "XSens_gyY" +#define CAN1_X_SENS_RATEOFTURN_X_SENS_GY_Z_NAME "XSens_gyZ" +#define CAN1_X_SENS_ACCELERATION_X_SENS_ACC_X_NAME "XSens_accX" +#define CAN1_X_SENS_ACCELERATION_X_SENS_ACC_Y_NAME "XSens_accY" +#define CAN1_X_SENS_ACCELERATION_X_SENS_ACC_Z_NAME "XSens_accZ" +#define CAN1_X_SENS_VELOCITY_X_SENS_VEL_X_NAME "XSens_velX" +#define CAN1_X_SENS_VELOCITY_X_SENS_VEL_Y_NAME "XSens_velY" +#define CAN1_X_SENS_VELOCITY_X_SENS_VEL_Z_NAME "XSens_velZ" +#define CAN1_TELEMETRIE_INI_CHECK_ERROR_STATE_NAME "Ini_Check_error_State" +#define CAN1_TELEMETRIE_POWERMAP_NAME "Powermap" +#define CAN1_TELEMETRIE_APPS_OK_NAME "APPS_ok" +#define CAN1_TELEMETRIE_BRAKE_OK_NAME "Brake_ok" +#define CAN1_TELEMETRIE_ALLOW_TORQUE_NAME "Allow_Torque" +#define CAN1_TELEMETRIE_ASP_OK_NAME "ASP_ok" +#define CAN1_TELEMETRIE_PRESSURE_SENSOR_OK_NAME "Pressure_Sensor_ok" +#define CAN1_TELEMETRIE_TORQUE_VECTORING_ON_NAME "Torque_Vectoring_on" +#define CAN1_TELEMETRIE_REKU_ON_NAME "Reku_on" +#define CAN1_TELEMETRIE_TRACTION_CONTROL_ON_NAME "Traction_Control_on" +#define CAN1_TELEMETRIE_TS_DEACTIVATE_NAME "TS_deactivate" +#define CAN1_TELEMETRIE_TORQUE_LIMIT_NAME "Torque_Limit" +#define CAN1_TELEMETRIE_POWER_LIMIT_NAME "Power_Limit" +#define CAN1_TELEMETRIE_TORQUE_LIMIT_DYNAMISCH_NAME "Torque_Limit_dynamisch" +#define CAN1_TELEMETRIE_TORQUE_OHNE_LIMIT_L_NAME "Torque_ohne_Limit_L" +#define CAN1_TELEMETRIE_TORQUE_OHNE_LIMIT_R_NAME "Torque_ohne_Limit_R" +#define CAN1_OVERRIDE_POWERMAP_LAPTOPP_POWER_MAP_NAME "Laptopp_Power_Map" +#define CAN1_OVERRIDE_POWERMAP_LAPTOP_REKU_NAME "Laptop_Reku" +#define CAN1_OVERRIDE_POWERMAP_LAPTOP_TC_NAME "Laptop_TC" +#define CAN1_OVERRIDE_POWERMAP_LAPTOP_TV_NAME "Laptop_TV" +#define CAN1_OVERRIDE_POWERMAP_LAPTOP_SLIPREF_NAME "Laptop_slipref" +#define CAN1_OVERRIDE_POWERMAP_LAPTOP_TC_I_NAME "Laptop_TC_I" +#define CAN1_OVERRIDE_POWERMAP_LAPTOP_TC_P_NAME "Laptop_TC_P" +#define CAN1_OVERRIDE_POWERMAP_LAPTOP_TC_MUMAX_NAME "Laptop_TC_Mumax" +#define CAN1_OVERRIDE_LAPTOP_2_AS_MISSION_NAME "AS_Mission" +#define CAN1_OVERRIDE_LAPTOP_2_AS_STATE_NAME "AS_State" +#define CAN1_OVERRIDE_LAPTOP_2_MANUAL_INPUT_TORQUE_NAME "manual_input_torque" +#define CAN1_OVERRIDE_LAPTOP_2_LAPTOP_POWERLIMIT_NAME "Laptop_Powerlimit" +#define CAN1_OVERRIDE_LAPTOP_2_LAPTOP_TORQUE_LIM_NAME "Laptop_Torque_Lim" +#define CAN1_OVERRIDE_EPSC_COOLING_EPSC_MANUAL_ANGLE_NAME "EPSC_manual_angle" +#define CAN1_OVERRIDE_EPSC_COOLING_EPSC_MODE_NAME "EPSC_mode" +#define CAN1_OVERRIDE_EPSC_COOLING_AC_COOLING_ENABLE_NAME "AC_Cooling_enable" +#define CAN1_OVERRIDE_EPSC_COOLING_TS_COOLING_ENABLE_NAME "TS_cooling_enable" +#define CAN1_OVERRIDE_EPSC_COOLING_AC_COOLING_PWM_NAME "AC_cooling_PWM" +#define CAN1_OVERRIDE_EPSC_COOLING_TS_COOLING_PWM_NAME "TS_cooling_PWM" +#define CAN1_OVERRIDE_LAPTOP_FAKE_R2_D_NAME "Fake_R2D" +#define CAN1_OVERRIDE_LAPTOP_FAKE_SOUNDBOX_EMERGENCY_NAME "Fake_Soundbox_Emergency" +#define CAN1_OVERRIDE_LAPTOP_FAKE_SOUNDBOX_R2_D_NAME "Fake_Soundbox_R2D" +#define CAN1_OVERRIDE_LAPTOP_FAKE_TS_ACTIVE_NAME "Fake_TS_Active" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_APPS_NAME "override_APPS" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_AS_MISSION_NAME "override_AS_Mission" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_AS_STATE_NAME "override_AS_State" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_EPSC_MODE_NAME "override_EPSC_mode" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_PDU_AC_COOLING_ENABLE_NAME "override_PDU_AC_Cooling_enable" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_PDU_ACU_ENABLE_NAME "override_PDU_ACU_enable" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_PDU_DRS_ENABLE_NAME "override_PDU_DRS_enable" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_PDU_EPSC_ENABLE_NAME "override_PDU_EPSC_enable" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_PDU_HEARTBEAT_NAME "override_PDU_Heartbeat" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_PDU_LIDAR_ENABLE_NAME "override_PDU_Lidar_enable" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_PDU_PN_V1_ENABLE_NAME "override_PDU_PN_V1_enable" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_PDU_PN_V2_ENABLE_NAME "override_PDU_PN_V2_enable" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_PDU_TS_COOLING_ENABLE_NAME "override_PDU_TS_Cooling_enable" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_POWER_MAP_NAME "override_Power_Map" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_TC_PARAMETER_NAME "override_TC_parameter" +#define CAN1_OVERRIDE_LAPTOP_OVERRIDE_TORQUE_INPUT_NAME "override_torque_input" +#define CAN1_APPS_OVERRIDE_APPS_0_MAX_NAME "APPS_0_max" +#define CAN1_APPS_OVERRIDE_APPS_0_MIN_NAME "APPS_0_min" +#define CAN1_APPS_OVERRIDE_APPS_1_MAX_NAME "APPS_1_max" +#define CAN1_APPS_OVERRIDE_APPS_1_MIN_NAME "APPS_1_min" +#define CAN1_FTCU_DAMPER_FTCU_DAMPER_FL_NAME "FTCU_Damper_FL" +#define CAN1_FTCU_DAMPER_FTCU_DAMPER_FR_NAME "FTCU_Damper_FR" +#define CAN1_FTCU_DAMPER_FTCU_DAMPER_RL_NAME "FTCU_Damper_RL" +#define CAN1_FTCU_DAMPER_FTCU_DAMPER_RR_NAME "FTCU_Damper_RR" +#define CAN1_FTCU_PARAM_CONFIRM_FTCU_PARAM_CONFIRM_NAME "FTCU_Param_Confirm" +#define CAN1_SENSORNODE_F_10_HZ_LS_L_NAME "LS_L" +#define CAN1_SENSORNODE_F_10_HZ_LS_R_NAME "LS_R" +#define CAN1_SENSORNODE_F_10_HZ_SDC_M_PRE_BOTS_NAME "SDC_M_pre_BOTS" +#define CAN1_SENSORNODE_F_10_HZ_SDC_M_POST_INS_NAME "SDC_M_post_INS" +#define CAN1_SENSORNODE_F_10_HZ_SDC_M_POST_BSPD_NAME "SDC_M_post_BSPD" +#define CAN1_SENSORNODE_F_10_HZ_BDTS_FL_NAME "BDTS_FL" +#define CAN1_SENSORNODE_F_10_HZ_BDTS_FR_NAME "BDTS_FR" +#define CAN1_SENSORNODE_F_100_HZ_1_APPS_1_NAME "APPS_1" +#define CAN1_SENSORNODE_F_100_HZ_1_APPS_2_NAME "APPS_2" +#define CAN1_SENSORNODE_F_100_HZ_1_BP_F_NAME "BP_F" +#define CAN1_SENSORNODE_F_100_HZ_1_SAS_NAME "SAS" +#define CAN1_SENSORNODE_F_100_HZ_1_WSS_FL_NAME "WSS_FL" +#define CAN1_SENSORNODE_F_100_HZ_1_WSS_FR_NAME "WSS_FR" +#define CAN1_SENSORNODE_F_100_HZ_2_DS_FL_NAME "DS_FL" +#define CAN1_SENSORNODE_F_100_HZ_2_DS_FR_NAME "DS_FR" +#define CAN1_SENSORNODE_F_1K_HZ_SLS_FL_NAME "SLS_FL" +#define CAN1_SENSORNODE_F_1K_HZ_SLS_FR_NAME "SLS_FR" +#define CAN1_SENSORNODE_R_10_HZ_EXT_TS_ON_NAME "ExtTSOn" +#define CAN1_SENSORNODE_R_10_HZ_SDC_M_PRE_TSMS_NAME "SDC_M_pre_TSMS" +#define CAN1_SENSORNODE_R_10_HZ_SDC_M_POST_TSMS_NAME "SDC_M_post_TSMS" +#define CAN1_SENSORNODE_R_10_HZ_BDTS_RL_NAME "BDTS_RL" +#define CAN1_SENSORNODE_R_10_HZ_BDTS_RR_NAME "BDTS_RR" +#define CAN1_SENSORNODE_R_10_HZ_WT_BAT_NAME "WT_BAT" +#define CAN1_SENSORNODE_R_10_HZ_WT_DT_NAME "WT_DT" +#define CAN1_SENSORNODE_R_10_HZ_WP_BAT_NAME "WP_BAT" +#define CAN1_SENSORNODE_R_10_HZ_WP_DT_NAME "WP_DT" +#define CAN1_SENSORNODE_R_100_HZ_EBS_APS_1_NAME "EBS_APS_1" +#define CAN1_SENSORNODE_R_100_HZ_EBS_APS_2_NAME "EBS_APS_2" +#define CAN1_SENSORNODE_R_100_HZ_BP_R_NAME "BP_R" +#define CAN1_SENSORNODE_R_100_HZ_WSS_RL_NAME "WSS_RL" +#define CAN1_SENSORNODE_R_100_HZ_WSS_RR_NAME "WSS_RR" +#define CAN1_SENSORNODE_R_100_HZ_DS_RL_NAME "DS_RL" +#define CAN1_SENSORNODE_R_100_HZ_DS_RR_NAME "DS_RR" +#define CAN1_SENSORNODE_R_1K_HZ_SLS_RL_NAME "SLS_RL" +#define CAN1_SENSORNODE_R_1K_HZ_SLS_RR_NAME "SLS_RR" +#define CAN1_PWM_DUTY_CYCLE_DC_DRS_NAME "DC_DRS" +#define CAN1_PWM_DUTY_CYCLE_DC_ASSI_Y_NAME "DC_ASSI_Y" +#define CAN1_PWM_DUTY_CYCLE_DC_ASSI_B_NAME "DC_ASSI_B" +#define CAN1_PWM_DUTY_CYCLE_DC_BL_NAME "DC_BL" +#define CAN1_PWM_DUTY_CYCLE_DC_FANS_DT_NAME "DC_Fans_DT" +#define CAN1_PWM_DUTY_CYCLE_DC_FANS_BAT_NAME "DC_Fans_BAT" +#define CAN1_PWM_DUTY_CYCLE_DC_SBX_NAME "DC_SBX" +#define CAN1_PWM_CONFIG_FREQ_PWM1_DRS_LIGHTING_NAME "Freq_PWM1_DRS_Lighting" +#define CAN1_PWM_CONFIG_FREQ_PWM3_FANS_NAME "Freq_PWM3_Fans" +#define CAN1_PWM_CONFIG_FREQ_PWM2_SBX_NAME "Freq_PWM2_SBX" +#define CAN1_DASHBOARD_IN_DASHBOARD_R2_D_BUTTON_NAME "Dashboard_R2D_Button" +#define CAN1_DASHBOARD_IN_DASHBOARD_TS_ACTIVATE_BUTTON_NAME "Dashboard_TS_Activate_Button" +#define CAN1_DASHBOARD_IN_DASHBOARD_RACE_KEY_NAME "Dashboard_Race_Key" +#define CAN1_DASHBOARD_IN_DASHBOARD_SDC_IN_NAME "Dashboard_SDC_in" +#define CAN1_DASHBOARD_IN_DASHBOARD_SDC_OUT_NAME "Dashboard_SDC_out" +#define CAN1_AMS_SLAVE1_STATUS_AMS_SLAVE_STATUS_ERROR_NAME "AMS_SlaveStatus_Error" +#define CAN1_AMS_SLAVE1_STATUS_AMS_SLAVE_STATUS_ID_NAME "AMS_SlaveStatus_ID" +#define CAN1_AMS_SLAVE1_STATUS_AMS_SLAVE_STATUS_TEMP_SENSOR_NAME "AMS_SlaveStatus_Temp_Sensor" +#define CAN1_AMS_SLAVE1_STATUS_AMS_SLAVE_STATUS_MIN_CELL_VOLT_NAME "AMS_SlaveStatus_MinCellVolt" +#define CAN1_AMS_SLAVE1_STATUS_AMS_SLAVE_STATUS_MAX_CELL_VOLT_NAME "AMS_SlaveStatus_MaxCellVolt" +#define CAN1_AMS_SLAVE1_STATUS_AMS_SLAVE_STATUS_MAX_TEMP_NAME "AMS_SlaveStatus_MaxTemp" +#define CAN1_AMS_SLAVE2_LOG0_AMS_SLAVE_ID_V0_NAME "AMS_SlaveID_V0" +#define CAN1_AMS_SLAVE2_LOG0_AMS_SLAVE_ID_V1_NAME "AMS_SlaveID_V1" +#define CAN1_AMS_SLAVE2_LOG0_AMS_SLAVE_ID_V2_NAME "AMS_SlaveID_V2" +#define CAN1_AMS_SLAVE2_LOG0_AMS_SLAVE_ID_V3_NAME "AMS_SlaveID_V3" +#define CAN1_AMS_SLAVE2_LOG1_AMS_SLAVE_ID_V4_NAME "AMS_SlaveID_V4" +#define CAN1_AMS_SLAVE2_LOG1_AMS_SLAVE_ID_V5_NAME "AMS_SlaveID_V5" +#define CAN1_AMS_SLAVE2_LOG1_AMS_SLAVE_ID_V6_NAME "AMS_SlaveID_V6" +#define CAN1_AMS_SLAVE2_LOG1_AMS_SLAVE_ID_V7_NAME "AMS_SlaveID_V7" +#define CAN1_AMS_SLAVE2_LOG2_AMS_SLAVE_ID_V8_NAME "AMS_SlaveID_V8" +#define CAN1_AMS_SLAVE2_LOG2_AMS_SLAVE_ID_V9_NAME "AMS_SlaveID_V9" +#define CAN1_AMS_SLAVE2_LOG2_AMS_SLAVE_ID_V10_NAME "AMS_SlaveID_V10" +#define CAN1_AMS_SLAVE2_LOG2_AMS_SLAVE_ID_V11_NAME "AMS_SlaveID_V11" +#define CAN1_AMS_SLAVE2_LOG3_AMS_SLAVE_ID_V12_NAME "AMS_SlaveID_V12" +#define CAN1_AMS_SLAVE2_LOG3_AMS_SLAVE_ID_V13_NAME "AMS_SlaveID_V13" +#define CAN1_AMS_SLAVE2_LOG3_AMS_SLAVE_ID_V14_NAME "AMS_SlaveID_V14" +#define CAN1_AMS_SLAVE2_LOG3_AMS_SLAVE_ID_V15_NAME "AMS_SlaveID_V15" +#define CAN1_AMS_SLAVE2_LOG4_AMS_SLAVE_ID_FAILED_SENSORS_NAME "AMS_SlaveID_FailedSensors" +#define CAN1_AMS_SLAVE2_LOG5_AMS_SLAVE_ID_T0_NAME "AMS_SlaveID_T0" +#define CAN1_AMS_SLAVE2_LOG5_AMS_SLAVE_ID_T1_NAME "AMS_SlaveID_T1" +#define CAN1_AMS_SLAVE2_LOG5_AMS_SLAVE_ID_T2_NAME "AMS_SlaveID_T2" +#define CAN1_AMS_SLAVE2_LOG5_AMS_SLAVE_ID_T3_NAME "AMS_SlaveID_T3" +#define CAN1_AMS_SLAVE2_LOG5_AMS_SLAVE_ID_T4_NAME "AMS_SlaveID_T4" +#define CAN1_AMS_SLAVE2_LOG5_AMS_SLAVE_ID_T5_NAME "AMS_SlaveID_T5" +#define CAN1_AMS_SLAVE2_LOG5_AMS_SLAVE_ID_T6_NAME "AMS_SlaveID_T6" +#define CAN1_AMS_SLAVE2_LOG5_AMS_SLAVE_ID_T7_NAME "AMS_SlaveID_T7" +#define CAN1_AMS_SLAVE5_LOG6_AMS_SLAVE_ID_T8_NAME "AMS_SlaveID_T8" +#define CAN1_AMS_SLAVE5_LOG6_AMS_SLAVE_ID_T9_NAME "AMS_SlaveID_T9" +#define CAN1_AMS_SLAVE4_LOG6_AMS_SLAVE_ID_T8_NAME "AMS_SlaveID_T8" +#define CAN1_AMS_SLAVE4_LOG6_AMS_SLAVE_ID_T9_NAME "AMS_SlaveID_T9" +#define CAN1_AMS_SLAVE3_LOG6_AMS_SLAVE_ID_T8_NAME "AMS_SlaveID_T8" +#define CAN1_AMS_SLAVE3_LOG6_AMS_SLAVE_ID_T9_NAME "AMS_SlaveID_T9" +#define CAN1_AMS_SLAVE2_LOG6_AMS_SLAVE_ID_T8_NAME "AMS_SlaveID_T8" +#define CAN1_AMS_SLAVE2_LOG6_AMS_SLAVE_ID_T9_NAME "AMS_SlaveID_T9" +#define CAN1_AMS_SLAVE1_LOG6_AMS_SLAVE_ID_T8_NAME "AMS_SlaveID_T8" +#define CAN1_AMS_SLAVE1_LOG6_AMS_SLAVE_ID_T9_NAME "AMS_SlaveID_T9" +#define CAN1_AMS_SLAVE5_LOG5_AMS_SLAVE_ID_T0_NAME "AMS_SlaveID_T0" +#define CAN1_AMS_SLAVE5_LOG5_AMS_SLAVE_ID_T1_NAME "AMS_SlaveID_T1" +#define CAN1_AMS_SLAVE5_LOG5_AMS_SLAVE_ID_T2_NAME "AMS_SlaveID_T2" +#define CAN1_AMS_SLAVE5_LOG5_AMS_SLAVE_ID_T3_NAME "AMS_SlaveID_T3" +#define CAN1_AMS_SLAVE5_LOG5_AMS_SLAVE_ID_T4_NAME "AMS_SlaveID_T4" +#define CAN1_AMS_SLAVE5_LOG5_AMS_SLAVE_ID_T5_NAME "AMS_SlaveID_T5" +#define CAN1_AMS_SLAVE5_LOG5_AMS_SLAVE_ID_T6_NAME "AMS_SlaveID_T6" +#define CAN1_AMS_SLAVE5_LOG5_AMS_SLAVE_ID_T7_NAME "AMS_SlaveID_T7" +#define CAN1_AMS_SLAVE4_LOG5_AMS_SLAVE_ID_T0_NAME "AMS_SlaveID_T0" +#define CAN1_AMS_SLAVE4_LOG5_AMS_SLAVE_ID_T1_NAME "AMS_SlaveID_T1" +#define CAN1_AMS_SLAVE4_LOG5_AMS_SLAVE_ID_T2_NAME "AMS_SlaveID_T2" +#define CAN1_AMS_SLAVE4_LOG5_AMS_SLAVE_ID_T3_NAME "AMS_SlaveID_T3" +#define CAN1_AMS_SLAVE4_LOG5_AMS_SLAVE_ID_T4_NAME "AMS_SlaveID_T4" +#define CAN1_AMS_SLAVE4_LOG5_AMS_SLAVE_ID_T5_NAME "AMS_SlaveID_T5" +#define CAN1_AMS_SLAVE4_LOG5_AMS_SLAVE_ID_T6_NAME "AMS_SlaveID_T6" +#define CAN1_AMS_SLAVE4_LOG5_AMS_SLAVE_ID_T7_NAME "AMS_SlaveID_T7" +#define CAN1_AMS_SLAVE3_LOG5_AMS_SLAVE_ID_T0_NAME "AMS_SlaveID_T0" +#define CAN1_AMS_SLAVE3_LOG5_AMS_SLAVE_ID_T1_NAME "AMS_SlaveID_T1" +#define CAN1_AMS_SLAVE3_LOG5_AMS_SLAVE_ID_T2_NAME "AMS_SlaveID_T2" +#define CAN1_AMS_SLAVE3_LOG5_AMS_SLAVE_ID_T3_NAME "AMS_SlaveID_T3" +#define CAN1_AMS_SLAVE3_LOG5_AMS_SLAVE_ID_T4_NAME "AMS_SlaveID_T4" +#define CAN1_AMS_SLAVE3_LOG5_AMS_SLAVE_ID_T5_NAME "AMS_SlaveID_T5" +#define CAN1_AMS_SLAVE3_LOG5_AMS_SLAVE_ID_T6_NAME "AMS_SlaveID_T6" +#define CAN1_AMS_SLAVE3_LOG5_AMS_SLAVE_ID_T7_NAME "AMS_SlaveID_T7" +#define CAN1_AMS_SLAVE1_LOG5_AMS_SLAVE_ID_T0_NAME "AMS_SlaveID_T0" +#define CAN1_AMS_SLAVE1_LOG5_AMS_SLAVE_ID_T1_NAME "AMS_SlaveID_T1" +#define CAN1_AMS_SLAVE1_LOG5_AMS_SLAVE_ID_T2_NAME "AMS_SlaveID_T2" +#define CAN1_AMS_SLAVE1_LOG5_AMS_SLAVE_ID_T3_NAME "AMS_SlaveID_T3" +#define CAN1_AMS_SLAVE1_LOG5_AMS_SLAVE_ID_T4_NAME "AMS_SlaveID_T4" +#define CAN1_AMS_SLAVE1_LOG5_AMS_SLAVE_ID_T5_NAME "AMS_SlaveID_T5" +#define CAN1_AMS_SLAVE1_LOG5_AMS_SLAVE_ID_T6_NAME "AMS_SlaveID_T6" +#define CAN1_AMS_SLAVE1_LOG5_AMS_SLAVE_ID_T7_NAME "AMS_SlaveID_T7" +#define CAN1_AMS_SLAVE5_LOG4_AMS_SLAVE_ID_FAILED_SENSORS_NAME "AMS_SlaveID_FailedSensors" +#define CAN1_AMS_SLAVE4_LOG4_AMS_SLAVE_ID_FAILED_SENSORS_NAME "AMS_SlaveID_FailedSensors" +#define CAN1_AMS_SLAVE3_LOG4_AMS_SLAVE_ID_FAILED_SENSORS_NAME "AMS_SlaveID_FailedSensors" +#define CAN1_AMS_SLAVE1_LOG4_AMS_SLAVE_ID_FAILED_SENSORS_NAME "AMS_SlaveID_FailedSensors" +#define CAN1_AMS_SLAVE5_LOG3_AMS_SLAVE_ID_V12_NAME "AMS_SlaveID_V12" +#define CAN1_AMS_SLAVE5_LOG3_AMS_SLAVE_ID_V13_NAME "AMS_SlaveID_V13" +#define CAN1_AMS_SLAVE5_LOG3_AMS_SLAVE_ID_V14_NAME "AMS_SlaveID_V14" +#define CAN1_AMS_SLAVE5_LOG3_AMS_SLAVE_ID_V15_NAME "AMS_SlaveID_V15" +#define CAN1_AMS_SLAVE4_LOG3_AMS_SLAVE_ID_V12_NAME "AMS_SlaveID_V12" +#define CAN1_AMS_SLAVE4_LOG3_AMS_SLAVE_ID_V13_NAME "AMS_SlaveID_V13" +#define CAN1_AMS_SLAVE4_LOG3_AMS_SLAVE_ID_V14_NAME "AMS_SlaveID_V14" +#define CAN1_AMS_SLAVE4_LOG3_AMS_SLAVE_ID_V15_NAME "AMS_SlaveID_V15" +#define CAN1_AMS_SLAVE3_LOG3_AMS_SLAVE_ID_V12_NAME "AMS_SlaveID_V12" +#define CAN1_AMS_SLAVE3_LOG3_AMS_SLAVE_ID_V13_NAME "AMS_SlaveID_V13" +#define CAN1_AMS_SLAVE3_LOG3_AMS_SLAVE_ID_V14_NAME "AMS_SlaveID_V14" +#define CAN1_AMS_SLAVE3_LOG3_AMS_SLAVE_ID_V15_NAME "AMS_SlaveID_V15" +#define CAN1_AMS_SLAVE1_LOG3_AMS_SLAVE_ID_V12_NAME "AMS_SlaveID_V12" +#define CAN1_AMS_SLAVE1_LOG3_AMS_SLAVE_ID_V13_NAME "AMS_SlaveID_V13" +#define CAN1_AMS_SLAVE1_LOG3_AMS_SLAVE_ID_V14_NAME "AMS_SlaveID_V14" +#define CAN1_AMS_SLAVE1_LOG3_AMS_SLAVE_ID_V15_NAME "AMS_SlaveID_V15" +#define CAN1_AMS_SLAVE5_LOG2_AMS_SLAVE_ID_V8_NAME "AMS_SlaveID_V8" +#define CAN1_AMS_SLAVE5_LOG2_AMS_SLAVE_ID_V9_NAME "AMS_SlaveID_V9" +#define CAN1_AMS_SLAVE5_LOG2_AMS_SLAVE_ID_V10_NAME "AMS_SlaveID_V10" +#define CAN1_AMS_SLAVE5_LOG2_AMS_SLAVE_ID_V11_NAME "AMS_SlaveID_V11" +#define CAN1_AMS_SLAVE4_LOG2_AMS_SLAVE_ID_V8_NAME "AMS_SlaveID_V8" +#define CAN1_AMS_SLAVE4_LOG2_AMS_SLAVE_ID_V9_NAME "AMS_SlaveID_V9" +#define CAN1_AMS_SLAVE4_LOG2_AMS_SLAVE_ID_V10_NAME "AMS_SlaveID_V10" +#define CAN1_AMS_SLAVE4_LOG2_AMS_SLAVE_ID_V11_NAME "AMS_SlaveID_V11" +#define CAN1_AMS_SLAVE3_LOG2_AMS_SLAVE_ID_V8_NAME "AMS_SlaveID_V8" +#define CAN1_AMS_SLAVE3_LOG2_AMS_SLAVE_ID_V9_NAME "AMS_SlaveID_V9" +#define CAN1_AMS_SLAVE3_LOG2_AMS_SLAVE_ID_V10_NAME "AMS_SlaveID_V10" +#define CAN1_AMS_SLAVE3_LOG2_AMS_SLAVE_ID_V11_NAME "AMS_SlaveID_V11" +#define CAN1_AMS_SLAVE1_LOG2_AMS_SLAVE_ID_V8_NAME "AMS_SlaveID_V8" +#define CAN1_AMS_SLAVE1_LOG2_AMS_SLAVE_ID_V9_NAME "AMS_SlaveID_V9" +#define CAN1_AMS_SLAVE1_LOG2_AMS_SLAVE_ID_V10_NAME "AMS_SlaveID_V10" +#define CAN1_AMS_SLAVE1_LOG2_AMS_SLAVE_ID_V11_NAME "AMS_SlaveID_V11" +#define CAN1_AMS_SLAVE5_LOG1_AMS_SLAVE_ID_V4_NAME "AMS_SlaveID_V4" +#define CAN1_AMS_SLAVE5_LOG1_AMS_SLAVE_ID_V5_NAME "AMS_SlaveID_V5" +#define CAN1_AMS_SLAVE5_LOG1_AMS_SLAVE_ID_V6_NAME "AMS_SlaveID_V6" +#define CAN1_AMS_SLAVE5_LOG1_AMS_SLAVE_ID_V7_NAME "AMS_SlaveID_V7" +#define CAN1_AMS_SLAVE4_LOG1_AMS_SLAVE_ID_V4_NAME "AMS_SlaveID_V4" +#define CAN1_AMS_SLAVE4_LOG1_AMS_SLAVE_ID_V5_NAME "AMS_SlaveID_V5" +#define CAN1_AMS_SLAVE4_LOG1_AMS_SLAVE_ID_V6_NAME "AMS_SlaveID_V6" +#define CAN1_AMS_SLAVE4_LOG1_AMS_SLAVE_ID_V7_NAME "AMS_SlaveID_V7" +#define CAN1_AMS_SLAVE3_LOG1_AMS_SLAVE_ID_V4_NAME "AMS_SlaveID_V4" +#define CAN1_AMS_SLAVE3_LOG1_AMS_SLAVE_ID_V5_NAME "AMS_SlaveID_V5" +#define CAN1_AMS_SLAVE3_LOG1_AMS_SLAVE_ID_V6_NAME "AMS_SlaveID_V6" +#define CAN1_AMS_SLAVE3_LOG1_AMS_SLAVE_ID_V7_NAME "AMS_SlaveID_V7" +#define CAN1_AMS_SLAVE1_LOG1_AMS_SLAVE_ID_V4_NAME "AMS_SlaveID_V4" +#define CAN1_AMS_SLAVE1_LOG1_AMS_SLAVE_ID_V5_NAME "AMS_SlaveID_V5" +#define CAN1_AMS_SLAVE1_LOG1_AMS_SLAVE_ID_V6_NAME "AMS_SlaveID_V6" +#define CAN1_AMS_SLAVE1_LOG1_AMS_SLAVE_ID_V7_NAME "AMS_SlaveID_V7" +#define CAN1_AMS_SLAVE5_LOG0_AMS_SLAVE_ID_V0_NAME "AMS_SlaveID_V0" +#define CAN1_AMS_SLAVE5_LOG0_AMS_SLAVE_ID_V1_NAME "AMS_SlaveID_V1" +#define CAN1_AMS_SLAVE5_LOG0_AMS_SLAVE_ID_V2_NAME "AMS_SlaveID_V2" +#define CAN1_AMS_SLAVE5_LOG0_AMS_SLAVE_ID_V3_NAME "AMS_SlaveID_V3" +#define CAN1_AMS_SLAVE4_LOG0_AMS_SLAVE_ID_V0_NAME "AMS_SlaveID_V0" +#define CAN1_AMS_SLAVE4_LOG0_AMS_SLAVE_ID_V1_NAME "AMS_SlaveID_V1" +#define CAN1_AMS_SLAVE4_LOG0_AMS_SLAVE_ID_V2_NAME "AMS_SlaveID_V2" +#define CAN1_AMS_SLAVE4_LOG0_AMS_SLAVE_ID_V3_NAME "AMS_SlaveID_V3" +#define CAN1_AMS_SLAVE3_LOG0_AMS_SLAVE_ID_V0_NAME "AMS_SlaveID_V0" +#define CAN1_AMS_SLAVE3_LOG0_AMS_SLAVE_ID_V1_NAME "AMS_SlaveID_V1" +#define CAN1_AMS_SLAVE3_LOG0_AMS_SLAVE_ID_V2_NAME "AMS_SlaveID_V2" +#define CAN1_AMS_SLAVE3_LOG0_AMS_SLAVE_ID_V3_NAME "AMS_SlaveID_V3" +#define CAN1_AMS_SLAVE1_LOG0_AMS_SLAVE_ID_V0_NAME "AMS_SlaveID_V0" +#define CAN1_AMS_SLAVE1_LOG0_AMS_SLAVE_ID_V1_NAME "AMS_SlaveID_V1" +#define CAN1_AMS_SLAVE1_LOG0_AMS_SLAVE_ID_V2_NAME "AMS_SlaveID_V2" +#define CAN1_AMS_SLAVE1_LOG0_AMS_SLAVE_ID_V3_NAME "AMS_SlaveID_V3" +#define CAN1_PDU_HEARTBEAT_PDU_HEARTBEAT_NAME "PDU_Heartbeat" +#define CAN1_FTCU_PNEUMATIK_FTCU_TANK_PRESSURE_1_NAME "FTCU_Tank_Pressure_1" +#define CAN1_FTCU_PNEUMATIK_FTCU_TANK_PRESSURE_2_NAME "FTCU_Tank_Pressure_2" +#define CAN1_ACU_TX_COMMANDS_ABX_SPEED_FL_NAME "ABX_Speed_FL" +#define CAN1_ACU_TX_COMMANDS_ABX_SPEED_FR_NAME "ABX_Speed_FR" +#define CAN1_ACU_TX_COMMANDS_ABX_SPEED_RL_NAME "ABX_Speed_RL" +#define CAN1_ACU_TX_COMMANDS_ABX_SPEED_RR_NAME "ABX_Speed_RR" +#define CAN1_ACU_TX_COMMANDS_ABX_STEERING_ANGLE_LEFT_NAME "ABX_Steering_Angle_Left" +#define CAN1_ACU_TX_COMMANDS_ABX_STEERING_ANGLE_RIGHT_NAME "ABX_Steering_Angle_Right" +#define CAN1_ACU_RX_COMMANDS_ACU_SPEED_TARGET_LEFT_NAME "ACU_Speed_Target_left" +#define CAN1_ACU_RX_COMMANDS_ACU_SPEED_TARGET_RIGHT_NAME "ACU_Speed_Target_right" +#define CAN1_ACU_RX_COMMANDS_ACU_STEERING_ANGLE_RIGHT_NAME "ACU_Steering_Angle_Right" +#define CAN1_ACU_RX_COMMANDS_ACU_STEERING_ANGLE_LEFT_NAME "ACU_Steering_Angle_Left" +#define CAN1_ACU_RX_ACU_AS_MISSION_COMPLETE_NAME "ACU_AS_Mission_Complete" +#define CAN1_ACU_RX_ACU_AS_OK_NAME "ACU_AS_OK" +#define CAN1_ACU_RX_ACU_DRS_NAME "ACU_DRS" +#define CAN1_ACU_RX_ACU_LAP_COUNT_NAME "ACU_Lap_Count" +#define CAN1_ACU_RX_ACU_CONES_ALL_NAME "ACU_Cones_All" +#define CAN1_ACU_RX_ACU_CONES_ACTUAL_NAME "ACU_Cones_Actual" +#define CAN1_AMS_SLAVE0_LOG0_AMS_SLAVE_ID_V0_NAME "AMS_SlaveID_V0" +#define CAN1_AMS_SLAVE0_LOG0_AMS_SLAVE_ID_V1_NAME "AMS_SlaveID_V1" +#define CAN1_AMS_SLAVE0_LOG0_AMS_SLAVE_ID_V2_NAME "AMS_SlaveID_V2" +#define CAN1_AMS_SLAVE0_LOG0_AMS_SLAVE_ID_V3_NAME "AMS_SlaveID_V3" +#define CAN1_AMS_SLAVE0_LOG1_AMS_SLAVE_ID_V4_NAME "AMS_SlaveID_V4" +#define CAN1_AMS_SLAVE0_LOG1_AMS_SLAVE_ID_V5_NAME "AMS_SlaveID_V5" +#define CAN1_AMS_SLAVE0_LOG1_AMS_SLAVE_ID_V6_NAME "AMS_SlaveID_V6" +#define CAN1_AMS_SLAVE0_LOG1_AMS_SLAVE_ID_V7_NAME "AMS_SlaveID_V7" +#define CAN1_AMS_SLAVE0_LOG3_AMS_SLAVE_ID_V12_NAME "AMS_SlaveID_V12" +#define CAN1_AMS_SLAVE0_LOG3_AMS_SLAVE_ID_V13_NAME "AMS_SlaveID_V13" +#define CAN1_AMS_SLAVE0_LOG3_AMS_SLAVE_ID_V14_NAME "AMS_SlaveID_V14" +#define CAN1_AMS_SLAVE0_LOG3_AMS_SLAVE_ID_V15_NAME "AMS_SlaveID_V15" +#define CAN1_AMS_SLAVE0_LOG4_AMS_SLAVE_ID_FAILED_SENSORS_NAME "AMS_SlaveID_FailedSensors" +#define CAN1_AMS_SLAVE0_LOG5_AMS_SLAVE_ID_T0_NAME "AMS_SlaveID_T0" +#define CAN1_AMS_SLAVE0_LOG5_AMS_SLAVE_ID_T1_NAME "AMS_SlaveID_T1" +#define CAN1_AMS_SLAVE0_LOG5_AMS_SLAVE_ID_T2_NAME "AMS_SlaveID_T2" +#define CAN1_AMS_SLAVE0_LOG5_AMS_SLAVE_ID_T3_NAME "AMS_SlaveID_T3" +#define CAN1_AMS_SLAVE0_LOG5_AMS_SLAVE_ID_T4_NAME "AMS_SlaveID_T4" +#define CAN1_AMS_SLAVE0_LOG5_AMS_SLAVE_ID_T5_NAME "AMS_SlaveID_T5" +#define CAN1_AMS_SLAVE0_LOG5_AMS_SLAVE_ID_T6_NAME "AMS_SlaveID_T6" +#define CAN1_AMS_SLAVE0_LOG5_AMS_SLAVE_ID_T7_NAME "AMS_SlaveID_T7" +#define CAN1_AMS_SLAVE0_LOG6_AMS_SLAVE_ID_T8_NAME "AMS_SlaveID_T8" +#define CAN1_AMS_SLAVE0_LOG6_AMS_SLAVE_ID_T9_NAME "AMS_SlaveID_T9" +#define CAN1_ACU_TX_ACU_AS_MISSION_NAME "ACU_AS_Mission" +#define CAN1_ACU_TX_ACU_AS_STATE_NAME "ACU_AS_State" +#define CAN1_ACU_TX_ACU_POWER_OFF_NAME "ACU_Power_Off" +#define CAN1_ACU_TX_ACU_RESET_NAME "ACU_Reset" +#define CAN1_ACU_TX_ACU_ALLOW_TORQUE_NAME "ACU_AllowTorque" +#define CAN1_ACU_TX_ABX_CON_MON_ERROR_NAME "ABX_ConMon_Error" +#define CAN1_AMS_SLAVE5_STATUS_AMS_SLAVE_STATUS_ERROR_NAME "AMS_SlaveStatus_Error" +#define CAN1_AMS_SLAVE5_STATUS_AMS_SLAVE_STATUS_ID_NAME "AMS_SlaveStatus_ID" +#define CAN1_AMS_SLAVE5_STATUS_AMS_SLAVE_STATUS_TEMP_SENSOR_NAME "AMS_SlaveStatus_Temp_sensor" +#define CAN1_AMS_SLAVE5_STATUS_AMS_SLAVE_STATUS_MIN_CELL_VOLT_NAME "AMS_SlaveStatus_MinCellVolt" +#define CAN1_AMS_SLAVE5_STATUS_AMS_SLAVE_STATUS_MAX_CELL_VOLT_NAME "AMS_SlaveStatus_MaxCellVolt" +#define CAN1_AMS_SLAVE5_STATUS_AMS_SLAVE_STATUS_MAX_TEMP_NAME "AMS_SlaveStatus_MaxTemp" +#define CAN1_AMS_SLAVE4_STATUS_AMS_SLAVE_STATUS_ERROR_NAME "AMS_SlaveStatus_Error" +#define CAN1_AMS_SLAVE4_STATUS_AMS_SLAVE_STATUS_ID_NAME "AMS_SlaveStatus_ID" +#define CAN1_AMS_SLAVE4_STATUS_AMS_SLAVE_STATUS_TEMP_SENSOR_NAME "AMS_SlaveStatus_Temp_sensor" +#define CAN1_AMS_SLAVE4_STATUS_AMS_SLAVE_STATUS_MIN_CELL_VOLT_NAME "AMS_SlaveStatus_MinCellVolt" +#define CAN1_AMS_SLAVE4_STATUS_AMS_SLAVE_STATUS_MAX_CELL_VOLT_NAME "AMS_SlaveStatus_MaxCellVolt" +#define CAN1_AMS_SLAVE4_STATUS_AMS_SLAVE_STATUS_MAX_TEMP_NAME "AMS_SlaveStatus_MaxTemp" +#define CAN1_AMS_SLAVE3_STATUS_AMS_SLAVE_STATUS_ERROR_NAME "AMS_SlaveStatus_Error" +#define CAN1_AMS_SLAVE3_STATUS_AMS_SLAVE_STATUS_ID_NAME "AMS_SlaveStatus_ID" +#define CAN1_AMS_SLAVE3_STATUS_AMS_SLAVE_STATUS_TEMP_SENSOR_NAME "AMS_SlaveStatus_Temp_sensor" +#define CAN1_AMS_SLAVE3_STATUS_AMS_SLAVE_STATUS_MIN_CELL_VOLT_NAME "AMS_SlaveStatus_MinCellVolt" +#define CAN1_AMS_SLAVE3_STATUS_AMS_SLAVE_STATUS_MAX_CELL_VOLT_NAME "AMS_SlaveStatus_MaxCellVolt" +#define CAN1_AMS_SLAVE3_STATUS_AMS_SLAVE_STATUS_MAX_TEMP_NAME "AMS_SlaveStatus_MaxTemp" +#define CAN1_AMS_SLAVE2_STATUS_AMS_SLAVE_STATUS_ERROR_NAME "AMS_SlaveStatus_Error" +#define CAN1_AMS_SLAVE2_STATUS_AMS_SLAVE_STATUS_ID_NAME "AMS_SlaveStatus_ID" +#define CAN1_AMS_SLAVE2_STATUS_AMS_SLAVE_STATUS_TEMP_SENSOR_NAME "AMS_SlaveStatus_Temp_sensor" +#define CAN1_AMS_SLAVE2_STATUS_AMS_SLAVE_STATUS_MIN_CELL_VOLT_NAME "AMS_SlaveStatus_MinCellVolt" +#define CAN1_AMS_SLAVE2_STATUS_AMS_SLAVE_STATUS_MAX_CELL_VOLT_NAME "AMS_SlaveStatus_MaxCellVolt" +#define CAN1_AMS_SLAVE2_STATUS_AMS_SLAVE_STATUS_MAX_TEMP_NAME "AMS_SlaveStatus_MaxTemp" +#define CAN1_AMS_ERROR_AMS_ERROR_KIND_NAME "AMS_Error_Kind" +#define CAN1_AMS_ERROR_AMS_ERROR_ARG_NAME "AMS_Error_Arg" +#define CAN1_FTCU_COOLING_FTCU_WATER_PRESSURE_2_NAME "FTCU_Water_Pressure_2" +#define CAN1_FTCU_COOLING_FTCU_WATER_PRESSURE_1_NAME "FTCU_Water_Pressure_1" +#define CAN1_FTCU_COOLING_FTCU_WATER_TEMPERATURE_1_NAME "FTCU_Water_Temperature_1" +#define CAN1_FTCU_COOLING_FTCU_WATER_TEMPERATURE_2_NAME "FTCU_Water_Temperature_2" +#define CAN1_FTCU_COOLING_FTCU_FLOW_RATE_NAME "FTCU_Flow_rate" +#define CAN1_FTCU_BRAKE_T_FTCU_BRAKE_T_FL_NAME "FTCU_BrakeT_FL" +#define CAN1_FTCU_BRAKE_T_FTCU_BRAKE_T_FR_NAME "FTCU_BrakeT_FR" +#define CAN1_FTCU_BRAKE_T_FTCU_BRAKE_T_RL_NAME "FTCU_BrakeT_RL" +#define CAN1_FTCU_BRAKE_T_FTCU_BRAKE_T_RR_NAME "FTCU_BrakeT_RR" +#define CAN1_FTCU_WHEELSPEED_FTCU_WHEELSPEED_FL_NAME "FTCU_Wheelspeed_FL" +#define CAN1_FTCU_WHEELSPEED_FTCU_WHEELSPEED_FR_NAME "FTCU_Wheelspeed_FR" +#define CAN1_FTCU_WHEELSPEED_FTCU_WHEELSPEED_RL_NAME "FTCU_Wheelspeed_RL" +#define CAN1_FTCU_WHEELSPEED_FTCU_WHEELSPEED_RR_NAME "FTCU_Wheelspeed_RR" +#define CAN1_FTCU_WHEELSPEED_FTCU_DISTANCE_SESSION_NAME "FTCU_Distance_Session" +#define CAN1_FTCU_TIMINGS_FTCU_LAPTIME_BEST_NAME "FTCU_Laptime_best" +#define CAN1_FTCU_TIMINGS_FTCU_LAPTIME_LAST_NAME "FTCU_Laptime_last" +#define CAN1_FTCU_TIMINGS_FTCU_SECTORTIME_BEST_NAME "FTCU_Sectortime_best" +#define CAN1_FTCU_TIMINGS_FTCU_SECTORTIME_LAST_NAME "FTCU_Sectortime_last" +#define CAN1_FTCU_DRIVER_FTCU_APPS_PERCENT_NAME "FTCU_APPS_Percent" +#define CAN1_FTCU_DRIVER_FTCU_BRAKE_PRESSURE_F_NAME "FTCU_Brake_Pressure_F" +#define CAN1_FTCU_DRIVER_FTCU_BRAKE_PRESSURE_R_NAME "FTCU_Brake_Pressure_R" +#define CAN1_FTCU_DRIVER_FTCU_STEERING_ANGLE_NAME "FTCU_Steering_Angle" +#define CAN1_FTCU_DRIVER_FTCU_SPEED_NAME "FTCU_Speed" +#define CAN1_FTCU_DRIVER_FTCU_LAPCOUNTER_NAME "FTCU_Lapcounter" +#define CAN1_FTCU_DRIVER_FTCU_SECTORCOUNTER_NAME "FTCU_Sectorcounter" +#define CAN1_TTS_RR_TTS_OUTER_LEFT_NAME "TTS_OuterLeft" +#define CAN1_TTS_RR_TTS_CENTER_LEFT_NAME "TTS_CenterLeft" +#define CAN1_TTS_RR_TTS_CENTER_NAME "TTS_Center" +#define CAN1_TTS_RR_TTS_CENTER_RIGHT_NAME "TTS_CenterRight" +#define CAN1_TTS_RR_TTS_OUTET_RIGHT_NAME "TTS_OutetRight" +#define CAN1_TTS_RR_TTS_STATUS_NAME "TTS_Status" +#define CAN1_TTS_RL_TTS_OUTER_LEFT_NAME "TTS_OuterLeft" +#define CAN1_TTS_RL_TTS_CENTER_LEFT_NAME "TTS_CenterLeft" +#define CAN1_TTS_RL_TTS_CENTER_NAME "TTS_Center" +#define CAN1_TTS_RL_TTS_CENTER_RIGHT_NAME "TTS_CenterRight" +#define CAN1_TTS_RL_TTS_OUTER_RIGHT_NAME "TTS_OuterRight" +#define CAN1_TTS_RL_TTS_STATUS_NAME "TTS_Status" +#define CAN1_TTS_FR_TTS_OUTER_LEFT_NAME "TTS_OuterLeft" +#define CAN1_TTS_FR_TTS_CENTER_LEFT_NAME "TTS_CenterLeft" +#define CAN1_TTS_FR_TTS_CENTER_NAME "TTS_Center" +#define CAN1_TTS_FR_TTS_CENTER_RIGHT_NAME "TTS_CenterRight" +#define CAN1_TTS_FR_TTS_OUTER_RIGHT_NAME "TTS_OuterRight" +#define CAN1_TTS_FR_TTS_STATUS_NAME "TTS_Status" +#define CAN1_TTS_FL_TTS_OUTER_LEFT_NAME "TTS_OuterLeft" +#define CAN1_TTS_FL_TTS_CENTER_LEFT_NAME "TTS_CenterLeft" +#define CAN1_TTS_FL_TTS_CENTER_NAME "TTS_Center" +#define CAN1_TTS_FL_TTS_CENTER_RIGHT_NAME "TTS_CenterRight" +#define CAN1_TTS_FL_TTS_OUTER_RIGHT_NAME "TTS_OuterRight" +#define CAN1_TTS_FL_TTS_STATUS_NAME "TTS_Status" +#define CAN1_STW_PARAM_SET_STW_PARAM_SET_NAME "STW_Param_Set" +#define CAN1_STW_PARAM_SET_STW_PARAM_TC_SLIPREF_NAME "STW_Param_TC_Slipref" +#define CAN1_STW_PARAM_SET_STW_PARAM_TC_MUMAX_NAME "STW_Param_TC_Mumax" +#define CAN1_STW_PARAM_SET_STW_PARAM_TC_I_NAME "STW_Param_TC_I" +#define CAN1_STW_PARAM_SET_STW_PARAM_PLIM_NAME "STW_Param_Plim" +#define CAN1_STW_PARAM_SET_STW_PARAM_TLIM_NAME "STW_Param_Tlim" +#define CAN1_STW_PARAM_SET_STW_PARAM_TC_P_NAME "STW_Param_TC_P" +#define CAN1_STW_PARAM_SET_STW_PARAM_REKU_NAME "STW_Param_Reku" +#define CAN1_STW_PARAM_SET_STW_PARAM_TC_ON_NAME "STW_Param_TC_on" +#define CAN1_STW_PARAM_SET_STW_PARAM_TV_ON_NAME "STW_Param_TV_on" +#define CAN1_STW_PARAM_SET_STW_PARAM_DISCIPLINE_NAME "STW_Param_Discipline" +#define CAN1_STW_PARAM_SET_STW_PARAM_SLIM_NAME "STW_Param_Slim" +#define CAN1_AMS_SLAVE0_STATUS_AMS_SLAVE_STATUS_ERROR_NAME "AMS_SlaveStatus_Error" +#define CAN1_AMS_SLAVE0_STATUS_AMS_SLAVE_STATUS_ID_NAME "AMS_SlaveStatus_ID" +#define CAN1_AMS_SLAVE0_STATUS_AMS_SLAVE_STATUS_TEMP_SENSOR_NAME "AMS_SlaveStatus_Temp_sensor" +#define CAN1_AMS_SLAVE0_STATUS_AMS_SLAVE_STATUS_MIN_CELL_VOLT_NAME "AMS_SlaveStatus_MinCellVolt" +#define CAN1_AMS_SLAVE0_STATUS_AMS_SLAVE_STATUS_MAX_CELL_VOLT_NAME "AMS_SlaveStatus_MaxCellVolt" +#define CAN1_AMS_SLAVE0_STATUS_AMS_SLAVE_STATUS_MAX_TEMP_NAME "AMS_SlaveStatus_MaxTemp" +#define CAN1_SSU_MESSAGE_SSU_PRESSURE_NAME "SSU_Pressure" +#define CAN1_SSU_MESSAGE_SSU_AIR_TEMP_NAME "SSU_AirTemp" +#define CAN1_AMS_STATUS_AMS_STATE_NAME "AMS_State" +#define CAN1_AMS_STATUS_SDC_CLOSED_NAME "SDC_Closed" +#define CAN1_AMS_STATUS_SOC_NAME "SOC" +#define CAN1_AMS_STATUS_MIN_CELL_VOLT_NAME "Min_cell_volt" +#define CAN1_AMS_STATUS_MAX_CELL_TEMP_NAME "Max_cell_temp" +#define CAN1_AMS_STATUS_AMS_IMD_STATE_NAME "AMS_IMD_State" +#define CAN1_AMS_STATUS_AMS_IMD_OK_NAME "AMS_IMD_ok" +#define CAN1_AMS_SLAVE_PANIC_AMS_SLAVE_PANIC_SLAVE_ID_NAME "AMS_SlavePanic_SlaveID" +#define CAN1_AMS_SLAVE_PANIC_AMS_SLAVE_PANIC_KIND_NAME "AMS_SlavePanic_Kind" +#define CAN1_AMS_SLAVE_PANIC_AMS_SLAVE_PANIC_ARG_NAME "AMS_SlavePanic_Arg" +#define CAN1_AMS_IN_TS_ACTIVATE_NAME "TS_activate" +#define CAN1_AMS_IN_INVERTERS_DISCHARGED_NAME "Inverters_discharged" +#define CAN1_AMS_IN_LAP_NUMBER_NAME "Lap_Number" +#define CAN1_SHUNT_CURRENT_SHUNT_CURRENT_NAME "Shunt_Current" +#define CAN1_SHUNT_VOLTAGE1_SHUNT_VOLTAGE1_NAME "Shunt_Voltage1" +#define CAN1_SHUNT_VOLTAGE2_SHUNT_VOLTAGE2_NAME "Shunt_Voltage2" +#define CAN1_SHUNT_VOLTAGE3_SHUNT_VOLTAGE3_NAME "Shunt_Voltage3" +#define CAN1_SHUNT_TEMPERATURE_SHUNT_TEMPERATURE_NAME "Shunt_Temperature" +#define CAN1_PDU_COMMAND_PDU_ENABLE_MISC_NAME "PDU_enable_misc" +#define CAN1_PDU_COMMAND_PDU_ENABLE_SDC_NAME "PDU_enable_sdc" +#define CAN1_PDU_COMMAND_PDU_ENABLE_INVERTER_NAME "PDU_enable_inverter" +#define CAN1_PDU_COMMAND_PDU_ENABLE_TS_COOLING_NAME "PDU_enable_TS_Cooling" +#define CAN1_PDU_COMMAND_PDU_ENABLE_ACC_COOLING_NAME "PDU_enable_ACC_Cooling" +#define CAN1_PDU_COMMAND_PDU_ENABLE_LLDAR_NAME "PDU_enable_lldar" +#define CAN1_PDU_COMMAND_PDU_ENABLE_DRS_NAME "PDU_enable_DRS" +#define CAN1_PDU_COMMAND_PDU_ENABLE_EPSC_NAME "PDU_enable_EPSC" +#define CAN1_PDU_COMMAND_PDU_ENABLE_ACU_NAME "PDU__enable_ACU" +#define CAN1_PDU_COMMAND_PDU_ENABLE_EBS_A_NAME "PDU_enable_EBS_A" +#define CAN1_PDU_COMMAND_PDU_ENABLE_EBS_B_NAME "PDU_enable_EBS_B" +#define CAN1_PDU_COMMAND_PDU_ENABLE_EBS_C_NAME "PDU_enable_EBS_C" +#define CAN1_PDU_RESPONSE_PDU_ALWAYSON_TX_NAME "PDU_alwayson_tx" +#define CAN1_PDU_RESPONSE_PDU_SHUTDOWN_CIRCUIT_TX_NAME "PDU_shutdown_circuit_tx" +#define CAN1_PDU_RESPONSE_PDU_LIDAR_TX_NAME "PDU_lidar_tx" +#define CAN1_PDU_RESPONSE_PDU_ACU_TX_NAME "PDU_ACU_tx" +#define CAN1_PDU_RESPONSE_PDU_SERVOS_REGLER_TX_NAME "PDU_servos_regler_tx" +#define CAN1_PDU_RESPONSE_PDU_INVERTER_TX_NAME "PDU_inverter_tx" +#define CAN1_PDU_RESPONSE_PDU_MISC_TX_NAME "PDU_misc_tx" +#define CAN1_PDU_RESPONSE_PDU_SERVO_TX_NAME "PDU_servo_tx" +#define CAN1_PDU_RESPONSE_PDU_EBS_VALVE_1_TX_NAME "PDU_ebs_valve_1_tx" +#define CAN1_PDU_RESPONSE_PDU_EBS_VALVE_2_TX_NAME "PDU_ebs_valve_2_tx" +#define CAN1_PDU_RESPONSE_PDU_CS_VALVE_TX_NAME "PDU_cs_valve_tx" +#define CAN1_PDU_RESPONSE_PDU_AGGREGAT_TX_NAME "PDU_aggregat_tx" +#define CAN1_PDU_RESPONSE_PDU_STEERING_TX_NAME "PDU_steering_tx" +#define CAN1_PDU_RESPONSE_PDU_PWM_TSAC_FANS_NAME "PDU_PWM_TSAC_fans" +#define CAN1_PDU_RESPONSE_PDU_PWM_RADIATOT_FANS_TX_NAME "PDU_PWM_radiatot_fans_tx" +#define CAN1_PDU_RESPONSE_PDU_PWM_AGGREGAT_NAME "PDU_PWM_aggregat" +#define CAN1_PDU_RESPONSE_PDU_PWM_PUMP_NAME "PDU_PWM_pump" +#define CAN1_PDU_RESPONSE_PDU_HEARTBEAT_OK_TX_NAME "PDU_heartbeat_ok_tx" +#define CAN1_AS_MISSION_FB_MISSION_SELECTION_NAME "Mission_selection" +#define CAN1_STW_MISSION_SELECTED_MISSION_SELECTION_NAME "Mission_selection" +#define CAN1_EPSC_OUT_EPSC_MEASURED_RPM_NAME "EPSC_measured_rpm" +#define CAN1_EPSC_OUT_EPSC_MEASURED_STEERING_ANGLE_NAME "EPSC_measured_steering_angle" +#define CAN1_EPSC_OUT_EPSC_MEASURED_MOSFET_TEMPERATURE_NAME "EPSC_measured_MOSFET_temperature" +#define CAN1_EPSC_OUT_EPSC_MEASURED_VOLTAGE_NAME "EPSC_measured_voltage" +#define CAN1_EPSC_OUT_EPSC_MEASURED_CURRENT_NAME "EPSC_measured_current" +#define CAN1_EPSC_STEERING_IN_EPSC_DESIRED_STEERING_ANGLE_NAME "EPSC_desired_steering_angle" +#define CAN1_STW_BUTTONS_STW_BUTTON_DRS_NAME "STW_button_DRS" +#define CAN1_STW_BUTTONS_STW_BUTTON_1_NAME "STW_button_1" +#define CAN1_STW_BUTTONS_STW_BUTTON_2_NAME "STW_button_2" +#define CAN1_STW_BUTTONS_STW_BUTTON_3_NAME "STW_button_3" +#define CAN1_STW_BUTTONS_STW_BUTTON_4_NAME "STW_button_4" +#define CAN1_STW_STATUS_LAP_COUNT_NAME "Lap_Count" +#define CAN1_STW_STATUS_ERR_PDU_NAME "ERR_PDU" +#define CAN1_STW_STATUS_ERR_RES_NAME "ERR_RES" +#define CAN1_STW_STATUS_R2_D_PROGRESS_NAME "R2D_Progress" +#define CAN1_STW_STATUS_AS_STATE_STW_NAME "AS_State_STW" +#define CAN1_STW_STATUS_ERR_AS_NAME "ERR_AS" +#define CAN1_STW_STATUS_ERR_APP_SP_NAME "ERR_APPSp" +#define CAN1_STW_STATUS_ERR_S_BSPD_NAME "ERR_sBSPD" +#define CAN1_STW_STATUS_ERR_SCS_NAME "ERR_SCS" +#define CAN1_STW_STATUS_ERR_CON_MON_NAME "ERR_ConMon" +#define CAN1_STW_STATUS_ERR_INI_CHK_NAME "ERR_IniChk" +#define CAN1_STW_STATUS_ERR_INV2_NAME "ERR_Inv2" +#define CAN1_STW_STATUS_ERR_INV1_NAME "ERR_Inv1" +#define CAN1_STW_STATUS_ERR_AMS_NAME "ERR_AMS" +#define CAN1_STW_STATUS_ERR_SDC_NAME "ERR_SDC" +#define CAN1_STW_STATUS_SDC_STATUS_NAME "SDC_Status" +#define CAN1_STW_STATUS_INV2_READY_NAME "Inv2_ready" +#define CAN1_STW_STATUS_INV1_READY_NAME "Inv1_ready" +#define CAN1_STW_STATUS_ENERGY_PER_LAP_NAME "Energy_per_Lap" +#define CAN1_STW_STATUS_INI_CHK_STATE_NAME "iniChk_state" +#define CAN1_PDU_CURRENT_1_PDU_ALWAYS_ON_CURRENT_NAME "PDU_always_on_current" +#define CAN1_PDU_CURRENT_1_PDU_LVMS_CURRENT_NAME "PDU_LVMS_current" +#define CAN1_PDU_CURRENT_1_PDU_ASMS_CURRENT_NAME "PDU_ASMS_current" +#define CAN1_PDU_CURRENT_1_PDU_MISC_CURRENT_NAME "PDU_MISC_current" +#define CAN1_PDU_CURRENT_2_PDU_SDC_CURRENT_NAME "PDU_SDC_current" +#define CAN1_PDU_CURRENT_2_PDU_INVERTER_CURRENT_NAME "PDU_Inverter_current" +#define CAN1_PDU_CURRENT_2_PDU_TS_COOLING_CURRENT_NAME "PDU_TS_Cooling_current" +#define CAN1_PDU_CURRENT_2_PDU_ACC_COOLING_CURRENT_NAME "PDU_ACC_Cooling_current" +#define CAN1_PDU_CURRENT_3_PDU_LIDAR_CURRENT_NAME "PDU_Lidar_current" +#define CAN1_PDU_CURRENT_3_PDU_DRS_CURRENT_NAME "PDU_DRS_current" +#define CAN1_PDU_CURRENT_3_PDU_EPSC_CURRENT_NAME "PDU_EPSC_current" +#define CAN1_PDU_CURRENT_3_PDU_ACU_CURRENT_NAME "PDU_ACU_current" +#define CAN1_PDU_CURRENT_4_PDU_EBS_A_CURRENT_NAME "PDU_EBS_A_current" +#define CAN1_PDU_CURRENT_4_PDU_EBS_B_CURRENT_NAME "PDU_EBS_B_current" +#define CAN1_EPSC_CONFIG_IN_EPSC_CONFIG_P_GAIN_NAME "EPSC_Config_P_Gain" +#define CAN1_EPSC_CONFIG_IN_EPSC_CONFIG_I_GAIN_NAME "EPSC_Config_I_Gain" +#define CAN1_EPSC_CONFIG_IN_EPSC_CONFIG_D_GAIN_NAME "EPSC_Config_D_Gain" + +/** + * Signals in message Inverter_Velocity. + * + * All signal values are as on the CAN bus. + */ +struct can1_inverter_velocity_t { + /** + * Range: -2147483648..2147483647 (-2147483.648..2147483.647 -) + * Scale: 0.001 + * Offset: 0 + */ + int32_t inverter_1_velocity; + + /** + * Range: -2147483648..2147483647 (-2147483.648..2147483.647 -) + * Scale: 0.001 + * Offset: 0 + */ + int32_t inverter_2_velocity; +}; + +/** + * Signals in message Inverter_Errors_Warnings. + * + * All signal values are as on the CAN bus. + */ +struct can1_inverter_errors_warnings_t { + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t inverter_1_errors; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t inverter_1_warnings; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t inverter_2_errors; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t inverter_2_warnings; +}; + +/** + * Signals in message Inverter_Torque_Actual_CW. + * + * All signal values are as on the CAN bus. + */ +struct can1_inverter_torque_actual_cw_t { + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t inverter_1_control_word; + + /** + * Range: -32768..32767 (-32768..32767 -) + * Scale: 1 + * Offset: 0 + */ + int16_t inverter_1_torque_actual; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t inverter_2_control_word; + + /** + * Range: -32768..32767 (-32768..32767 -) + * Scale: 1 + * Offset: 0 + */ + int16_t inverter_2_torque_actual; +}; + +/** + * Signals in message Inverter_Temperatur. + * + * All signal values are as on the CAN bus. + */ +struct can1_inverter_temperatur_t { + /** + * Range: -128..127 (-128..127 -) + * Scale: 1 + * Offset: 0 + */ + int16_t inverter_1_temp_inv; + + /** + * Range: -128..127 (-128..127 -) + * Scale: 1 + * Offset: 0 + */ + int16_t inverter_1_temp_mot; + + /** + * Range: -32768..32767 (-32768..32767 -) + * Scale: 1 + * Offset: 0 + */ + int16_t inverter_2_temp_inv; + + /** + * Range: -128..127 (-128..127 -) + * Scale: 1 + * Offset: 0 + */ + int16_t inverter_2_temp_mot; +}; + +/** + * Signals in message Inverter_Torque_wanted. + * + * All signal values are as on the CAN bus. + */ +struct can1_inverter_torque_wanted_t { + /** + * Range: -32768..32767 (-32768..32767 -) + * Scale: 1 + * Offset: 0 + */ + int16_t inverter_1_torque_demanded; + + /** + * Range: -32768..32767 (-32768..32767 -) + * Scale: 1 + * Offset: 0 + */ + int16_t inverter_2_torque_demanded; + + /** + * Range: -32768..32767 (-32768..32767 -) + * Scale: 1 + * Offset: 0 + */ + int16_t inverter_1_torque_desired; + + /** + * Range: -32768..32767 (-32768..32767 -) + * Scale: 1 + * Offset: 0 + */ + int16_t inverter_2_torque_desired; +}; + +/** + * Signals in message SDO_Telemetrie_Rx_Node1. + * + * All signal values are as on the CAN bus. + */ +struct can1_sdo_telemetrie_rx_node1_t { + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdo_command_byte; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t sdo_od_index; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdo_od_subindex; + + /** + * Range: 0..4294967295 (0..4294967295 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t sdo_data; +}; + +/** + * Signals in message SDO_Telemetrie_Rx_Node2. + * + * All signal values are as on the CAN bus. + */ +struct can1_sdo_telemetrie_rx_node2_t { + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdo_command_byte; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t sdo_od_index; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdo_od_subindex; + + /** + * Range: 0..4294967295 (0..4294967295 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t sdo_data; +}; + +/** + * Signals in message SDO_Telemetrie_Tx. + * + * All signal values are as on the CAN bus. + */ +struct can1_sdo_telemetrie_tx_t { + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdo_command_byte; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t sdo_od_index; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdo_od_subindex; + + /** + * Range: 0..4294967295 (0..4294967295 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t sdo_data; +}; + +/** + * Signals in message Laptop_SDO_Node. + * + * All signal values are as on the CAN bus. + */ +struct can1_laptop_sdo_node_t { + /** + * 0: beide Nodes + * 1: Node 1 + * 2: Node 2 + * + * Range: 0..3 (0..3 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t node_id_sdo; +}; + +/** + * Signals in message XSens_LongLat. + * + * All signal values are as on the CAN bus. + */ +struct can1_x_sens_long_lat_t { + /** + * Range: -2147483648..2147483647 (-127.9999..127.9999 deg) + * Scale: 5.96046e-08 + * Offset: 0 + */ + int32_t x_sens_latitude; + + /** + * Range: -2147483648..2147483647 (-255.99938..255.99938 deg) + * Scale: 1.19209e-07 + * Offset: 0 + */ + int32_t x_sens_longitude; +}; + +/** + * Signals in message XSens_rateofturn. + * + * All signal values are as on the CAN bus. + */ +struct can1_x_sens_rateofturn_t { + /** + * Range: -32768..32767 (-64.00016..63.99821 rad/s) + * Scale: 0.00195313 + * Offset: 0 + */ + int16_t x_sens_gyr_x; + + /** + * Range: -32768..32767 (-64.00016..63.99821 rad/s) + * Scale: 0.00195313 + * Offset: 0 + */ + int16_t x_sens_gy_y; + + /** + * Range: -32768..32767 (-64.00016..63.99821 rad/s) + * Scale: 0.00195313 + * Offset: 0 + */ + int16_t x_sens_gy_z; +}; + +/** + * Signals in message XSens_Acceleration. + * + * All signal values are as on the CAN bus. + */ +struct can1_x_sens_acceleration_t { + /** + * Range: -32768..32767 (-128..127.99609 m/s^2) + * Scale: 0.00390625 + * Offset: 0 + */ + int16_t x_sens_acc_x; + + /** + * Range: -32768..32767 (-128..127.99609 m/s^2) + * Scale: 0.00390625 + * Offset: 0 + */ + int16_t x_sens_acc_y; + + /** + * Range: -32768..32767 (-128..127.99609 m/s^2) + * Scale: 0.00390625 + * Offset: 0 + */ + int16_t x_sens_acc_z; +}; + +/** + * Signals in message XSens_Velocity. + * + * All signal values are as on the CAN bus. + */ +struct can1_x_sens_velocity_t { + /** + * Range: -32768..32767 (-512..511.98438 m/s) + * Scale: 0.015625 + * Offset: 0 + */ + int16_t x_sens_vel_x; + + /** + * Range: -32768..32767 (-512..511.98438 m/s) + * Scale: 0.015625 + * Offset: 0 + */ + int16_t x_sens_vel_y; + + /** + * Range: -32768..32767 (-512..511.98438 m/s) + * Scale: 0.015625 + * Offset: 0 + */ + int16_t x_sens_vel_z; +}; + +/** + * Signals in message Telemetrie. + * + * All signal values are as on the CAN bus. + */ +struct can1_telemetrie_t { + /** + * Range: 0..15 (0..15 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ini_check_error_state; + + /** + * Range: 0..7 (0..7 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t powermap; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t apps_ok; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t brake_ok; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t allow_torque; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t asp_ok; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pressure_sensor_ok; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t torque_vectoring_on; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t reku_on; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t traction_control_on; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ts_deactivate; + + /** + * Range: 0..255 (0..2550 -) + * Scale: 10 + * Offset: 0 + */ + uint8_t torque_limit; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t power_limit; + + /** + * Range: 0..255 (0..2550 -) + * Scale: 10 + * Offset: 0 + */ + uint8_t torque_limit_dynamisch; + + /** + * Range: 0..255 (0..2550 -) + * Scale: 10 + * Offset: 0 + */ + uint8_t torque_ohne_limit_l; + + /** + * Range: 0..255 (0..2550 -) + * Scale: 10 + * Offset: 0 + */ + uint8_t torque_ohne_limit_r; +}; + +/** + * Signals in message Override_Powermap. + * + * All signal values are as on the CAN bus. + */ +struct can1_override_powermap_t { + /** + * Range: 0..7 (0..7 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t laptopp_power_map; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t laptop_reku; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t laptop_tc; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t laptop_tv; + + /** + * Range: 0..255 (0..2.55 -) + * Scale: 0.01 + * Offset: 0 + */ + uint8_t laptop_slipref; + + /** + * Range: 0..65535 (0..6553.5 -) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t laptop_tc_i; + + /** + * Range: 0..655350 (0..65535 -) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t laptop_tc_p; + + /** + * Range: 0..255 (1..3.55 -) + * Scale: 0.01 + * Offset: 1 + */ + uint8_t laptop_tc_mumax; +}; + +/** + * Signals in message Override_Laptop_2. + * + * All signal values are as on the CAN bus. + */ +struct can1_override_laptop_2_t { + /** + * Range: 0..7 (0..7 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t as_mission; + + /** + * Range: 0..7 (0..7 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t as_state; + + /** + * Range: 0..4095 (0..4095 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t manual_input_torque; + + /** + * Range: 0..80 (0..80 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t laptop_powerlimit; + + /** + * Range: 0..150 (0..1500 -) + * Scale: 10 + * Offset: 0 + */ + uint8_t laptop_torque_lim; +}; + +/** + * Signals in message Override_EPSC_Cooling. + * + * All signal values are as on the CAN bus. + */ +struct can1_override_epsc_cooling_t { + /** + * Range: -512..511 (-512..511 -) + * Scale: 1 + * Offset: 0 + */ + int16_t epsc_manual_angle; + + /** + * Range: 0..3 (0..3 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t epsc_mode; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ac_cooling_enable; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ts_cooling_enable; + + /** + * Range: 0..255 (0..1.275 -) + * Scale: 0.005 + * Offset: 0 + */ + uint8_t ac_cooling_pwm; + + /** + * Range: 0..255 (0..1.275 -) + * Scale: 0.005 + * Offset: 0 + */ + uint8_t ts_cooling_pwm; +}; + +/** + * Signals in message Override_Laptop. + * + * All signal values are as on the CAN bus. + */ +struct can1_override_laptop_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t fake_r2_d; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t fake_soundbox_emergency; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t fake_soundbox_r2_d; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t fake_ts_active; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_apps; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_as_mission; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_as_state; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_epsc_mode; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_pdu_ac_cooling_enable; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_pdu_acu_enable; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_pdu_drs_enable; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_pdu_epsc_enable; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_pdu_heartbeat; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_pdu_lidar_enable; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_pdu_pn_v1_enable; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_pdu_pn_v2_enable; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_pdu_ts_cooling_enable; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_power_map; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_tc_parameter; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t override_torque_input; +}; + +/** + * Signals in message APPS_Override. + * + * All signal values are as on the CAN bus. + */ +struct can1_apps_override_t { + /** + * Range: 0..1023 (0..10.23 -) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t apps_0_max; + + /** + * Range: 0..1023 (0..10.23 -) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t apps_0_min; + + /** + * Range: 0..1023 (0..10.23 -) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t apps_1_max; + + /** + * Range: 0..1023 (0..10.23 -) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t apps_1_min; +}; + +/** + * Signals in message FTCU_Damper. + * + * All signal values are as on the CAN bus. + */ +struct can1_ftcu_damper_t { + /** + * Range: 0..7500 (0..75 mm) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_damper_fl; + + /** + * Range: 0..7500 (0..75 mm) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_damper_fr; + + /** + * Range: 0..7500 (0..75 mm) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_damper_rl; + + /** + * Range: 0..7500 (0..75 mm) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_damper_rr; +}; + +/** + * Signals in message FTCU_ParamConfirm. + * + * All signal values are as on the CAN bus. + */ +struct can1_ftcu_param_confirm_t { + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ftcu_param_confirm; +}; + +/** + * Signals in message Sensornode_F_10Hz. + * + * All signal values are as on the CAN bus. + */ +struct can1_sensornode_f_10_hz_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ls_l; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ls_r; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdc_m_pre_bots; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdc_m_post_ins; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdc_m_post_bspd; + + /** + * Range: 0..255 (0..510 degC) + * Scale: 2 + * Offset: 0 + */ + uint8_t bdts_fl; + + /** + * Range: 0..255 (0..510 degC) + * Scale: 2 + * Offset: 0 + */ + uint8_t bdts_fr; +}; + +/** + * Signals in message Sensornode_F_100Hz_1. + * + * All signal values are as on the CAN bus. + */ +struct can1_sensornode_f_100_hz_1_t { + /** + * Range: 0..255 (0..1 -) + * Scale: 0.00392157 + * Offset: 0 + */ + uint8_t apps_1; + + /** + * Range: 0..255 (0..1 -) + * Scale: 0.00392157 + * Offset: 0 + */ + uint8_t apps_2; + + /** + * Range: 0..255 (0..510 -) + * Scale: 2 + * Offset: 0 + */ + uint8_t bp_f; + + /** + * Range: 0..4095 (0..4095 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t sas; + + /** + * Range: 0..255 (0..255 notches) + * Scale: 1 + * Offset: 0 + */ + uint8_t wss_fl; + + /** + * Range: 0..255 (0..255 notches) + * Scale: 1 + * Offset: 0 + */ + uint8_t wss_fr; +}; + +/** + * Signals in message Sensornode_F_100Hz_2. + * + * All signal values are as on the CAN bus. + */ +struct can1_sensornode_f_100_hz_2_t { + /** + * Range: 0..4095 (0..4095 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t ds_fl; + + /** + * Range: 0..4095 (0..4095 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t ds_fr; +}; + +/** + * Signals in message Sensornode_F_1kHz. + * + * All signal values are as on the CAN bus. + */ +struct can1_sensornode_f_1k_hz_t { + /** + * Range: 0..4095 (0..4095 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t sls_fl; + + /** + * Range: 0..4095 (0..4095 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t sls_fr; +}; + +/** + * Signals in message Sensornode_R_10Hz. + * + * All signal values are as on the CAN bus. + */ +struct can1_sensornode_r_10_hz_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ext_ts_on; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdc_m_pre_tsms; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdc_m_post_tsms; + + /** + * Range: 0..255 (0..510 degC) + * Scale: 2 + * Offset: 0 + */ + uint8_t bdts_rl; + + /** + * Range: 0..255 (0..510 degC) + * Scale: 2 + * Offset: 0 + */ + uint8_t bdts_rr; + + /** + * Range: 0..255 (0..255 degC) + * Scale: 1 + * Offset: 0 + */ + uint8_t wt_bat; + + /** + * Range: 0..255 (0..255 degC) + * Scale: 1 + * Offset: 0 + */ + uint8_t wt_dt; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t wp_bat; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t wp_dt; +}; + +/** + * Signals in message Sensornode_R_100Hz. + * + * All signal values are as on the CAN bus. + */ +struct can1_sensornode_r_100_hz_t { + /** + * Range: 0..255 (0..25.5 -) + * Scale: 0.1 + * Offset: 0 + */ + uint8_t ebs_aps_1; + + /** + * Range: 0..255 (0..25.5 -) + * Scale: 0.1 + * Offset: 0 + */ + uint8_t ebs_aps_2; + + /** + * Range: 0..255 (0..510 -) + * Scale: 2 + * Offset: 0 + */ + uint8_t bp_r; + + /** + * Range: 0..255 (0..255 notches) + * Scale: 1 + * Offset: 0 + */ + uint8_t wss_rl; + + /** + * Range: 0..255 (0..255 notches) + * Scale: 1 + * Offset: 0 + */ + uint8_t wss_rr; + + /** + * Range: 0..4095 (0..4095 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t ds_rl; + + /** + * Range: 0..4095 (0..4095 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t ds_rr; +}; + +/** + * Signals in message Sensornode_R_1kHz. + * + * All signal values are as on the CAN bus. + */ +struct can1_sensornode_r_1k_hz_t { + /** + * Range: 0..4095 (0..4095 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t sls_rl; + + /** + * Range: 0..4095 (0..4095 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t sls_rr; +}; + +/** + * Signals in message PWM_DutyCycle. + * + * All signal values are as on the CAN bus. + */ +struct can1_pwm_duty_cycle_t { + /** + * Range: 0..255 (0..255 /255) + * Scale: 1 + * Offset: 0 + */ + uint8_t dc_drs; + + /** + * Range: 0..255 (0..255 /255) + * Scale: 1 + * Offset: 0 + */ + uint8_t dc_assi_y; + + /** + * Range: 0..255 (0..255 /255) + * Scale: 1 + * Offset: 0 + */ + uint8_t dc_assi_b; + + /** + * Range: 0..255 (0..255 /255) + * Scale: 1 + * Offset: 0 + */ + uint8_t dc_bl; + + /** + * Range: 0..255 (0..255 /255) + * Scale: 1 + * Offset: 0 + */ + uint8_t dc_fans_dt; + + /** + * Range: 0..255 (0..255 /255) + * Scale: 1 + * Offset: 0 + */ + uint8_t dc_fans_bat; + + /** + * Range: 0..255 (0..255 /255) + * Scale: 1 + * Offset: 0 + */ + uint8_t dc_sbx; +}; + +/** + * Signals in message PWM_Config. + * + * All signal values are as on the CAN bus. + */ +struct can1_pwm_config_t { + /** + * DRS+Lighting,Default=500Hz + * + * Range: 0..65535 (0..65535 Hz) + * Scale: 1 + * Offset: 0 + */ + uint16_t freq_pwm1_drs_lighting; + + /** + * Fans,Default=20kHz + * + * Range: 0..65535 (0..65535 Hz) + * Scale: 1 + * Offset: 0 + */ + uint16_t freq_pwm3_fans; + + /** + * SBX,Default=313Hz + * + * Range: 0..65535 (0..65535 Hz) + * Scale: 1 + * Offset: 0 + */ + uint16_t freq_pwm2_sbx; +}; + +/** + * Signals in message Dashboard_In. + * + * All signal values are as on the CAN bus. + */ +struct can1_dashboard_in_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t dashboard_r2_d_button; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t dashboard_ts_activate_button; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t dashboard_race_key; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t dashboard_sdc_in; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t dashboard_sdc_out; +}; + +/** + * Signals in message AMS_Slave1Status. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave1_status_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_error; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_id; + + /** + * Range: 0..1 (0..1 %) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_temp_sensor; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_min_cell_volt; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_max_cell_volt; + + /** + * Range: 0..16 (0..1 degC) + * Scale: 0.0625 + * Offset: 0 + */ + int16_t ams_slave_status_max_temp; +}; + +/** + * Signals in message AMS_Slave2_Log0. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave2_log0_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v0; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v1; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v2; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v3; +}; + +/** + * Signals in message AMS_Slave2_Log1. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave2_log1_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v4; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v5; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v6; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v7; +}; + +/** + * Signals in message AMS_Slave2_Log2. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave2_log2_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v8; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v9; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v10; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v11; +}; + +/** + * Signals in message AMS_Slave2_Log3. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave2_log3_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v12; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v13; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v14; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v15; +}; + +/** + * Signals in message AMS_Slave2_Log4. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave2_log4_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint32_t ams_slave_id_failed_sensors; +}; + +/** + * Signals in message AMS_Slave2_Log5. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave2_log5_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t0; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t1; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t2; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t3; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t4; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t5; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t6; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t7; +}; + +/** + * Signals in message AMS_Slave5_Log6. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave5_log6_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t8; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t9; +}; + +/** + * Signals in message AMS_Slave4_Log6. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave4_log6_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t8; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t9; +}; + +/** + * Signals in message AMS_Slave3_Log6. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave3_log6_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t8; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t9; +}; + +/** + * Signals in message AMS_Slave2_Log6. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave2_log6_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t8; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t9; +}; + +/** + * Signals in message AMS_Slave1_Log6. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave1_log6_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t8; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t9; +}; + +/** + * Signals in message AMS_Slave5_Log5. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave5_log5_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t0; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t1; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t2; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t3; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t4; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t5; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t6; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t7; +}; + +/** + * Signals in message AMS_Slave4_Log5. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave4_log5_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t0; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t1; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t2; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t3; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t4; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t5; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t6; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t7; +}; + +/** + * Signals in message AMS_Slave3_Log5. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave3_log5_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t0; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t1; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t2; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t3; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t4; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t5; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t6; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t7; +}; + +/** + * Signals in message AMS_Slave1_Log5. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave1_log5_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t0; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t1; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t2; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t3; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t4; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t5; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t6; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t7; +}; + +/** + * Signals in message AMS_Slave5_Log4. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave5_log4_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint32_t ams_slave_id_failed_sensors; +}; + +/** + * Signals in message AMS_Slave4_Log4. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave4_log4_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint32_t ams_slave_id_failed_sensors; +}; + +/** + * Signals in message AMS_Slave3_Log4. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave3_log4_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint32_t ams_slave_id_failed_sensors; +}; + +/** + * Signals in message AMS_Slave1_Log4. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave1_log4_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint32_t ams_slave_id_failed_sensors; +}; + +/** + * Signals in message AMS_Slave5_Log3. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave5_log3_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v12; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v13; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v14; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v15; +}; + +/** + * Signals in message AMS_Slave4_Log3. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave4_log3_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v12; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v13; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v14; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v15; +}; + +/** + * Signals in message AMS_Slave3_Log3. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave3_log3_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v12; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v13; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v14; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v15; +}; + +/** + * Signals in message AMS_Slave1_Log3. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave1_log3_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v12; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v13; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v14; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v15; +}; + +/** + * Signals in message AMS_Slave5_Log2. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave5_log2_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v8; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v9; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v10; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v11; +}; + +/** + * Signals in message AMS_Slave4_Log2. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave4_log2_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v8; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v9; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v10; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v11; +}; + +/** + * Signals in message AMS_Slave3_Log2. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave3_log2_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v8; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v9; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v10; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v11; +}; + +/** + * Signals in message AMS_Slave1_Log2. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave1_log2_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v8; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v9; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v10; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v11; +}; + +/** + * Signals in message AMS_Slave5_Log1. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave5_log1_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v4; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v5; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v6; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v7; +}; + +/** + * Signals in message AMS_Slave4_Log1. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave4_log1_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v4; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v5; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v6; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v7; +}; + +/** + * Signals in message AMS_Slave3_Log1. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave3_log1_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v4; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v5; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v6; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v7; +}; + +/** + * Signals in message AMS_Slave1_Log1. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave1_log1_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v4; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v5; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v6; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v7; +}; + +/** + * Signals in message AMS_Slave5_Log0. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave5_log0_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v0; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v1; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v2; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v3; +}; + +/** + * Signals in message AMS_Slave4_Log0. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave4_log0_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v0; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v1; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v2; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v3; +}; + +/** + * Signals in message AMS_Slave3_Log0. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave3_log0_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v0; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v1; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v2; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v3; +}; + +/** + * Signals in message AMS_Slave1_Log0. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave1_log0_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v0; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v1; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v2; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v3; +}; + +/** + * Signals in message PDU_Heartbeat. + * + * All signal values are as on the CAN bus. + */ +struct can1_pdu_heartbeat_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t pdu_heartbeat; +}; + +/** + * Signals in message FTCU_Pneumatik. + * + * All signal values are as on the CAN bus. + */ +struct can1_ftcu_pneumatik_t { + /** + * Range: 0..4095 (0..40.95 -) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_tank_pressure_1; + + /** + * Range: 0..40950 (0..409.5 -) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_tank_pressure_2; +}; + +/** + * Signals in message ACU_TX_Commands. + * + * All signal values are as on the CAN bus. + */ +struct can1_acu_tx_commands_t { + /** + * Range: 0..255 (0..51 -) + * Scale: 0.2 + * Offset: 0 + */ + uint8_t abx_speed_fl; + + /** + * Range: 0..255 (0..51 -) + * Scale: 0.2 + * Offset: 0 + */ + uint8_t abx_speed_fr; + + /** + * Range: 0..255 (0..51 -) + * Scale: 0.2 + * Offset: 0 + */ + uint8_t abx_speed_rl; + + /** + * Range: 0..255 (0..51 -) + * Scale: 0.2 + * Offset: 0 + */ + uint8_t abx_speed_rr; + + /** + * Range: -128..127 (-2.00784..1.99216 -) + * Scale: 0.0156863 + * Offset: 0 + */ + int8_t abx_steering_angle_left; + + /** + * Range: -128..127 (-2.00784..1.99216 -) + * Scale: 0.0156863 + * Offset: 0 + */ + int8_t abx_steering_angle_right; +}; + +/** + * Signals in message ACU_RX_Commands. + * + * All signal values are as on the CAN bus. + */ +struct can1_acu_rx_commands_t { + /** + * Range: 0..255 (0..306 -) + * Scale: 1.2 + * Offset: 0 + */ + uint8_t acu_speed_target_left; + + /** + * Range: 0..255 (0..306 m/s) + * Scale: 1.2 + * Offset: 0 + */ + uint8_t acu_speed_target_right; + + /** + * Range: -128..127 (-2.048..2.032 -) + * Scale: 0.016 + * Offset: 0 + */ + int8_t acu_steering_angle_right; + + /** + * Range: -128..127 (-2.048..2.032 -) + * Scale: 0.016 + * Offset: 0 + */ + int8_t acu_steering_angle_left; +}; + +/** + * Signals in message ACU_RX. + * + * Cycle Time: 100ms + * + * All signal values are as on the CAN bus. + */ +struct can1_acu_rx_t { + /** + * Range: 0..1 (0..1 Bool) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_as_mission_complete; + + /** + * Range: 0..1 (0..1 Bool) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_as_ok; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_drs; + + /** + * Range: 0..15 (0..15 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_lap_count; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_cones_all; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_cones_actual; +}; + +/** + * Signals in message AMS_Slave0_Log0. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave0_log0_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v0; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v1; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v2; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v3; +}; + +/** + * Signals in message AMS_Slave0_Log1. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave0_log1_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v4; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v5; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v6; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v7; +}; + +/** + * Signals in message AMS_Slave0_Log3. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave0_log3_t { + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v12; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v13; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v14; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_id_v15; +}; + +/** + * Signals in message AMS_Slave0_Log4. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave0_log4_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint32_t ams_slave_id_failed_sensors; +}; + +/** + * Signals in message AMS_Slave0_Log5. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave0_log5_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t0; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t1; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t2; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t3; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t4; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t5; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t6; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t7; +}; + +/** + * Signals in message AMS_Slave0_Log6. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave0_log6_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t8; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_slave_id_t9; +}; + +/** + * Signals in message ACU_TX. + * + * Cycle Time: 50ms + * + * All signal values are as on the CAN bus. + */ +struct can1_acu_tx_t { + /** + * AS Mission Selection + * + * Range: 0..7 (0..7 int) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_as_mission; + + /** + * Range: 0..5 (0..5 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_as_state; + + /** + * Range: 0..1 (0..1 bool) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_power_off; + + /** + * Range: 0..1 (0..1 bool) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_reset; + + /** + * Range: 0..1 (0..1 bool) + * Scale: 1 + * Offset: 0 + */ + uint8_t acu_allow_torque; + + /** + * Range: 0..15 (0..15 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t abx_con_mon_error; +}; + +/** + * Signals in message AMS_Slave5Status. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave5_status_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_error; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_id; + + /** + * Range: 0..1 (0..1 %) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_temp_sensor; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_min_cell_volt; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_max_cell_volt; + + /** + * Range: 0..16 (0..1 degC) + * Scale: 0.0625 + * Offset: 0 + */ + int16_t ams_slave_status_max_temp; +}; + +/** + * Signals in message AMS_Slave4Status. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave4_status_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_error; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_id; + + /** + * Range: 0..1 (0..1 %) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_temp_sensor; + + /** + * Range: 0..1000 (0..1 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_min_cell_volt; + + /** + * Range: 0..1000 (0..1 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_max_cell_volt; + + /** + * Range: 0..16 (0..1 degC) + * Scale: 0.0625 + * Offset: 0 + */ + int16_t ams_slave_status_max_temp; +}; + +/** + * Signals in message AMS_Slave3Status. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave3_status_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_error; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_id; + + /** + * Range: 0..1 (0..1 %) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_temp_sensor; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_min_cell_volt; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_max_cell_volt; + + /** + * Range: 0..16 (0..1 degC) + * Scale: 0.0625 + * Offset: 0 + */ + int16_t ams_slave_status_max_temp; +}; + +/** + * Signals in message AMS_Slave2Status. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave2_status_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_error; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_id; + + /** + * Range: 0..1 (0..1 %) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_temp_sensor; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_min_cell_volt; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_max_cell_volt; + + /** + * Range: 0..16 (0..1 degC) + * Scale: 0.0625 + * Offset: 0 + */ + int16_t ams_slave_status_max_temp; +}; + +/** + * Signals in message AMS_Error. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_error_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_error_kind; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + int8_t ams_error_arg; +}; + +/** + * Signals in message FTCU_Cooling. + * + * Cycle time: 100ms + * + * All signal values are as on the CAN bus. + */ +struct can1_ftcu_cooling_t { + /** + * Range: 0..255 (0..2.55 bar) + * Scale: 0.01 + * Offset: 0 + */ + uint8_t ftcu_water_pressure_2; + + /** + * Range: 0..255 (0..2.55 bar) + * Scale: 0.01 + * Offset: 0 + */ + uint8_t ftcu_water_pressure_1; + + /** + * Range: 0..1023 (0..102.3 Deg) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t ftcu_water_temperature_1; + + /** + * Range: 0..1023 (0..102.3 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t ftcu_water_temperature_2; + + /** + * Range: 0..1023 (0..102.3 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t ftcu_flow_rate; +}; + +/** + * Signals in message FTCU_BrakeT. + * + * Cycle time: 100ms + * + * All signal values are as on the CAN bus. + */ +struct can1_ftcu_brake_t_t { + /** + * Range: 0..65535 (0..655.35 degC) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_brake_t_fl; + + /** + * Range: 0..65535 (0..655.35 degC) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_brake_t_fr; + + /** + * Range: 0..65535 (0..655.35 degC) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_brake_t_rl; + + /** + * Range: 0..65535 (0..655.35 degC) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_brake_t_rr; +}; + +/** + * Signals in message FTCU_Wheelspeed. + * + * Cycle time: 10ms + * + * All signal values are as on the CAN bus. + */ +struct can1_ftcu_wheelspeed_t { + /** + * Range: -2048..2047 (-102.4..102.35 1/s) + * Scale: 0.05 + * Offset: 0 + */ + int16_t ftcu_wheelspeed_fl; + + /** + * Range: -2048..2047 (-102.4..102.35 1/s) + * Scale: 0.05 + * Offset: 0 + */ + int16_t ftcu_wheelspeed_fr; + + /** + * Range: -2048..2047 (-102.4..102.35 1/s) + * Scale: 0.05 + * Offset: 0 + */ + int16_t ftcu_wheelspeed_rl; + + /** + * Range: -2048..2047 (-102.4..102.35 1/s) + * Scale: 0.05 + * Offset: 0 + */ + int16_t ftcu_wheelspeed_rr; + + /** + * Range: 0..65535 (0..65535 m) + * Scale: 1 + * Offset: 0 + */ + uint16_t ftcu_distance_session; +}; + +/** + * Signals in message FTCU_Timings. + * + * Cycle time: 1s + * + * All signal values are as on the CAN bus. + */ +struct can1_ftcu_timings_t { + /** + * Range: 0..65535 (0..655.35 s) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_laptime_best; + + /** + * Range: 0..65535 (0..655.35 s) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_laptime_last; + + /** + * Range: 0..65535 (0..655.35 s) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_sectortime_best; + + /** + * Range: 0..65535 (0..655.35 s) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t ftcu_sectortime_last; +}; + +/** + * Signals in message FTCU_Driver. + * + * All signal values are as on the CAN bus. + */ +struct can1_ftcu_driver_t { + /** + * Range: 0..100 (0..100 %) + * Scale: 1 + * Offset: 0 + */ + uint8_t ftcu_apps_percent; + + /** + * Range: 0..1600 (0..160 bar) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t ftcu_brake_pressure_f; + + /** + * Range: 0..1600 (0..160 bar) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t ftcu_brake_pressure_r; + + /** + * Range: -128..127 (-128..127 Deg) + * Scale: 1 + * Offset: 0 + */ + int8_t ftcu_steering_angle; + + /** + * Range: 0..255 (0..51 m/s) + * Scale: 0.2 + * Offset: 0 + */ + uint8_t ftcu_speed; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ftcu_lapcounter; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ftcu_sectorcounter; +}; + +/** + * Signals in message TTS_RR. + * + * All signal values are as on the CAN bus. + */ +struct can1_tts_rr_t { + /** + * Range: -548..3547 (-54.8..354.7 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_outer_left; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center_left; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center; + + /** + * Range: -548..3547 (-54.8..354.7 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center_right; + + /** + * Range: -548..3547 (-54.8..354.7 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_outet_right; + + /** + * Range: 0..15 (0..15 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t tts_status; +}; + +/** + * Signals in message TTS_RL. + * + * All signal values are as on the CAN bus. + */ +struct can1_tts_rl_t { + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_outer_left; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center_left; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center_right; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_outer_right; + + /** + * Range: 0..15 (0..15 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t tts_status; +}; + +/** + * Signals in message TTS_FR. + * + * All signal values are as on the CAN bus. + */ +struct can1_tts_fr_t { + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_outer_left; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center_left; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center_right; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_outer_right; + + /** + * Range: 0..15 (0..15 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t tts_status; +}; + +/** + * Signals in message TTS_FL. + * + * All signal values are as on the CAN bus. + */ +struct can1_tts_fl_t { + /** + * Range: -548..3547 (-54.8..354.7 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_outer_left; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center_left; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_center_right; + + /** + * Range: 0..4095 (0..409.5 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t tts_outer_right; + + /** + * Range: 0..15 (0..15 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t tts_status; +}; + +/** + * Signals in message STW_Param_Set. + * + * All signal values are as on the CAN bus. + */ +struct can1_stw_param_set_t { + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint16_t stw_param_set; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_tc_slipref; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_tc_mumax; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_tc_i; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_plim; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_tlim; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_tc_p; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_reku; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_tc_on; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_tv_on; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_discipline; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t stw_param_slim; +}; + +/** + * Signals in message AMS_Slave0Status. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave0_status_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_error; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_id; + + /** + * Range: -128..127 (-128..127 %) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_status_temp_sensor; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_min_cell_volt; + + /** + * Range: 0..6553 (0..6.5535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t ams_slave_status_max_cell_volt; + + /** + * Range: 0..16 (0..1 degC) + * Scale: 0.0625 + * Offset: 0 + */ + int16_t ams_slave_status_max_temp; +}; + +/** + * Signals in message SSU_Message. + * + * All signal values are as on the CAN bus. + */ +struct can1_ssu_message_t { + /** + * Range: -32768..32767 (-32768..32767 -) + * Scale: 1 + * Offset: 0 + */ + int16_t ssu_pressure; + + /** + * Range: -200..800 (-20..80 degC) + * Scale: 0.1 + * Offset: 0 + */ + int16_t ssu_air_temp; +}; + +/** + * Signals in message AMS_Status. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_status_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_state; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdc_closed; + + /** + * Range: 0..100 (0..100 %) + * Scale: 1 + * Offset: 0 + */ + uint8_t soc; + + /** + * Range: 0..65535 (0..65.535 V) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t min_cell_volt; + + /** + * Range: 0..65535 (0..4095.94 degC) + * Scale: 0.0625 + * Offset: 0 + */ + uint16_t max_cell_temp; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_imd_state; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_imd_ok; +}; + +/** + * Signals in message AMS_SlavePanic. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_slave_panic_t { + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_panic_slave_id; + + /** + * Range: 0..72057600000000000 (0..7.20576e+16 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ams_slave_panic_kind; + + /** + * Range: 0..72057600000000000 (0..7.20576e+16 -) + * Scale: 1 + * Offset: 0 + */ + uint32_t ams_slave_panic_arg; +}; + +/** + * Signals in message AMS_In. + * + * All signal values are as on the CAN bus. + */ +struct can1_ams_in_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ts_activate; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t inverters_discharged; + + /** + * Range: 0..64 (0..64 Laps) + * Scale: 1 + * Offset: 0 + */ + uint8_t lap_number; +}; + +/** + * Signals in message Shunt_Current. + * + * All signal values are as on the CAN bus. + */ +struct can1_shunt_current_t { + /** + * Range: -2000000000..2000000000 (-2000000..2000000 A) + * Scale: 0.001 + * Offset: 0 + */ + int32_t shunt_current; +}; + +/** + * Signals in message Shunt_Voltage1. + * + * All signal values are as on the CAN bus. + */ +struct can1_shunt_voltage1_t { + /** + * Range: -2000000000..2000000000 (-2000000..2000000 V) + * Scale: 0.001 + * Offset: 0 + */ + int32_t shunt_voltage1; +}; + +/** + * Signals in message Shunt_Voltage2. + * + * All signal values are as on the CAN bus. + */ +struct can1_shunt_voltage2_t { + /** + * Range: -2000000000..2000000000 (-2000000..2000000 V) + * Scale: 0.001 + * Offset: 0 + */ + int32_t shunt_voltage2; +}; + +/** + * Signals in message Shunt_Voltage3. + * + * All signal values are as on the CAN bus. + */ +struct can1_shunt_voltage3_t { + /** + * Range: -2000000000..2000000000 (-2000000..2000000 V) + * Scale: 0.001 + * Offset: 0 + */ + int32_t shunt_voltage3; +}; + +/** + * Signals in message Shunt_Temperature. + * + * All signal values are as on the CAN bus. + */ +struct can1_shunt_temperature_t { + /** + * Range: 0..10000 (0..1000 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint32_t shunt_temperature; +}; + +/** + * Signals in message PDU_Command. + * + * All signal values are as on the CAN bus. + */ +struct can1_pdu_command_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_misc; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_sdc; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_inverter; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_ts_cooling; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_acc_cooling; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_lldar; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_drs; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_epsc; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_acu; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_ebs_a; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_ebs_b; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_enable_ebs_c; +}; + +/** + * Signals in message PDU_Response. + * + * All signal values are as on the CAN bus. + */ +struct can1_pdu_response_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_alwayson_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_shutdown_circuit_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_lidar_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_acu_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_servos_regler_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_inverter_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_misc_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_servo_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_ebs_valve_1_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_ebs_valve_2_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_cs_valve_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_aggregat_tx; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_steering_tx; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_pwm_tsac_fans; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_pwm_radiatot_fans_tx; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_pwm_aggregat; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_pwm_pump; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t pdu_heartbeat_ok_tx; +}; + +/** + * Signals in message AS_Mission_fb. + * + * All signal values are as on the CAN bus. + */ +struct can1_as_mission_fb_t { + /** + * Range: 1..7 (1..7 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t mission_selection; +}; + +/** + * Signals in message STW_mission_selected. + * + * All signal values are as on the CAN bus. + */ +struct can1_stw_mission_selected_t { + /** + * Range: 1..7 (1..7 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t mission_selection; +}; + +/** + * Signals in message EPSC_out. + * + * All signal values are as on the CAN bus. + */ +struct can1_epsc_out_t { + /** + * Range: -32768..32767 (-3276.8..3276.7 rpm) + * Scale: 0.1 + * Offset: 0 + */ + int16_t epsc_measured_rpm; + + /** + * Range: 0..36000 (0..360 deg) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t epsc_measured_steering_angle; + + /** + * Range: 0..1023 (0..102.3 degC) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t epsc_measured_mosfet_temperature; + + /** + * Range: 0..1023 (0..102.3 V) + * Scale: 0.1 + * Offset: 0 + */ + uint16_t epsc_measured_voltage; + + /** + * Range: 0..255 (0..25.5 A) + * Scale: 0.1 + * Offset: 0 + */ + uint8_t epsc_measured_current; +}; + +/** + * Signals in message EPSC_Steering_In. + * + * All signal values are as on the CAN bus. + */ +struct can1_epsc_steering_in_t { + /** + * Range: 0..0 (-0.0512..0.0511 -) + * Scale: 1 + * Offset: 0 + */ + int16_t epsc_desired_steering_angle; +}; + +/** + * Signals in message STW_buttons. + * + * All signal values are as on the CAN bus. + */ +struct can1_stw_buttons_t { + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t stw_button_drs; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t stw_button_1; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t stw_button_2; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t stw_button_3; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t stw_button_4; +}; + +/** + * Signals in message STW_status. + * + * All signal values are as on the CAN bus. + */ +struct can1_stw_status_t { + /** + * Range: 0..64 (0..64 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t lap_count; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_pdu; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_res; + + /** + * Range: 0..15 (0..15 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t r2_d_progress; + + /** + * Range: 0..5 (0..5 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t as_state_stw; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_as; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_app_sp; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_s_bspd; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_scs; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_con_mon; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_ini_chk; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_inv2; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_inv1; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_ams; + + /** + * Range: 0..1 (0..1 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t err_sdc; + + /** + * Range: 0..15 (0..15 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t sdc_status; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t inv2_ready; + + /** + * Range: - + * Scale: 1 + * Offset: 0 + */ + uint8_t inv1_ready; + + /** + * Range: 0..65535 (0..65.535 kWh) + * Scale: 0.001 + * Offset: 0 + */ + uint16_t energy_per_lap; + + /** + * Range: 0..255 (0..255 -) + * Scale: 1 + * Offset: 0 + */ + uint8_t ini_chk_state; +}; + +/** + * Signals in message PDU_Current_1. + * + * All signal values are as on the CAN bus. + */ +struct can1_pdu_current_1_t { + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_always_on_current; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_lvms_current; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_asms_current; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_misc_current; +}; + +/** + * Signals in message PDU_Current_2. + * + * All signal values are as on the CAN bus. + */ +struct can1_pdu_current_2_t { + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_sdc_current; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_inverter_current; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_ts_cooling_current; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_acc_cooling_current; +}; + +/** + * Signals in message PDU_Current_3. + * + * All signal values are as on the CAN bus. + */ +struct can1_pdu_current_3_t { + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_lidar_current; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_drs_current; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_epsc_current; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_acu_current; +}; + +/** + * Signals in message PDU_Current_4. + * + * All signal values are as on the CAN bus. + */ +struct can1_pdu_current_4_t { + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_ebs_a_current; + + /** + * Range: 0..65535 (0..65535 -) + * Scale: 1 + * Offset: 0 + */ + uint16_t pdu_ebs_b_current; +}; + +/** + * Signals in message EPSC_Config_In. + * + * All signal values are as on the CAN bus. + */ +struct can1_epsc_config_in_t { + /** + * Range: 0..65535 (0..655.35 -) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t epsc_config_p_gain; + + /** + * Range: 0..65535 (0..655.35 -) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t epsc_config_i_gain; + + /** + * Range: 0..65535 (0..655.35 -) + * Scale: 0.01 + * Offset: 0 + */ + uint16_t epsc_config_d_gain; +}; + +/** + * Pack message Inverter_Velocity. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_inverter_velocity_pack( + uint8_t *dst_p, + const struct can1_inverter_velocity_t *src_p, + size_t size); + +/** + * Unpack message Inverter_Velocity. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_inverter_velocity_unpack( + struct can1_inverter_velocity_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Inverter_Velocity. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_inverter_velocity_init(struct can1_inverter_velocity_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int32_t can1_inverter_velocity_inverter_1_velocity_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_velocity_inverter_1_velocity_decode(int32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_velocity_inverter_1_velocity_is_in_range(int32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int32_t can1_inverter_velocity_inverter_2_velocity_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_velocity_inverter_2_velocity_decode(int32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_velocity_inverter_2_velocity_is_in_range(int32_t value); + +/** + * Pack message Inverter_Errors_Warnings. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_inverter_errors_warnings_pack( + uint8_t *dst_p, + const struct can1_inverter_errors_warnings_t *src_p, + size_t size); + +/** + * Unpack message Inverter_Errors_Warnings. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_inverter_errors_warnings_unpack( + struct can1_inverter_errors_warnings_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Inverter_Errors_Warnings. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_inverter_errors_warnings_init(struct can1_inverter_errors_warnings_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_inverter_errors_warnings_inverter_1_errors_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_errors_warnings_inverter_1_errors_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_errors_warnings_inverter_1_errors_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_inverter_errors_warnings_inverter_1_warnings_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_errors_warnings_inverter_1_warnings_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_errors_warnings_inverter_1_warnings_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_inverter_errors_warnings_inverter_2_errors_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_errors_warnings_inverter_2_errors_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_errors_warnings_inverter_2_errors_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_inverter_errors_warnings_inverter_2_warnings_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_errors_warnings_inverter_2_warnings_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_errors_warnings_inverter_2_warnings_is_in_range(uint16_t value); + +/** + * Pack message Inverter_Torque_Actual_CW. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_inverter_torque_actual_cw_pack( + uint8_t *dst_p, + const struct can1_inverter_torque_actual_cw_t *src_p, + size_t size); + +/** + * Unpack message Inverter_Torque_Actual_CW. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_inverter_torque_actual_cw_unpack( + struct can1_inverter_torque_actual_cw_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Inverter_Torque_Actual_CW. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_inverter_torque_actual_cw_init(struct can1_inverter_torque_actual_cw_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_inverter_torque_actual_cw_inverter_1_control_word_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_torque_actual_cw_inverter_1_control_word_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_torque_actual_cw_inverter_1_control_word_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_inverter_torque_actual_cw_inverter_1_torque_actual_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_torque_actual_cw_inverter_1_torque_actual_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_torque_actual_cw_inverter_1_torque_actual_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_inverter_torque_actual_cw_inverter_2_control_word_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_torque_actual_cw_inverter_2_control_word_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_torque_actual_cw_inverter_2_control_word_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_inverter_torque_actual_cw_inverter_2_torque_actual_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_torque_actual_cw_inverter_2_torque_actual_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_torque_actual_cw_inverter_2_torque_actual_is_in_range(int16_t value); + +/** + * Pack message Inverter_Temperatur. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_inverter_temperatur_pack( + uint8_t *dst_p, + const struct can1_inverter_temperatur_t *src_p, + size_t size); + +/** + * Unpack message Inverter_Temperatur. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_inverter_temperatur_unpack( + struct can1_inverter_temperatur_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Inverter_Temperatur. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_inverter_temperatur_init(struct can1_inverter_temperatur_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_inverter_temperatur_inverter_1_temp_inv_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_temperatur_inverter_1_temp_inv_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_temperatur_inverter_1_temp_inv_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_inverter_temperatur_inverter_1_temp_mot_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_temperatur_inverter_1_temp_mot_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_temperatur_inverter_1_temp_mot_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_inverter_temperatur_inverter_2_temp_inv_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_temperatur_inverter_2_temp_inv_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_temperatur_inverter_2_temp_inv_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_inverter_temperatur_inverter_2_temp_mot_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_temperatur_inverter_2_temp_mot_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_temperatur_inverter_2_temp_mot_is_in_range(int16_t value); + +/** + * Pack message Inverter_Torque_wanted. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_inverter_torque_wanted_pack( + uint8_t *dst_p, + const struct can1_inverter_torque_wanted_t *src_p, + size_t size); + +/** + * Unpack message Inverter_Torque_wanted. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_inverter_torque_wanted_unpack( + struct can1_inverter_torque_wanted_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Inverter_Torque_wanted. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_inverter_torque_wanted_init(struct can1_inverter_torque_wanted_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_inverter_torque_wanted_inverter_1_torque_demanded_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_torque_wanted_inverter_1_torque_demanded_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_torque_wanted_inverter_1_torque_demanded_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_inverter_torque_wanted_inverter_2_torque_demanded_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_torque_wanted_inverter_2_torque_demanded_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_torque_wanted_inverter_2_torque_demanded_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_inverter_torque_wanted_inverter_1_torque_desired_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_torque_wanted_inverter_1_torque_desired_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_torque_wanted_inverter_1_torque_desired_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_inverter_torque_wanted_inverter_2_torque_desired_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_inverter_torque_wanted_inverter_2_torque_desired_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_inverter_torque_wanted_inverter_2_torque_desired_is_in_range(int16_t value); + +/** + * Pack message SDO_Telemetrie_Rx_Node1. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_sdo_telemetrie_rx_node1_pack( + uint8_t *dst_p, + const struct can1_sdo_telemetrie_rx_node1_t *src_p, + size_t size); + +/** + * Unpack message SDO_Telemetrie_Rx_Node1. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_sdo_telemetrie_rx_node1_unpack( + struct can1_sdo_telemetrie_rx_node1_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from SDO_Telemetrie_Rx_Node1. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_sdo_telemetrie_rx_node1_init(struct can1_sdo_telemetrie_rx_node1_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sdo_telemetrie_rx_node1_sdo_command_byte_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_rx_node1_sdo_command_byte_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_rx_node1_sdo_command_byte_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sdo_telemetrie_rx_node1_sdo_od_index_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_rx_node1_sdo_od_index_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_rx_node1_sdo_od_index_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sdo_telemetrie_rx_node1_sdo_od_subindex_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_rx_node1_sdo_od_subindex_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_rx_node1_sdo_od_subindex_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_sdo_telemetrie_rx_node1_sdo_data_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_rx_node1_sdo_data_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_rx_node1_sdo_data_is_in_range(uint32_t value); + +/** + * Pack message SDO_Telemetrie_Rx_Node2. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_sdo_telemetrie_rx_node2_pack( + uint8_t *dst_p, + const struct can1_sdo_telemetrie_rx_node2_t *src_p, + size_t size); + +/** + * Unpack message SDO_Telemetrie_Rx_Node2. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_sdo_telemetrie_rx_node2_unpack( + struct can1_sdo_telemetrie_rx_node2_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from SDO_Telemetrie_Rx_Node2. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_sdo_telemetrie_rx_node2_init(struct can1_sdo_telemetrie_rx_node2_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sdo_telemetrie_rx_node2_sdo_command_byte_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_rx_node2_sdo_command_byte_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_rx_node2_sdo_command_byte_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sdo_telemetrie_rx_node2_sdo_od_index_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_rx_node2_sdo_od_index_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_rx_node2_sdo_od_index_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sdo_telemetrie_rx_node2_sdo_od_subindex_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_rx_node2_sdo_od_subindex_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_rx_node2_sdo_od_subindex_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_sdo_telemetrie_rx_node2_sdo_data_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_rx_node2_sdo_data_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_rx_node2_sdo_data_is_in_range(uint32_t value); + +/** + * Pack message SDO_Telemetrie_Tx. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_sdo_telemetrie_tx_pack( + uint8_t *dst_p, + const struct can1_sdo_telemetrie_tx_t *src_p, + size_t size); + +/** + * Unpack message SDO_Telemetrie_Tx. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_sdo_telemetrie_tx_unpack( + struct can1_sdo_telemetrie_tx_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from SDO_Telemetrie_Tx. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_sdo_telemetrie_tx_init(struct can1_sdo_telemetrie_tx_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sdo_telemetrie_tx_sdo_command_byte_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_tx_sdo_command_byte_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_tx_sdo_command_byte_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sdo_telemetrie_tx_sdo_od_index_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_tx_sdo_od_index_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_tx_sdo_od_index_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sdo_telemetrie_tx_sdo_od_subindex_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_tx_sdo_od_subindex_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_tx_sdo_od_subindex_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_sdo_telemetrie_tx_sdo_data_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sdo_telemetrie_tx_sdo_data_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sdo_telemetrie_tx_sdo_data_is_in_range(uint32_t value); + +/** + * Pack message Laptop_SDO_Node. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_laptop_sdo_node_pack( + uint8_t *dst_p, + const struct can1_laptop_sdo_node_t *src_p, + size_t size); + +/** + * Unpack message Laptop_SDO_Node. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_laptop_sdo_node_unpack( + struct can1_laptop_sdo_node_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Laptop_SDO_Node. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_laptop_sdo_node_init(struct can1_laptop_sdo_node_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_laptop_sdo_node_node_id_sdo_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_laptop_sdo_node_node_id_sdo_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_laptop_sdo_node_node_id_sdo_is_in_range(uint8_t value); + +/** + * Pack message XSens_LongLat. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_x_sens_long_lat_pack( + uint8_t *dst_p, + const struct can1_x_sens_long_lat_t *src_p, + size_t size); + +/** + * Unpack message XSens_LongLat. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_x_sens_long_lat_unpack( + struct can1_x_sens_long_lat_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from XSens_LongLat. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_x_sens_long_lat_init(struct can1_x_sens_long_lat_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int32_t can1_x_sens_long_lat_x_sens_latitude_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_long_lat_x_sens_latitude_decode(int32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_long_lat_x_sens_latitude_is_in_range(int32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int32_t can1_x_sens_long_lat_x_sens_longitude_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_long_lat_x_sens_longitude_decode(int32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_long_lat_x_sens_longitude_is_in_range(int32_t value); + +/** + * Pack message XSens_rateofturn. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_x_sens_rateofturn_pack( + uint8_t *dst_p, + const struct can1_x_sens_rateofturn_t *src_p, + size_t size); + +/** + * Unpack message XSens_rateofturn. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_x_sens_rateofturn_unpack( + struct can1_x_sens_rateofturn_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from XSens_rateofturn. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_x_sens_rateofturn_init(struct can1_x_sens_rateofturn_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_x_sens_rateofturn_x_sens_gyr_x_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_rateofturn_x_sens_gyr_x_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_rateofturn_x_sens_gyr_x_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_x_sens_rateofturn_x_sens_gy_y_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_rateofturn_x_sens_gy_y_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_rateofturn_x_sens_gy_y_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_x_sens_rateofturn_x_sens_gy_z_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_rateofturn_x_sens_gy_z_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_rateofturn_x_sens_gy_z_is_in_range(int16_t value); + +/** + * Pack message XSens_Acceleration. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_x_sens_acceleration_pack( + uint8_t *dst_p, + const struct can1_x_sens_acceleration_t *src_p, + size_t size); + +/** + * Unpack message XSens_Acceleration. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_x_sens_acceleration_unpack( + struct can1_x_sens_acceleration_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from XSens_Acceleration. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_x_sens_acceleration_init(struct can1_x_sens_acceleration_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_x_sens_acceleration_x_sens_acc_x_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_acceleration_x_sens_acc_x_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_acceleration_x_sens_acc_x_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_x_sens_acceleration_x_sens_acc_y_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_acceleration_x_sens_acc_y_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_acceleration_x_sens_acc_y_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_x_sens_acceleration_x_sens_acc_z_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_acceleration_x_sens_acc_z_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_acceleration_x_sens_acc_z_is_in_range(int16_t value); + +/** + * Pack message XSens_Velocity. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_x_sens_velocity_pack( + uint8_t *dst_p, + const struct can1_x_sens_velocity_t *src_p, + size_t size); + +/** + * Unpack message XSens_Velocity. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_x_sens_velocity_unpack( + struct can1_x_sens_velocity_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from XSens_Velocity. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_x_sens_velocity_init(struct can1_x_sens_velocity_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_x_sens_velocity_x_sens_vel_x_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_velocity_x_sens_vel_x_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_velocity_x_sens_vel_x_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_x_sens_velocity_x_sens_vel_y_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_velocity_x_sens_vel_y_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_velocity_x_sens_vel_y_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_x_sens_velocity_x_sens_vel_z_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_x_sens_velocity_x_sens_vel_z_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_x_sens_velocity_x_sens_vel_z_is_in_range(int16_t value); + +/** + * Pack message Telemetrie. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_telemetrie_pack( + uint8_t *dst_p, + const struct can1_telemetrie_t *src_p, + size_t size); + +/** + * Unpack message Telemetrie. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_telemetrie_unpack( + struct can1_telemetrie_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Telemetrie. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_telemetrie_init(struct can1_telemetrie_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_ini_check_error_state_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_ini_check_error_state_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_ini_check_error_state_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_powermap_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_powermap_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_powermap_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_apps_ok_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_apps_ok_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_apps_ok_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_brake_ok_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_brake_ok_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_brake_ok_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_allow_torque_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_allow_torque_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_allow_torque_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_asp_ok_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_asp_ok_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_asp_ok_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_pressure_sensor_ok_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_pressure_sensor_ok_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_pressure_sensor_ok_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_torque_vectoring_on_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_torque_vectoring_on_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_torque_vectoring_on_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_reku_on_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_reku_on_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_reku_on_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_traction_control_on_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_traction_control_on_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_traction_control_on_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_ts_deactivate_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_ts_deactivate_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_ts_deactivate_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_torque_limit_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_torque_limit_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_torque_limit_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_power_limit_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_power_limit_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_power_limit_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_torque_limit_dynamisch_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_torque_limit_dynamisch_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_torque_limit_dynamisch_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_torque_ohne_limit_l_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_torque_ohne_limit_l_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_torque_ohne_limit_l_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_telemetrie_torque_ohne_limit_r_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_telemetrie_torque_ohne_limit_r_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_telemetrie_torque_ohne_limit_r_is_in_range(uint8_t value); + +/** + * Pack message Override_Powermap. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_override_powermap_pack( + uint8_t *dst_p, + const struct can1_override_powermap_t *src_p, + size_t size); + +/** + * Unpack message Override_Powermap. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_override_powermap_unpack( + struct can1_override_powermap_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Override_Powermap. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_override_powermap_init(struct can1_override_powermap_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_powermap_laptopp_power_map_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_powermap_laptopp_power_map_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_powermap_laptopp_power_map_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_powermap_laptop_reku_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_powermap_laptop_reku_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_powermap_laptop_reku_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_powermap_laptop_tc_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_powermap_laptop_tc_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_powermap_laptop_tc_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_powermap_laptop_tv_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_powermap_laptop_tv_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_powermap_laptop_tv_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_powermap_laptop_slipref_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_powermap_laptop_slipref_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_powermap_laptop_slipref_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_override_powermap_laptop_tc_i_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_powermap_laptop_tc_i_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_powermap_laptop_tc_i_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_override_powermap_laptop_tc_p_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_powermap_laptop_tc_p_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_powermap_laptop_tc_p_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_powermap_laptop_tc_mumax_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_powermap_laptop_tc_mumax_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_powermap_laptop_tc_mumax_is_in_range(uint8_t value); + +/** + * Pack message Override_Laptop_2. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_override_laptop_2_pack( + uint8_t *dst_p, + const struct can1_override_laptop_2_t *src_p, + size_t size); + +/** + * Unpack message Override_Laptop_2. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_override_laptop_2_unpack( + struct can1_override_laptop_2_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Override_Laptop_2. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_override_laptop_2_init(struct can1_override_laptop_2_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_2_as_mission_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_2_as_mission_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_2_as_mission_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_2_as_state_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_2_as_state_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_2_as_state_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_override_laptop_2_manual_input_torque_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_2_manual_input_torque_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_2_manual_input_torque_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_2_laptop_powerlimit_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_2_laptop_powerlimit_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_2_laptop_powerlimit_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_2_laptop_torque_lim_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_2_laptop_torque_lim_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_2_laptop_torque_lim_is_in_range(uint8_t value); + +/** + * Pack message Override_EPSC_Cooling. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_override_epsc_cooling_pack( + uint8_t *dst_p, + const struct can1_override_epsc_cooling_t *src_p, + size_t size); + +/** + * Unpack message Override_EPSC_Cooling. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_override_epsc_cooling_unpack( + struct can1_override_epsc_cooling_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Override_EPSC_Cooling. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_override_epsc_cooling_init(struct can1_override_epsc_cooling_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_override_epsc_cooling_epsc_manual_angle_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_epsc_cooling_epsc_manual_angle_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_epsc_cooling_epsc_manual_angle_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_epsc_cooling_epsc_mode_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_epsc_cooling_epsc_mode_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_epsc_cooling_epsc_mode_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_epsc_cooling_ac_cooling_enable_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_epsc_cooling_ac_cooling_enable_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_epsc_cooling_ac_cooling_enable_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_epsc_cooling_ts_cooling_enable_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_epsc_cooling_ts_cooling_enable_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_epsc_cooling_ts_cooling_enable_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_epsc_cooling_ac_cooling_pwm_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_epsc_cooling_ac_cooling_pwm_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_epsc_cooling_ac_cooling_pwm_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_epsc_cooling_ts_cooling_pwm_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_epsc_cooling_ts_cooling_pwm_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_epsc_cooling_ts_cooling_pwm_is_in_range(uint8_t value); + +/** + * Pack message Override_Laptop. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_override_laptop_pack( + uint8_t *dst_p, + const struct can1_override_laptop_t *src_p, + size_t size); + +/** + * Unpack message Override_Laptop. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_override_laptop_unpack( + struct can1_override_laptop_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Override_Laptop. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_override_laptop_init(struct can1_override_laptop_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_fake_r2_d_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_fake_r2_d_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_fake_r2_d_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_fake_soundbox_emergency_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_fake_soundbox_emergency_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_fake_soundbox_emergency_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_fake_soundbox_r2_d_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_fake_soundbox_r2_d_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_fake_soundbox_r2_d_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_fake_ts_active_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_fake_ts_active_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_fake_ts_active_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_apps_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_apps_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_apps_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_as_mission_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_as_mission_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_as_mission_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_as_state_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_as_state_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_as_state_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_epsc_mode_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_epsc_mode_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_epsc_mode_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_pdu_ac_cooling_enable_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_pdu_ac_cooling_enable_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_pdu_ac_cooling_enable_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_pdu_acu_enable_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_pdu_acu_enable_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_pdu_acu_enable_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_pdu_drs_enable_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_pdu_drs_enable_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_pdu_drs_enable_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_pdu_epsc_enable_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_pdu_epsc_enable_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_pdu_epsc_enable_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_pdu_heartbeat_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_pdu_heartbeat_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_pdu_heartbeat_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_pdu_lidar_enable_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_pdu_lidar_enable_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_pdu_lidar_enable_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_pdu_pn_v1_enable_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_pdu_pn_v1_enable_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_pdu_pn_v1_enable_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_pdu_pn_v2_enable_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_pdu_pn_v2_enable_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_pdu_pn_v2_enable_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_pdu_ts_cooling_enable_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_pdu_ts_cooling_enable_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_pdu_ts_cooling_enable_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_power_map_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_power_map_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_power_map_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_tc_parameter_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_tc_parameter_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_tc_parameter_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_override_laptop_override_torque_input_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_override_laptop_override_torque_input_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_override_laptop_override_torque_input_is_in_range(uint8_t value); + +/** + * Pack message APPS_Override. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_apps_override_pack( + uint8_t *dst_p, + const struct can1_apps_override_t *src_p, + size_t size); + +/** + * Unpack message APPS_Override. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_apps_override_unpack( + struct can1_apps_override_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from APPS_Override. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_apps_override_init(struct can1_apps_override_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_apps_override_apps_0_max_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_apps_override_apps_0_max_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_apps_override_apps_0_max_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_apps_override_apps_0_min_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_apps_override_apps_0_min_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_apps_override_apps_0_min_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_apps_override_apps_1_max_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_apps_override_apps_1_max_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_apps_override_apps_1_max_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_apps_override_apps_1_min_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_apps_override_apps_1_min_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_apps_override_apps_1_min_is_in_range(uint16_t value); + +/** + * Pack message FTCU_Damper. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ftcu_damper_pack( + uint8_t *dst_p, + const struct can1_ftcu_damper_t *src_p, + size_t size); + +/** + * Unpack message FTCU_Damper. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ftcu_damper_unpack( + struct can1_ftcu_damper_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from FTCU_Damper. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ftcu_damper_init(struct can1_ftcu_damper_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_damper_ftcu_damper_fl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_damper_ftcu_damper_fl_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_damper_ftcu_damper_fl_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_damper_ftcu_damper_fr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_damper_ftcu_damper_fr_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_damper_ftcu_damper_fr_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_damper_ftcu_damper_rl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_damper_ftcu_damper_rl_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_damper_ftcu_damper_rl_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_damper_ftcu_damper_rr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_damper_ftcu_damper_rr_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_damper_ftcu_damper_rr_is_in_range(uint16_t value); + +/** + * Pack message FTCU_ParamConfirm. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ftcu_param_confirm_pack( + uint8_t *dst_p, + const struct can1_ftcu_param_confirm_t *src_p, + size_t size); + +/** + * Unpack message FTCU_ParamConfirm. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ftcu_param_confirm_unpack( + struct can1_ftcu_param_confirm_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from FTCU_ParamConfirm. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ftcu_param_confirm_init(struct can1_ftcu_param_confirm_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ftcu_param_confirm_ftcu_param_confirm_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_param_confirm_ftcu_param_confirm_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_param_confirm_ftcu_param_confirm_is_in_range(uint8_t value); + +/** + * Pack message Sensornode_F_10Hz. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_sensornode_f_10_hz_pack( + uint8_t *dst_p, + const struct can1_sensornode_f_10_hz_t *src_p, + size_t size); + +/** + * Unpack message Sensornode_F_10Hz. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_sensornode_f_10_hz_unpack( + struct can1_sensornode_f_10_hz_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Sensornode_F_10Hz. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_sensornode_f_10_hz_init(struct can1_sensornode_f_10_hz_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_10_hz_ls_l_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_10_hz_ls_l_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_10_hz_ls_l_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_10_hz_ls_r_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_10_hz_ls_r_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_10_hz_ls_r_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_10_hz_sdc_m_pre_bots_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_10_hz_sdc_m_pre_bots_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_10_hz_sdc_m_pre_bots_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_10_hz_sdc_m_post_ins_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_10_hz_sdc_m_post_ins_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_10_hz_sdc_m_post_ins_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_10_hz_sdc_m_post_bspd_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_10_hz_sdc_m_post_bspd_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_10_hz_sdc_m_post_bspd_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_10_hz_bdts_fl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_10_hz_bdts_fl_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_10_hz_bdts_fl_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_10_hz_bdts_fr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_10_hz_bdts_fr_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_10_hz_bdts_fr_is_in_range(uint8_t value); + +/** + * Pack message Sensornode_F_100Hz_1. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_sensornode_f_100_hz_1_pack( + uint8_t *dst_p, + const struct can1_sensornode_f_100_hz_1_t *src_p, + size_t size); + +/** + * Unpack message Sensornode_F_100Hz_1. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_sensornode_f_100_hz_1_unpack( + struct can1_sensornode_f_100_hz_1_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Sensornode_F_100Hz_1. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_sensornode_f_100_hz_1_init(struct can1_sensornode_f_100_hz_1_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_100_hz_1_apps_1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_100_hz_1_apps_1_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_100_hz_1_apps_1_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_100_hz_1_apps_2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_100_hz_1_apps_2_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_100_hz_1_apps_2_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_100_hz_1_bp_f_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_100_hz_1_bp_f_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_100_hz_1_bp_f_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sensornode_f_100_hz_1_sas_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_100_hz_1_sas_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_100_hz_1_sas_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_100_hz_1_wss_fl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_100_hz_1_wss_fl_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_100_hz_1_wss_fl_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_f_100_hz_1_wss_fr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_100_hz_1_wss_fr_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_100_hz_1_wss_fr_is_in_range(uint8_t value); + +/** + * Pack message Sensornode_F_100Hz_2. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_sensornode_f_100_hz_2_pack( + uint8_t *dst_p, + const struct can1_sensornode_f_100_hz_2_t *src_p, + size_t size); + +/** + * Unpack message Sensornode_F_100Hz_2. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_sensornode_f_100_hz_2_unpack( + struct can1_sensornode_f_100_hz_2_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Sensornode_F_100Hz_2. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_sensornode_f_100_hz_2_init(struct can1_sensornode_f_100_hz_2_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sensornode_f_100_hz_2_ds_fl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_100_hz_2_ds_fl_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_100_hz_2_ds_fl_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sensornode_f_100_hz_2_ds_fr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_100_hz_2_ds_fr_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_100_hz_2_ds_fr_is_in_range(uint16_t value); + +/** + * Pack message Sensornode_F_1kHz. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_sensornode_f_1k_hz_pack( + uint8_t *dst_p, + const struct can1_sensornode_f_1k_hz_t *src_p, + size_t size); + +/** + * Unpack message Sensornode_F_1kHz. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_sensornode_f_1k_hz_unpack( + struct can1_sensornode_f_1k_hz_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Sensornode_F_1kHz. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_sensornode_f_1k_hz_init(struct can1_sensornode_f_1k_hz_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sensornode_f_1k_hz_sls_fl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_1k_hz_sls_fl_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_1k_hz_sls_fl_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sensornode_f_1k_hz_sls_fr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_f_1k_hz_sls_fr_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_f_1k_hz_sls_fr_is_in_range(uint16_t value); + +/** + * Pack message Sensornode_R_10Hz. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_sensornode_r_10_hz_pack( + uint8_t *dst_p, + const struct can1_sensornode_r_10_hz_t *src_p, + size_t size); + +/** + * Unpack message Sensornode_R_10Hz. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_sensornode_r_10_hz_unpack( + struct can1_sensornode_r_10_hz_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Sensornode_R_10Hz. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_sensornode_r_10_hz_init(struct can1_sensornode_r_10_hz_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_10_hz_ext_ts_on_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_10_hz_ext_ts_on_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_10_hz_ext_ts_on_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_10_hz_sdc_m_pre_tsms_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_10_hz_sdc_m_pre_tsms_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_10_hz_sdc_m_pre_tsms_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_10_hz_sdc_m_post_tsms_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_10_hz_sdc_m_post_tsms_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_10_hz_sdc_m_post_tsms_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_10_hz_bdts_rl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_10_hz_bdts_rl_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_10_hz_bdts_rl_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_10_hz_bdts_rr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_10_hz_bdts_rr_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_10_hz_bdts_rr_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_10_hz_wt_bat_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_10_hz_wt_bat_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_10_hz_wt_bat_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_10_hz_wt_dt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_10_hz_wt_dt_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_10_hz_wt_dt_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_10_hz_wp_bat_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_10_hz_wp_bat_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_10_hz_wp_bat_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_10_hz_wp_dt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_10_hz_wp_dt_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_10_hz_wp_dt_is_in_range(uint8_t value); + +/** + * Pack message Sensornode_R_100Hz. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_sensornode_r_100_hz_pack( + uint8_t *dst_p, + const struct can1_sensornode_r_100_hz_t *src_p, + size_t size); + +/** + * Unpack message Sensornode_R_100Hz. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_sensornode_r_100_hz_unpack( + struct can1_sensornode_r_100_hz_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Sensornode_R_100Hz. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_sensornode_r_100_hz_init(struct can1_sensornode_r_100_hz_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_100_hz_ebs_aps_1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_100_hz_ebs_aps_1_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_100_hz_ebs_aps_1_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_100_hz_ebs_aps_2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_100_hz_ebs_aps_2_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_100_hz_ebs_aps_2_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_100_hz_bp_r_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_100_hz_bp_r_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_100_hz_bp_r_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_100_hz_wss_rl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_100_hz_wss_rl_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_100_hz_wss_rl_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_sensornode_r_100_hz_wss_rr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_100_hz_wss_rr_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_100_hz_wss_rr_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sensornode_r_100_hz_ds_rl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_100_hz_ds_rl_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_100_hz_ds_rl_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sensornode_r_100_hz_ds_rr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_100_hz_ds_rr_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_100_hz_ds_rr_is_in_range(uint16_t value); + +/** + * Pack message Sensornode_R_1kHz. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_sensornode_r_1k_hz_pack( + uint8_t *dst_p, + const struct can1_sensornode_r_1k_hz_t *src_p, + size_t size); + +/** + * Unpack message Sensornode_R_1kHz. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_sensornode_r_1k_hz_unpack( + struct can1_sensornode_r_1k_hz_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Sensornode_R_1kHz. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_sensornode_r_1k_hz_init(struct can1_sensornode_r_1k_hz_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sensornode_r_1k_hz_sls_rl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_1k_hz_sls_rl_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_1k_hz_sls_rl_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_sensornode_r_1k_hz_sls_rr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_sensornode_r_1k_hz_sls_rr_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_sensornode_r_1k_hz_sls_rr_is_in_range(uint16_t value); + +/** + * Pack message PWM_DutyCycle. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_pwm_duty_cycle_pack( + uint8_t *dst_p, + const struct can1_pwm_duty_cycle_t *src_p, + size_t size); + +/** + * Unpack message PWM_DutyCycle. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_pwm_duty_cycle_unpack( + struct can1_pwm_duty_cycle_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from PWM_DutyCycle. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_pwm_duty_cycle_init(struct can1_pwm_duty_cycle_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pwm_duty_cycle_dc_drs_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pwm_duty_cycle_dc_drs_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pwm_duty_cycle_dc_drs_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pwm_duty_cycle_dc_assi_y_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pwm_duty_cycle_dc_assi_y_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pwm_duty_cycle_dc_assi_y_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pwm_duty_cycle_dc_assi_b_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pwm_duty_cycle_dc_assi_b_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pwm_duty_cycle_dc_assi_b_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pwm_duty_cycle_dc_bl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pwm_duty_cycle_dc_bl_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pwm_duty_cycle_dc_bl_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pwm_duty_cycle_dc_fans_dt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pwm_duty_cycle_dc_fans_dt_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pwm_duty_cycle_dc_fans_dt_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pwm_duty_cycle_dc_fans_bat_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pwm_duty_cycle_dc_fans_bat_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pwm_duty_cycle_dc_fans_bat_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pwm_duty_cycle_dc_sbx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pwm_duty_cycle_dc_sbx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pwm_duty_cycle_dc_sbx_is_in_range(uint8_t value); + +/** + * Pack message PWM_Config. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_pwm_config_pack( + uint8_t *dst_p, + const struct can1_pwm_config_t *src_p, + size_t size); + +/** + * Unpack message PWM_Config. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_pwm_config_unpack( + struct can1_pwm_config_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from PWM_Config. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_pwm_config_init(struct can1_pwm_config_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pwm_config_freq_pwm1_drs_lighting_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pwm_config_freq_pwm1_drs_lighting_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pwm_config_freq_pwm1_drs_lighting_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pwm_config_freq_pwm3_fans_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pwm_config_freq_pwm3_fans_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pwm_config_freq_pwm3_fans_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pwm_config_freq_pwm2_sbx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pwm_config_freq_pwm2_sbx_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pwm_config_freq_pwm2_sbx_is_in_range(uint16_t value); + +/** + * Pack message Dashboard_In. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_dashboard_in_pack( + uint8_t *dst_p, + const struct can1_dashboard_in_t *src_p, + size_t size); + +/** + * Unpack message Dashboard_In. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_dashboard_in_unpack( + struct can1_dashboard_in_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Dashboard_In. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_dashboard_in_init(struct can1_dashboard_in_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_dashboard_in_dashboard_r2_d_button_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_dashboard_in_dashboard_r2_d_button_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_dashboard_in_dashboard_r2_d_button_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_dashboard_in_dashboard_ts_activate_button_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_dashboard_in_dashboard_ts_activate_button_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_dashboard_in_dashboard_ts_activate_button_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_dashboard_in_dashboard_race_key_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_dashboard_in_dashboard_race_key_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_dashboard_in_dashboard_race_key_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_dashboard_in_dashboard_sdc_in_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_dashboard_in_dashboard_sdc_in_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_dashboard_in_dashboard_sdc_in_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_dashboard_in_dashboard_sdc_out_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_dashboard_in_dashboard_sdc_out_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_dashboard_in_dashboard_sdc_out_is_in_range(uint8_t value); + +/** + * Pack message AMS_Slave1Status. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave1_status_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_status_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave1Status. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave1_status_unpack( + struct can1_ams_slave1_status_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave1Status. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave1_status_init(struct can1_ams_slave1_status_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave1_status_ams_slave_status_error_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_status_ams_slave_status_error_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_status_ams_slave_status_error_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave1_status_ams_slave_status_id_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_status_ams_slave_status_id_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_status_ams_slave_status_id_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave1_status_ams_slave_status_temp_sensor_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_status_ams_slave_status_temp_sensor_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_status_ams_slave_status_temp_sensor_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_status_ams_slave_status_min_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_status_ams_slave_status_min_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_status_ams_slave_status_min_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_status_ams_slave_status_max_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_status_ams_slave_status_max_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_status_ams_slave_status_max_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ams_slave1_status_ams_slave_status_max_temp_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_status_ams_slave_status_max_temp_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_status_ams_slave_status_max_temp_is_in_range(int16_t value); + +/** + * Pack message AMS_Slave2_Log0. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave2_log0_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log0_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave2_Log0. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave2_log0_unpack( + struct can1_ams_slave2_log0_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave2_Log0. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave2_log0_init(struct can1_ams_slave2_log0_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log0_ams_slave_id_v0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log0_ams_slave_id_v0_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log0_ams_slave_id_v0_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log0_ams_slave_id_v1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log0_ams_slave_id_v1_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log0_ams_slave_id_v1_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log0_ams_slave_id_v2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log0_ams_slave_id_v2_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log0_ams_slave_id_v2_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log0_ams_slave_id_v3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log0_ams_slave_id_v3_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log0_ams_slave_id_v3_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave2_Log1. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave2_log1_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log1_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave2_Log1. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave2_log1_unpack( + struct can1_ams_slave2_log1_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave2_Log1. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave2_log1_init(struct can1_ams_slave2_log1_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log1_ams_slave_id_v4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log1_ams_slave_id_v4_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log1_ams_slave_id_v4_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log1_ams_slave_id_v5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log1_ams_slave_id_v5_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log1_ams_slave_id_v5_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log1_ams_slave_id_v6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log1_ams_slave_id_v6_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log1_ams_slave_id_v6_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log1_ams_slave_id_v7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log1_ams_slave_id_v7_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log1_ams_slave_id_v7_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave2_Log2. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave2_log2_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log2_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave2_Log2. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave2_log2_unpack( + struct can1_ams_slave2_log2_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave2_Log2. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave2_log2_init(struct can1_ams_slave2_log2_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log2_ams_slave_id_v8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log2_ams_slave_id_v8_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log2_ams_slave_id_v8_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log2_ams_slave_id_v9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log2_ams_slave_id_v9_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log2_ams_slave_id_v9_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log2_ams_slave_id_v10_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log2_ams_slave_id_v10_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log2_ams_slave_id_v10_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log2_ams_slave_id_v11_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log2_ams_slave_id_v11_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log2_ams_slave_id_v11_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave2_Log3. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave2_log3_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log3_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave2_Log3. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave2_log3_unpack( + struct can1_ams_slave2_log3_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave2_Log3. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave2_log3_init(struct can1_ams_slave2_log3_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log3_ams_slave_id_v12_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log3_ams_slave_id_v12_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log3_ams_slave_id_v12_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log3_ams_slave_id_v13_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log3_ams_slave_id_v13_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log3_ams_slave_id_v13_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log3_ams_slave_id_v14_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log3_ams_slave_id_v14_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log3_ams_slave_id_v14_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_log3_ams_slave_id_v15_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log3_ams_slave_id_v15_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log3_ams_slave_id_v15_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave2_Log4. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave2_log4_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log4_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave2_Log4. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave2_log4_unpack( + struct can1_ams_slave2_log4_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave2_Log4. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave2_log4_init(struct can1_ams_slave2_log4_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_ams_slave2_log4_ams_slave_id_failed_sensors_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log4_ams_slave_id_failed_sensors_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log4_ams_slave_id_failed_sensors_is_in_range(uint32_t value); + +/** + * Pack message AMS_Slave2_Log5. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave2_log5_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log5_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave2_Log5. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave2_log5_unpack( + struct can1_ams_slave2_log5_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave2_Log5. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave2_log5_init(struct can1_ams_slave2_log5_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave2_log5_ams_slave_id_t0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log5_ams_slave_id_t0_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log5_ams_slave_id_t0_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave2_log5_ams_slave_id_t1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log5_ams_slave_id_t1_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log5_ams_slave_id_t1_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave2_log5_ams_slave_id_t2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log5_ams_slave_id_t2_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log5_ams_slave_id_t2_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave2_log5_ams_slave_id_t3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log5_ams_slave_id_t3_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log5_ams_slave_id_t3_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave2_log5_ams_slave_id_t4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log5_ams_slave_id_t4_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log5_ams_slave_id_t4_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave2_log5_ams_slave_id_t5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log5_ams_slave_id_t5_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log5_ams_slave_id_t5_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave2_log5_ams_slave_id_t6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log5_ams_slave_id_t6_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log5_ams_slave_id_t6_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave2_log5_ams_slave_id_t7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log5_ams_slave_id_t7_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log5_ams_slave_id_t7_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave5_Log6. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave5_log6_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log6_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave5_Log6. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave5_log6_unpack( + struct can1_ams_slave5_log6_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave5_Log6. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave5_log6_init(struct can1_ams_slave5_log6_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave5_log6_ams_slave_id_t8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log6_ams_slave_id_t8_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log6_ams_slave_id_t8_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave5_log6_ams_slave_id_t9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log6_ams_slave_id_t9_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log6_ams_slave_id_t9_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave4_Log6. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave4_log6_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log6_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave4_Log6. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave4_log6_unpack( + struct can1_ams_slave4_log6_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave4_Log6. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave4_log6_init(struct can1_ams_slave4_log6_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave4_log6_ams_slave_id_t8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log6_ams_slave_id_t8_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log6_ams_slave_id_t8_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave4_log6_ams_slave_id_t9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log6_ams_slave_id_t9_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log6_ams_slave_id_t9_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave3_Log6. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave3_log6_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log6_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave3_Log6. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave3_log6_unpack( + struct can1_ams_slave3_log6_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave3_Log6. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave3_log6_init(struct can1_ams_slave3_log6_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave3_log6_ams_slave_id_t8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log6_ams_slave_id_t8_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log6_ams_slave_id_t8_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave3_log6_ams_slave_id_t9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log6_ams_slave_id_t9_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log6_ams_slave_id_t9_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave2_Log6. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave2_log6_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log6_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave2_Log6. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave2_log6_unpack( + struct can1_ams_slave2_log6_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave2_Log6. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave2_log6_init(struct can1_ams_slave2_log6_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave2_log6_ams_slave_id_t8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log6_ams_slave_id_t8_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log6_ams_slave_id_t8_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave2_log6_ams_slave_id_t9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_log6_ams_slave_id_t9_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_log6_ams_slave_id_t9_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave1_Log6. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave1_log6_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log6_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave1_Log6. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave1_log6_unpack( + struct can1_ams_slave1_log6_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave1_Log6. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave1_log6_init(struct can1_ams_slave1_log6_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave1_log6_ams_slave_id_t8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log6_ams_slave_id_t8_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log6_ams_slave_id_t8_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave1_log6_ams_slave_id_t9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log6_ams_slave_id_t9_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log6_ams_slave_id_t9_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave5_Log5. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave5_log5_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log5_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave5_Log5. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave5_log5_unpack( + struct can1_ams_slave5_log5_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave5_Log5. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave5_log5_init(struct can1_ams_slave5_log5_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave5_log5_ams_slave_id_t0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log5_ams_slave_id_t0_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log5_ams_slave_id_t0_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave5_log5_ams_slave_id_t1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log5_ams_slave_id_t1_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log5_ams_slave_id_t1_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave5_log5_ams_slave_id_t2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log5_ams_slave_id_t2_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log5_ams_slave_id_t2_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave5_log5_ams_slave_id_t3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log5_ams_slave_id_t3_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log5_ams_slave_id_t3_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave5_log5_ams_slave_id_t4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log5_ams_slave_id_t4_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log5_ams_slave_id_t4_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave5_log5_ams_slave_id_t5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log5_ams_slave_id_t5_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log5_ams_slave_id_t5_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave5_log5_ams_slave_id_t6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log5_ams_slave_id_t6_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log5_ams_slave_id_t6_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave5_log5_ams_slave_id_t7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log5_ams_slave_id_t7_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log5_ams_slave_id_t7_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave4_Log5. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave4_log5_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log5_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave4_Log5. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave4_log5_unpack( + struct can1_ams_slave4_log5_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave4_Log5. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave4_log5_init(struct can1_ams_slave4_log5_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave4_log5_ams_slave_id_t0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log5_ams_slave_id_t0_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log5_ams_slave_id_t0_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave4_log5_ams_slave_id_t1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log5_ams_slave_id_t1_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log5_ams_slave_id_t1_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave4_log5_ams_slave_id_t2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log5_ams_slave_id_t2_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log5_ams_slave_id_t2_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave4_log5_ams_slave_id_t3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log5_ams_slave_id_t3_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log5_ams_slave_id_t3_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave4_log5_ams_slave_id_t4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log5_ams_slave_id_t4_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log5_ams_slave_id_t4_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave4_log5_ams_slave_id_t5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log5_ams_slave_id_t5_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log5_ams_slave_id_t5_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave4_log5_ams_slave_id_t6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log5_ams_slave_id_t6_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log5_ams_slave_id_t6_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave4_log5_ams_slave_id_t7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log5_ams_slave_id_t7_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log5_ams_slave_id_t7_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave3_Log5. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave3_log5_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log5_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave3_Log5. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave3_log5_unpack( + struct can1_ams_slave3_log5_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave3_Log5. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave3_log5_init(struct can1_ams_slave3_log5_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave3_log5_ams_slave_id_t0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log5_ams_slave_id_t0_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log5_ams_slave_id_t0_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave3_log5_ams_slave_id_t1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log5_ams_slave_id_t1_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log5_ams_slave_id_t1_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave3_log5_ams_slave_id_t2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log5_ams_slave_id_t2_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log5_ams_slave_id_t2_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave3_log5_ams_slave_id_t3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log5_ams_slave_id_t3_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log5_ams_slave_id_t3_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave3_log5_ams_slave_id_t4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log5_ams_slave_id_t4_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log5_ams_slave_id_t4_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave3_log5_ams_slave_id_t5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log5_ams_slave_id_t5_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log5_ams_slave_id_t5_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave3_log5_ams_slave_id_t6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log5_ams_slave_id_t6_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log5_ams_slave_id_t6_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave3_log5_ams_slave_id_t7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log5_ams_slave_id_t7_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log5_ams_slave_id_t7_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave1_Log5. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave1_log5_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log5_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave1_Log5. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave1_log5_unpack( + struct can1_ams_slave1_log5_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave1_Log5. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave1_log5_init(struct can1_ams_slave1_log5_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave1_log5_ams_slave_id_t0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log5_ams_slave_id_t0_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log5_ams_slave_id_t0_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave1_log5_ams_slave_id_t1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log5_ams_slave_id_t1_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log5_ams_slave_id_t1_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave1_log5_ams_slave_id_t2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log5_ams_slave_id_t2_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log5_ams_slave_id_t2_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave1_log5_ams_slave_id_t3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log5_ams_slave_id_t3_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log5_ams_slave_id_t3_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave1_log5_ams_slave_id_t4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log5_ams_slave_id_t4_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log5_ams_slave_id_t4_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave1_log5_ams_slave_id_t5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log5_ams_slave_id_t5_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log5_ams_slave_id_t5_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave1_log5_ams_slave_id_t6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log5_ams_slave_id_t6_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log5_ams_slave_id_t6_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave1_log5_ams_slave_id_t7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log5_ams_slave_id_t7_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log5_ams_slave_id_t7_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave5_Log4. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave5_log4_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log4_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave5_Log4. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave5_log4_unpack( + struct can1_ams_slave5_log4_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave5_Log4. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave5_log4_init(struct can1_ams_slave5_log4_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_ams_slave5_log4_ams_slave_id_failed_sensors_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log4_ams_slave_id_failed_sensors_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log4_ams_slave_id_failed_sensors_is_in_range(uint32_t value); + +/** + * Pack message AMS_Slave4_Log4. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave4_log4_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log4_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave4_Log4. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave4_log4_unpack( + struct can1_ams_slave4_log4_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave4_Log4. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave4_log4_init(struct can1_ams_slave4_log4_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_ams_slave4_log4_ams_slave_id_failed_sensors_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log4_ams_slave_id_failed_sensors_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log4_ams_slave_id_failed_sensors_is_in_range(uint32_t value); + +/** + * Pack message AMS_Slave3_Log4. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave3_log4_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log4_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave3_Log4. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave3_log4_unpack( + struct can1_ams_slave3_log4_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave3_Log4. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave3_log4_init(struct can1_ams_slave3_log4_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_ams_slave3_log4_ams_slave_id_failed_sensors_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log4_ams_slave_id_failed_sensors_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log4_ams_slave_id_failed_sensors_is_in_range(uint32_t value); + +/** + * Pack message AMS_Slave1_Log4. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave1_log4_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log4_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave1_Log4. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave1_log4_unpack( + struct can1_ams_slave1_log4_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave1_Log4. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave1_log4_init(struct can1_ams_slave1_log4_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_ams_slave1_log4_ams_slave_id_failed_sensors_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log4_ams_slave_id_failed_sensors_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log4_ams_slave_id_failed_sensors_is_in_range(uint32_t value); + +/** + * Pack message AMS_Slave5_Log3. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave5_log3_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log3_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave5_Log3. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave5_log3_unpack( + struct can1_ams_slave5_log3_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave5_Log3. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave5_log3_init(struct can1_ams_slave5_log3_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log3_ams_slave_id_v12_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log3_ams_slave_id_v12_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log3_ams_slave_id_v12_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log3_ams_slave_id_v13_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log3_ams_slave_id_v13_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log3_ams_slave_id_v13_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log3_ams_slave_id_v14_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log3_ams_slave_id_v14_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log3_ams_slave_id_v14_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log3_ams_slave_id_v15_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log3_ams_slave_id_v15_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log3_ams_slave_id_v15_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave4_Log3. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave4_log3_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log3_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave4_Log3. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave4_log3_unpack( + struct can1_ams_slave4_log3_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave4_Log3. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave4_log3_init(struct can1_ams_slave4_log3_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log3_ams_slave_id_v12_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log3_ams_slave_id_v12_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log3_ams_slave_id_v12_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log3_ams_slave_id_v13_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log3_ams_slave_id_v13_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log3_ams_slave_id_v13_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log3_ams_slave_id_v14_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log3_ams_slave_id_v14_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log3_ams_slave_id_v14_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log3_ams_slave_id_v15_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log3_ams_slave_id_v15_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log3_ams_slave_id_v15_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave3_Log3. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave3_log3_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log3_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave3_Log3. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave3_log3_unpack( + struct can1_ams_slave3_log3_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave3_Log3. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave3_log3_init(struct can1_ams_slave3_log3_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log3_ams_slave_id_v12_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log3_ams_slave_id_v12_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log3_ams_slave_id_v12_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log3_ams_slave_id_v13_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log3_ams_slave_id_v13_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log3_ams_slave_id_v13_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log3_ams_slave_id_v14_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log3_ams_slave_id_v14_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log3_ams_slave_id_v14_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log3_ams_slave_id_v15_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log3_ams_slave_id_v15_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log3_ams_slave_id_v15_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave1_Log3. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave1_log3_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log3_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave1_Log3. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave1_log3_unpack( + struct can1_ams_slave1_log3_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave1_Log3. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave1_log3_init(struct can1_ams_slave1_log3_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log3_ams_slave_id_v12_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log3_ams_slave_id_v12_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log3_ams_slave_id_v12_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log3_ams_slave_id_v13_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log3_ams_slave_id_v13_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log3_ams_slave_id_v13_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log3_ams_slave_id_v14_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log3_ams_slave_id_v14_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log3_ams_slave_id_v14_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log3_ams_slave_id_v15_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log3_ams_slave_id_v15_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log3_ams_slave_id_v15_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave5_Log2. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave5_log2_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log2_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave5_Log2. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave5_log2_unpack( + struct can1_ams_slave5_log2_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave5_Log2. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave5_log2_init(struct can1_ams_slave5_log2_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log2_ams_slave_id_v8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log2_ams_slave_id_v8_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log2_ams_slave_id_v8_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log2_ams_slave_id_v9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log2_ams_slave_id_v9_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log2_ams_slave_id_v9_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log2_ams_slave_id_v10_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log2_ams_slave_id_v10_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log2_ams_slave_id_v10_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log2_ams_slave_id_v11_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log2_ams_slave_id_v11_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log2_ams_slave_id_v11_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave4_Log2. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave4_log2_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log2_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave4_Log2. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave4_log2_unpack( + struct can1_ams_slave4_log2_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave4_Log2. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave4_log2_init(struct can1_ams_slave4_log2_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log2_ams_slave_id_v8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log2_ams_slave_id_v8_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log2_ams_slave_id_v8_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log2_ams_slave_id_v9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log2_ams_slave_id_v9_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log2_ams_slave_id_v9_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log2_ams_slave_id_v10_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log2_ams_slave_id_v10_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log2_ams_slave_id_v10_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log2_ams_slave_id_v11_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log2_ams_slave_id_v11_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log2_ams_slave_id_v11_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave3_Log2. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave3_log2_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log2_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave3_Log2. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave3_log2_unpack( + struct can1_ams_slave3_log2_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave3_Log2. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave3_log2_init(struct can1_ams_slave3_log2_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log2_ams_slave_id_v8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log2_ams_slave_id_v8_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log2_ams_slave_id_v8_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log2_ams_slave_id_v9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log2_ams_slave_id_v9_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log2_ams_slave_id_v9_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log2_ams_slave_id_v10_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log2_ams_slave_id_v10_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log2_ams_slave_id_v10_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log2_ams_slave_id_v11_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log2_ams_slave_id_v11_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log2_ams_slave_id_v11_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave1_Log2. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave1_log2_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log2_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave1_Log2. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave1_log2_unpack( + struct can1_ams_slave1_log2_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave1_Log2. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave1_log2_init(struct can1_ams_slave1_log2_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log2_ams_slave_id_v8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log2_ams_slave_id_v8_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log2_ams_slave_id_v8_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log2_ams_slave_id_v9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log2_ams_slave_id_v9_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log2_ams_slave_id_v9_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log2_ams_slave_id_v10_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log2_ams_slave_id_v10_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log2_ams_slave_id_v10_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log2_ams_slave_id_v11_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log2_ams_slave_id_v11_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log2_ams_slave_id_v11_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave5_Log1. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave5_log1_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log1_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave5_Log1. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave5_log1_unpack( + struct can1_ams_slave5_log1_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave5_Log1. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave5_log1_init(struct can1_ams_slave5_log1_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log1_ams_slave_id_v4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log1_ams_slave_id_v4_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log1_ams_slave_id_v4_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log1_ams_slave_id_v5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log1_ams_slave_id_v5_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log1_ams_slave_id_v5_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log1_ams_slave_id_v6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log1_ams_slave_id_v6_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log1_ams_slave_id_v6_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log1_ams_slave_id_v7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log1_ams_slave_id_v7_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log1_ams_slave_id_v7_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave4_Log1. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave4_log1_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log1_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave4_Log1. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave4_log1_unpack( + struct can1_ams_slave4_log1_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave4_Log1. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave4_log1_init(struct can1_ams_slave4_log1_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log1_ams_slave_id_v4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log1_ams_slave_id_v4_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log1_ams_slave_id_v4_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log1_ams_slave_id_v5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log1_ams_slave_id_v5_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log1_ams_slave_id_v5_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log1_ams_slave_id_v6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log1_ams_slave_id_v6_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log1_ams_slave_id_v6_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log1_ams_slave_id_v7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log1_ams_slave_id_v7_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log1_ams_slave_id_v7_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave3_Log1. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave3_log1_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log1_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave3_Log1. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave3_log1_unpack( + struct can1_ams_slave3_log1_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave3_Log1. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave3_log1_init(struct can1_ams_slave3_log1_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log1_ams_slave_id_v4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log1_ams_slave_id_v4_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log1_ams_slave_id_v4_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log1_ams_slave_id_v5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log1_ams_slave_id_v5_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log1_ams_slave_id_v5_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log1_ams_slave_id_v6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log1_ams_slave_id_v6_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log1_ams_slave_id_v6_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log1_ams_slave_id_v7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log1_ams_slave_id_v7_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log1_ams_slave_id_v7_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave1_Log1. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave1_log1_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log1_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave1_Log1. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave1_log1_unpack( + struct can1_ams_slave1_log1_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave1_Log1. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave1_log1_init(struct can1_ams_slave1_log1_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log1_ams_slave_id_v4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log1_ams_slave_id_v4_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log1_ams_slave_id_v4_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log1_ams_slave_id_v5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log1_ams_slave_id_v5_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log1_ams_slave_id_v5_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log1_ams_slave_id_v6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log1_ams_slave_id_v6_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log1_ams_slave_id_v6_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log1_ams_slave_id_v7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log1_ams_slave_id_v7_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log1_ams_slave_id_v7_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave5_Log0. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave5_log0_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log0_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave5_Log0. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave5_log0_unpack( + struct can1_ams_slave5_log0_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave5_Log0. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave5_log0_init(struct can1_ams_slave5_log0_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log0_ams_slave_id_v0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log0_ams_slave_id_v0_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log0_ams_slave_id_v0_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log0_ams_slave_id_v1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log0_ams_slave_id_v1_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log0_ams_slave_id_v1_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log0_ams_slave_id_v2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log0_ams_slave_id_v2_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log0_ams_slave_id_v2_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_log0_ams_slave_id_v3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_log0_ams_slave_id_v3_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_log0_ams_slave_id_v3_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave4_Log0. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave4_log0_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log0_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave4_Log0. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave4_log0_unpack( + struct can1_ams_slave4_log0_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave4_Log0. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave4_log0_init(struct can1_ams_slave4_log0_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log0_ams_slave_id_v0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log0_ams_slave_id_v0_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log0_ams_slave_id_v0_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log0_ams_slave_id_v1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log0_ams_slave_id_v1_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log0_ams_slave_id_v1_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log0_ams_slave_id_v2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log0_ams_slave_id_v2_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log0_ams_slave_id_v2_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_log0_ams_slave_id_v3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_log0_ams_slave_id_v3_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_log0_ams_slave_id_v3_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave3_Log0. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave3_log0_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log0_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave3_Log0. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave3_log0_unpack( + struct can1_ams_slave3_log0_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave3_Log0. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave3_log0_init(struct can1_ams_slave3_log0_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log0_ams_slave_id_v0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log0_ams_slave_id_v0_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log0_ams_slave_id_v0_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log0_ams_slave_id_v1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log0_ams_slave_id_v1_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log0_ams_slave_id_v1_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log0_ams_slave_id_v2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log0_ams_slave_id_v2_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log0_ams_slave_id_v2_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_log0_ams_slave_id_v3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_log0_ams_slave_id_v3_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_log0_ams_slave_id_v3_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave1_Log0. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave1_log0_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log0_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave1_Log0. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave1_log0_unpack( + struct can1_ams_slave1_log0_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave1_Log0. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave1_log0_init(struct can1_ams_slave1_log0_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log0_ams_slave_id_v0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log0_ams_slave_id_v0_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log0_ams_slave_id_v0_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log0_ams_slave_id_v1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log0_ams_slave_id_v1_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log0_ams_slave_id_v1_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log0_ams_slave_id_v2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log0_ams_slave_id_v2_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log0_ams_slave_id_v2_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave1_log0_ams_slave_id_v3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave1_log0_ams_slave_id_v3_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave1_log0_ams_slave_id_v3_is_in_range(uint16_t value); + +/** + * Pack message PDU_Heartbeat. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_pdu_heartbeat_pack( + uint8_t *dst_p, + const struct can1_pdu_heartbeat_t *src_p, + size_t size); + +/** + * Unpack message PDU_Heartbeat. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_pdu_heartbeat_unpack( + struct can1_pdu_heartbeat_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from PDU_Heartbeat. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_pdu_heartbeat_init(struct can1_pdu_heartbeat_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_pdu_heartbeat_pdu_heartbeat_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_heartbeat_pdu_heartbeat_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_heartbeat_pdu_heartbeat_is_in_range(int8_t value); + +/** + * Pack message FTCU_Pneumatik. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ftcu_pneumatik_pack( + uint8_t *dst_p, + const struct can1_ftcu_pneumatik_t *src_p, + size_t size); + +/** + * Unpack message FTCU_Pneumatik. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ftcu_pneumatik_unpack( + struct can1_ftcu_pneumatik_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from FTCU_Pneumatik. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ftcu_pneumatik_init(struct can1_ftcu_pneumatik_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_pneumatik_ftcu_tank_pressure_1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_pneumatik_ftcu_tank_pressure_1_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_pneumatik_ftcu_tank_pressure_1_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_pneumatik_ftcu_tank_pressure_2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_pneumatik_ftcu_tank_pressure_2_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_pneumatik_ftcu_tank_pressure_2_is_in_range(uint16_t value); + +/** + * Pack message ACU_TX_Commands. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_acu_tx_commands_pack( + uint8_t *dst_p, + const struct can1_acu_tx_commands_t *src_p, + size_t size); + +/** + * Unpack message ACU_TX_Commands. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_acu_tx_commands_unpack( + struct can1_acu_tx_commands_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from ACU_TX_Commands. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_acu_tx_commands_init(struct can1_acu_tx_commands_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_tx_commands_abx_speed_fl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_commands_abx_speed_fl_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_commands_abx_speed_fl_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_tx_commands_abx_speed_fr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_commands_abx_speed_fr_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_commands_abx_speed_fr_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_tx_commands_abx_speed_rl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_commands_abx_speed_rl_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_commands_abx_speed_rl_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_tx_commands_abx_speed_rr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_commands_abx_speed_rr_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_commands_abx_speed_rr_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_acu_tx_commands_abx_steering_angle_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_commands_abx_steering_angle_left_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_commands_abx_steering_angle_left_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_acu_tx_commands_abx_steering_angle_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_commands_abx_steering_angle_right_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_commands_abx_steering_angle_right_is_in_range(int8_t value); + +/** + * Pack message ACU_RX_Commands. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_acu_rx_commands_pack( + uint8_t *dst_p, + const struct can1_acu_rx_commands_t *src_p, + size_t size); + +/** + * Unpack message ACU_RX_Commands. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_acu_rx_commands_unpack( + struct can1_acu_rx_commands_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from ACU_RX_Commands. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_acu_rx_commands_init(struct can1_acu_rx_commands_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_rx_commands_acu_speed_target_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_rx_commands_acu_speed_target_left_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_rx_commands_acu_speed_target_left_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_rx_commands_acu_speed_target_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_rx_commands_acu_speed_target_right_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_rx_commands_acu_speed_target_right_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_acu_rx_commands_acu_steering_angle_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_rx_commands_acu_steering_angle_right_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_rx_commands_acu_steering_angle_right_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_acu_rx_commands_acu_steering_angle_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_rx_commands_acu_steering_angle_left_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_rx_commands_acu_steering_angle_left_is_in_range(int8_t value); + +/** + * Pack message ACU_RX. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_acu_rx_pack( + uint8_t *dst_p, + const struct can1_acu_rx_t *src_p, + size_t size); + +/** + * Unpack message ACU_RX. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_acu_rx_unpack( + struct can1_acu_rx_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from ACU_RX. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_acu_rx_init(struct can1_acu_rx_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_rx_acu_as_mission_complete_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_rx_acu_as_mission_complete_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_rx_acu_as_mission_complete_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_rx_acu_as_ok_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_rx_acu_as_ok_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_rx_acu_as_ok_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_rx_acu_drs_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_rx_acu_drs_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_rx_acu_drs_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_rx_acu_lap_count_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_rx_acu_lap_count_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_rx_acu_lap_count_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_rx_acu_cones_all_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_rx_acu_cones_all_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_rx_acu_cones_all_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_rx_acu_cones_actual_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_rx_acu_cones_actual_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_rx_acu_cones_actual_is_in_range(uint8_t value); + +/** + * Pack message AMS_Slave0_Log0. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave0_log0_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_log0_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave0_Log0. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave0_log0_unpack( + struct can1_ams_slave0_log0_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave0_Log0. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave0_log0_init(struct can1_ams_slave0_log0_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log0_ams_slave_id_v0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log0_ams_slave_id_v0_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log0_ams_slave_id_v0_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log0_ams_slave_id_v1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log0_ams_slave_id_v1_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log0_ams_slave_id_v1_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log0_ams_slave_id_v2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log0_ams_slave_id_v2_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log0_ams_slave_id_v2_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log0_ams_slave_id_v3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log0_ams_slave_id_v3_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log0_ams_slave_id_v3_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave0_Log1. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave0_log1_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_log1_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave0_Log1. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave0_log1_unpack( + struct can1_ams_slave0_log1_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave0_Log1. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave0_log1_init(struct can1_ams_slave0_log1_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log1_ams_slave_id_v4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log1_ams_slave_id_v4_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log1_ams_slave_id_v4_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log1_ams_slave_id_v5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log1_ams_slave_id_v5_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log1_ams_slave_id_v5_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log1_ams_slave_id_v6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log1_ams_slave_id_v6_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log1_ams_slave_id_v6_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log1_ams_slave_id_v7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log1_ams_slave_id_v7_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log1_ams_slave_id_v7_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave0_Log3. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave0_log3_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_log3_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave0_Log3. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave0_log3_unpack( + struct can1_ams_slave0_log3_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave0_Log3. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave0_log3_init(struct can1_ams_slave0_log3_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log3_ams_slave_id_v12_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log3_ams_slave_id_v12_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log3_ams_slave_id_v12_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log3_ams_slave_id_v13_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log3_ams_slave_id_v13_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log3_ams_slave_id_v13_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log3_ams_slave_id_v14_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log3_ams_slave_id_v14_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log3_ams_slave_id_v14_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_log3_ams_slave_id_v15_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log3_ams_slave_id_v15_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log3_ams_slave_id_v15_is_in_range(uint16_t value); + +/** + * Pack message AMS_Slave0_Log4. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave0_log4_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_log4_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave0_Log4. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave0_log4_unpack( + struct can1_ams_slave0_log4_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave0_Log4. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave0_log4_init(struct can1_ams_slave0_log4_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_ams_slave0_log4_ams_slave_id_failed_sensors_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log4_ams_slave_id_failed_sensors_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log4_ams_slave_id_failed_sensors_is_in_range(uint32_t value); + +/** + * Pack message AMS_Slave0_Log5. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave0_log5_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_log5_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave0_Log5. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave0_log5_unpack( + struct can1_ams_slave0_log5_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave0_Log5. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave0_log5_init(struct can1_ams_slave0_log5_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave0_log5_ams_slave_id_t0_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log5_ams_slave_id_t0_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log5_ams_slave_id_t0_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave0_log5_ams_slave_id_t1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log5_ams_slave_id_t1_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log5_ams_slave_id_t1_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave0_log5_ams_slave_id_t2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log5_ams_slave_id_t2_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log5_ams_slave_id_t2_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave0_log5_ams_slave_id_t3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log5_ams_slave_id_t3_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log5_ams_slave_id_t3_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave0_log5_ams_slave_id_t4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log5_ams_slave_id_t4_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log5_ams_slave_id_t4_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave0_log5_ams_slave_id_t5_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log5_ams_slave_id_t5_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log5_ams_slave_id_t5_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave0_log5_ams_slave_id_t6_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log5_ams_slave_id_t6_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log5_ams_slave_id_t6_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave0_log5_ams_slave_id_t7_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log5_ams_slave_id_t7_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log5_ams_slave_id_t7_is_in_range(int8_t value); + +/** + * Pack message AMS_Slave0_Log6. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave0_log6_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_log6_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave0_Log6. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave0_log6_unpack( + struct can1_ams_slave0_log6_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave0_Log6. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave0_log6_init(struct can1_ams_slave0_log6_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave0_log6_ams_slave_id_t8_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log6_ams_slave_id_t8_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log6_ams_slave_id_t8_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_slave0_log6_ams_slave_id_t9_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_log6_ams_slave_id_t9_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_log6_ams_slave_id_t9_is_in_range(int8_t value); + +/** + * Pack message ACU_TX. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_acu_tx_pack( + uint8_t *dst_p, + const struct can1_acu_tx_t *src_p, + size_t size); + +/** + * Unpack message ACU_TX. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_acu_tx_unpack( + struct can1_acu_tx_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from ACU_TX. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_acu_tx_init(struct can1_acu_tx_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_tx_acu_as_mission_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_acu_as_mission_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_acu_as_mission_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_tx_acu_as_state_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_acu_as_state_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_acu_as_state_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_tx_acu_power_off_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_acu_power_off_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_acu_power_off_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_tx_acu_reset_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_acu_reset_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_acu_reset_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_tx_acu_allow_torque_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_acu_allow_torque_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_acu_allow_torque_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_acu_tx_abx_con_mon_error_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_acu_tx_abx_con_mon_error_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_acu_tx_abx_con_mon_error_is_in_range(uint8_t value); + +/** + * Pack message AMS_Slave5Status. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave5_status_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_status_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave5Status. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave5_status_unpack( + struct can1_ams_slave5_status_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave5Status. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave5_status_init(struct can1_ams_slave5_status_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave5_status_ams_slave_status_error_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_status_ams_slave_status_error_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_status_ams_slave_status_error_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave5_status_ams_slave_status_id_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_status_ams_slave_status_id_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_status_ams_slave_status_id_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave5_status_ams_slave_status_temp_sensor_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_status_ams_slave_status_temp_sensor_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_status_ams_slave_status_temp_sensor_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_status_ams_slave_status_min_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_status_ams_slave_status_min_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_status_ams_slave_status_min_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave5_status_ams_slave_status_max_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_status_ams_slave_status_max_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_status_ams_slave_status_max_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ams_slave5_status_ams_slave_status_max_temp_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave5_status_ams_slave_status_max_temp_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave5_status_ams_slave_status_max_temp_is_in_range(int16_t value); + +/** + * Pack message AMS_Slave4Status. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave4_status_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_status_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave4Status. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave4_status_unpack( + struct can1_ams_slave4_status_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave4Status. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave4_status_init(struct can1_ams_slave4_status_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave4_status_ams_slave_status_error_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_status_ams_slave_status_error_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_status_ams_slave_status_error_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave4_status_ams_slave_status_id_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_status_ams_slave_status_id_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_status_ams_slave_status_id_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave4_status_ams_slave_status_temp_sensor_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_status_ams_slave_status_temp_sensor_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_status_ams_slave_status_temp_sensor_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_status_ams_slave_status_min_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_status_ams_slave_status_min_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_status_ams_slave_status_min_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave4_status_ams_slave_status_max_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_status_ams_slave_status_max_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_status_ams_slave_status_max_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ams_slave4_status_ams_slave_status_max_temp_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave4_status_ams_slave_status_max_temp_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave4_status_ams_slave_status_max_temp_is_in_range(int16_t value); + +/** + * Pack message AMS_Slave3Status. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave3_status_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_status_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave3Status. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave3_status_unpack( + struct can1_ams_slave3_status_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave3Status. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave3_status_init(struct can1_ams_slave3_status_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave3_status_ams_slave_status_error_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_status_ams_slave_status_error_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_status_ams_slave_status_error_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave3_status_ams_slave_status_id_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_status_ams_slave_status_id_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_status_ams_slave_status_id_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave3_status_ams_slave_status_temp_sensor_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_status_ams_slave_status_temp_sensor_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_status_ams_slave_status_temp_sensor_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_status_ams_slave_status_min_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_status_ams_slave_status_min_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_status_ams_slave_status_min_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave3_status_ams_slave_status_max_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_status_ams_slave_status_max_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_status_ams_slave_status_max_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ams_slave3_status_ams_slave_status_max_temp_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave3_status_ams_slave_status_max_temp_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave3_status_ams_slave_status_max_temp_is_in_range(int16_t value); + +/** + * Pack message AMS_Slave2Status. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave2_status_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_status_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave2Status. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave2_status_unpack( + struct can1_ams_slave2_status_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave2Status. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave2_status_init(struct can1_ams_slave2_status_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave2_status_ams_slave_status_error_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_status_ams_slave_status_error_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_status_ams_slave_status_error_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave2_status_ams_slave_status_id_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_status_ams_slave_status_id_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_status_ams_slave_status_id_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave2_status_ams_slave_status_temp_sensor_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_status_ams_slave_status_temp_sensor_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_status_ams_slave_status_temp_sensor_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_status_ams_slave_status_min_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_status_ams_slave_status_min_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_status_ams_slave_status_min_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave2_status_ams_slave_status_max_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_status_ams_slave_status_max_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_status_ams_slave_status_max_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ams_slave2_status_ams_slave_status_max_temp_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave2_status_ams_slave_status_max_temp_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave2_status_ams_slave_status_max_temp_is_in_range(int16_t value); + +/** + * Pack message AMS_Error. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_error_pack( + uint8_t *dst_p, + const struct can1_ams_error_t *src_p, + size_t size); + +/** + * Unpack message AMS_Error. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_error_unpack( + struct can1_ams_error_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Error. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_error_init(struct can1_ams_error_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_error_ams_error_kind_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_error_ams_error_kind_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_error_ams_error_kind_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ams_error_ams_error_arg_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_error_ams_error_arg_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_error_ams_error_arg_is_in_range(int8_t value); + +/** + * Pack message FTCU_Cooling. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ftcu_cooling_pack( + uint8_t *dst_p, + const struct can1_ftcu_cooling_t *src_p, + size_t size); + +/** + * Unpack message FTCU_Cooling. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ftcu_cooling_unpack( + struct can1_ftcu_cooling_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from FTCU_Cooling. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ftcu_cooling_init(struct can1_ftcu_cooling_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ftcu_cooling_ftcu_water_pressure_2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_cooling_ftcu_water_pressure_2_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_cooling_ftcu_water_pressure_2_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ftcu_cooling_ftcu_water_pressure_1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_cooling_ftcu_water_pressure_1_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_cooling_ftcu_water_pressure_1_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_cooling_ftcu_water_temperature_1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_cooling_ftcu_water_temperature_1_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_cooling_ftcu_water_temperature_1_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_cooling_ftcu_water_temperature_2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_cooling_ftcu_water_temperature_2_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_cooling_ftcu_water_temperature_2_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_cooling_ftcu_flow_rate_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_cooling_ftcu_flow_rate_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_cooling_ftcu_flow_rate_is_in_range(uint16_t value); + +/** + * Pack message FTCU_BrakeT. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ftcu_brake_t_pack( + uint8_t *dst_p, + const struct can1_ftcu_brake_t_t *src_p, + size_t size); + +/** + * Unpack message FTCU_BrakeT. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ftcu_brake_t_unpack( + struct can1_ftcu_brake_t_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from FTCU_BrakeT. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ftcu_brake_t_init(struct can1_ftcu_brake_t_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_brake_t_ftcu_brake_t_fl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_brake_t_ftcu_brake_t_fl_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_brake_t_ftcu_brake_t_fl_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_brake_t_ftcu_brake_t_fr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_brake_t_ftcu_brake_t_fr_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_brake_t_ftcu_brake_t_fr_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_brake_t_ftcu_brake_t_rl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_brake_t_ftcu_brake_t_rl_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_brake_t_ftcu_brake_t_rl_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_brake_t_ftcu_brake_t_rr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_brake_t_ftcu_brake_t_rr_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_brake_t_ftcu_brake_t_rr_is_in_range(uint16_t value); + +/** + * Pack message FTCU_Wheelspeed. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ftcu_wheelspeed_pack( + uint8_t *dst_p, + const struct can1_ftcu_wheelspeed_t *src_p, + size_t size); + +/** + * Unpack message FTCU_Wheelspeed. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ftcu_wheelspeed_unpack( + struct can1_ftcu_wheelspeed_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from FTCU_Wheelspeed. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ftcu_wheelspeed_init(struct can1_ftcu_wheelspeed_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ftcu_wheelspeed_ftcu_wheelspeed_fl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_wheelspeed_ftcu_wheelspeed_fl_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_wheelspeed_ftcu_wheelspeed_fl_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ftcu_wheelspeed_ftcu_wheelspeed_fr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_wheelspeed_ftcu_wheelspeed_fr_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_wheelspeed_ftcu_wheelspeed_fr_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ftcu_wheelspeed_ftcu_wheelspeed_rl_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_wheelspeed_ftcu_wheelspeed_rl_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_wheelspeed_ftcu_wheelspeed_rl_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ftcu_wheelspeed_ftcu_wheelspeed_rr_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_wheelspeed_ftcu_wheelspeed_rr_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_wheelspeed_ftcu_wheelspeed_rr_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_wheelspeed_ftcu_distance_session_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_wheelspeed_ftcu_distance_session_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_wheelspeed_ftcu_distance_session_is_in_range(uint16_t value); + +/** + * Pack message FTCU_Timings. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ftcu_timings_pack( + uint8_t *dst_p, + const struct can1_ftcu_timings_t *src_p, + size_t size); + +/** + * Unpack message FTCU_Timings. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ftcu_timings_unpack( + struct can1_ftcu_timings_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from FTCU_Timings. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ftcu_timings_init(struct can1_ftcu_timings_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_timings_ftcu_laptime_best_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_timings_ftcu_laptime_best_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_timings_ftcu_laptime_best_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_timings_ftcu_laptime_last_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_timings_ftcu_laptime_last_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_timings_ftcu_laptime_last_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_timings_ftcu_sectortime_best_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_timings_ftcu_sectortime_best_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_timings_ftcu_sectortime_best_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_timings_ftcu_sectortime_last_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_timings_ftcu_sectortime_last_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_timings_ftcu_sectortime_last_is_in_range(uint16_t value); + +/** + * Pack message FTCU_Driver. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ftcu_driver_pack( + uint8_t *dst_p, + const struct can1_ftcu_driver_t *src_p, + size_t size); + +/** + * Unpack message FTCU_Driver. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ftcu_driver_unpack( + struct can1_ftcu_driver_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from FTCU_Driver. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ftcu_driver_init(struct can1_ftcu_driver_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ftcu_driver_ftcu_apps_percent_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_driver_ftcu_apps_percent_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_driver_ftcu_apps_percent_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_driver_ftcu_brake_pressure_f_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_driver_ftcu_brake_pressure_f_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_driver_ftcu_brake_pressure_f_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ftcu_driver_ftcu_brake_pressure_r_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_driver_ftcu_brake_pressure_r_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_driver_ftcu_brake_pressure_r_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int8_t can1_ftcu_driver_ftcu_steering_angle_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_driver_ftcu_steering_angle_decode(int8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_driver_ftcu_steering_angle_is_in_range(int8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ftcu_driver_ftcu_speed_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_driver_ftcu_speed_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_driver_ftcu_speed_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ftcu_driver_ftcu_lapcounter_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_driver_ftcu_lapcounter_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_driver_ftcu_lapcounter_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ftcu_driver_ftcu_sectorcounter_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ftcu_driver_ftcu_sectorcounter_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ftcu_driver_ftcu_sectorcounter_is_in_range(uint8_t value); + +/** + * Pack message TTS_RR. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_tts_rr_pack( + uint8_t *dst_p, + const struct can1_tts_rr_t *src_p, + size_t size); + +/** + * Unpack message TTS_RR. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_tts_rr_unpack( + struct can1_tts_rr_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from TTS_RR. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_tts_rr_init(struct can1_tts_rr_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_rr_tts_outer_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rr_tts_outer_left_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rr_tts_outer_left_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_rr_tts_center_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rr_tts_center_left_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rr_tts_center_left_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_rr_tts_center_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rr_tts_center_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rr_tts_center_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_rr_tts_center_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rr_tts_center_right_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rr_tts_center_right_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_rr_tts_outet_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rr_tts_outet_right_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rr_tts_outet_right_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_tts_rr_tts_status_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rr_tts_status_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rr_tts_status_is_in_range(uint8_t value); + +/** + * Pack message TTS_RL. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_tts_rl_pack( + uint8_t *dst_p, + const struct can1_tts_rl_t *src_p, + size_t size); + +/** + * Unpack message TTS_RL. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_tts_rl_unpack( + struct can1_tts_rl_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from TTS_RL. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_tts_rl_init(struct can1_tts_rl_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_rl_tts_outer_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rl_tts_outer_left_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rl_tts_outer_left_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_rl_tts_center_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rl_tts_center_left_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rl_tts_center_left_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_rl_tts_center_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rl_tts_center_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rl_tts_center_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_rl_tts_center_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rl_tts_center_right_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rl_tts_center_right_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_rl_tts_outer_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rl_tts_outer_right_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rl_tts_outer_right_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_tts_rl_tts_status_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_rl_tts_status_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_rl_tts_status_is_in_range(uint8_t value); + +/** + * Pack message TTS_FR. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_tts_fr_pack( + uint8_t *dst_p, + const struct can1_tts_fr_t *src_p, + size_t size); + +/** + * Unpack message TTS_FR. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_tts_fr_unpack( + struct can1_tts_fr_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from TTS_FR. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_tts_fr_init(struct can1_tts_fr_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_fr_tts_outer_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fr_tts_outer_left_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fr_tts_outer_left_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_fr_tts_center_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fr_tts_center_left_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fr_tts_center_left_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_fr_tts_center_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fr_tts_center_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fr_tts_center_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_fr_tts_center_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fr_tts_center_right_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fr_tts_center_right_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_fr_tts_outer_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fr_tts_outer_right_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fr_tts_outer_right_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_tts_fr_tts_status_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fr_tts_status_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fr_tts_status_is_in_range(uint8_t value); + +/** + * Pack message TTS_FL. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_tts_fl_pack( + uint8_t *dst_p, + const struct can1_tts_fl_t *src_p, + size_t size); + +/** + * Unpack message TTS_FL. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_tts_fl_unpack( + struct can1_tts_fl_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from TTS_FL. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_tts_fl_init(struct can1_tts_fl_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_fl_tts_outer_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fl_tts_outer_left_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fl_tts_outer_left_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_fl_tts_center_left_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fl_tts_center_left_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fl_tts_center_left_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_fl_tts_center_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fl_tts_center_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fl_tts_center_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_fl_tts_center_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fl_tts_center_right_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fl_tts_center_right_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_tts_fl_tts_outer_right_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fl_tts_outer_right_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fl_tts_outer_right_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_tts_fl_tts_status_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_tts_fl_tts_status_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_tts_fl_tts_status_is_in_range(uint8_t value); + +/** + * Pack message STW_Param_Set. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_stw_param_set_pack( + uint8_t *dst_p, + const struct can1_stw_param_set_t *src_p, + size_t size); + +/** + * Unpack message STW_Param_Set. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_stw_param_set_unpack( + struct can1_stw_param_set_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from STW_Param_Set. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_stw_param_set_init(struct can1_stw_param_set_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_stw_param_set_stw_param_set_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_set_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_set_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_tc_slipref_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_tc_slipref_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_tc_slipref_is_in_range(uint32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_tc_mumax_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_tc_mumax_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_tc_mumax_is_in_range(uint32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_tc_i_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_tc_i_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_tc_i_is_in_range(uint32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_plim_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_plim_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_plim_is_in_range(uint32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_tlim_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_tlim_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_tlim_is_in_range(uint32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_tc_p_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_tc_p_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_tc_p_is_in_range(uint32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_reku_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_reku_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_reku_is_in_range(uint32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_tc_on_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_tc_on_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_tc_on_is_in_range(uint32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_tv_on_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_tv_on_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_tv_on_is_in_range(uint32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_discipline_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_discipline_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_discipline_is_in_range(uint32_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_stw_param_set_stw_param_slim_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_param_set_stw_param_slim_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_param_set_stw_param_slim_is_in_range(uint32_t value); + +/** + * Pack message AMS_Slave0Status. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave0_status_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_status_t *src_p, + size_t size); + +/** + * Unpack message AMS_Slave0Status. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave0_status_unpack( + struct can1_ams_slave0_status_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Slave0Status. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave0_status_init(struct can1_ams_slave0_status_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave0_status_ams_slave_status_error_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_status_ams_slave_status_error_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_status_ams_slave_status_error_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave0_status_ams_slave_status_id_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_status_ams_slave_status_id_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_status_ams_slave_status_id_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave0_status_ams_slave_status_temp_sensor_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_status_ams_slave_status_temp_sensor_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_status_ams_slave_status_temp_sensor_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_status_ams_slave_status_min_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_status_ams_slave_status_min_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_status_ams_slave_status_min_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_slave0_status_ams_slave_status_max_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_status_ams_slave_status_max_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_status_ams_slave_status_max_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ams_slave0_status_ams_slave_status_max_temp_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave0_status_ams_slave_status_max_temp_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave0_status_ams_slave_status_max_temp_is_in_range(int16_t value); + +/** + * Pack message SSU_Message. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ssu_message_pack( + uint8_t *dst_p, + const struct can1_ssu_message_t *src_p, + size_t size); + +/** + * Unpack message SSU_Message. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ssu_message_unpack( + struct can1_ssu_message_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from SSU_Message. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ssu_message_init(struct can1_ssu_message_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ssu_message_ssu_pressure_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ssu_message_ssu_pressure_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ssu_message_ssu_pressure_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_ssu_message_ssu_air_temp_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ssu_message_ssu_air_temp_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ssu_message_ssu_air_temp_is_in_range(int16_t value); + +/** + * Pack message AMS_Status. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_status_pack( + uint8_t *dst_p, + const struct can1_ams_status_t *src_p, + size_t size); + +/** + * Unpack message AMS_Status. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_status_unpack( + struct can1_ams_status_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_Status. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_status_init(struct can1_ams_status_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_status_ams_state_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_status_ams_state_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_status_ams_state_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_status_sdc_closed_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_status_sdc_closed_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_status_sdc_closed_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_status_soc_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_status_soc_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_status_soc_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_status_min_cell_volt_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_status_min_cell_volt_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_status_min_cell_volt_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_ams_status_max_cell_temp_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_status_max_cell_temp_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_status_max_cell_temp_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_status_ams_imd_state_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_status_ams_imd_state_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_status_ams_imd_state_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_status_ams_imd_ok_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_status_ams_imd_ok_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_status_ams_imd_ok_is_in_range(uint8_t value); + +/** + * Pack message AMS_SlavePanic. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_slave_panic_pack( + uint8_t *dst_p, + const struct can1_ams_slave_panic_t *src_p, + size_t size); + +/** + * Unpack message AMS_SlavePanic. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_slave_panic_unpack( + struct can1_ams_slave_panic_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_SlavePanic. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_slave_panic_init(struct can1_ams_slave_panic_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave_panic_ams_slave_panic_slave_id_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave_panic_ams_slave_panic_slave_id_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave_panic_ams_slave_panic_slave_id_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_slave_panic_ams_slave_panic_kind_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave_panic_ams_slave_panic_kind_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave_panic_ams_slave_panic_kind_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_ams_slave_panic_ams_slave_panic_arg_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_slave_panic_ams_slave_panic_arg_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_slave_panic_ams_slave_panic_arg_is_in_range(uint32_t value); + +/** + * Pack message AMS_In. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_ams_in_pack( + uint8_t *dst_p, + const struct can1_ams_in_t *src_p, + size_t size); + +/** + * Unpack message AMS_In. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_ams_in_unpack( + struct can1_ams_in_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AMS_In. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_ams_in_init(struct can1_ams_in_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_in_ts_activate_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_in_ts_activate_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_in_ts_activate_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_in_inverters_discharged_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_in_inverters_discharged_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_in_inverters_discharged_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_ams_in_lap_number_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_ams_in_lap_number_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_ams_in_lap_number_is_in_range(uint8_t value); + +/** + * Pack message Shunt_Current. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_shunt_current_pack( + uint8_t *dst_p, + const struct can1_shunt_current_t *src_p, + size_t size); + +/** + * Unpack message Shunt_Current. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_shunt_current_unpack( + struct can1_shunt_current_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Shunt_Current. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_shunt_current_init(struct can1_shunt_current_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int32_t can1_shunt_current_shunt_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_shunt_current_shunt_current_decode(int32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_shunt_current_shunt_current_is_in_range(int32_t value); + +/** + * Pack message Shunt_Voltage1. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_shunt_voltage1_pack( + uint8_t *dst_p, + const struct can1_shunt_voltage1_t *src_p, + size_t size); + +/** + * Unpack message Shunt_Voltage1. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_shunt_voltage1_unpack( + struct can1_shunt_voltage1_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Shunt_Voltage1. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_shunt_voltage1_init(struct can1_shunt_voltage1_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int32_t can1_shunt_voltage1_shunt_voltage1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_shunt_voltage1_shunt_voltage1_decode(int32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_shunt_voltage1_shunt_voltage1_is_in_range(int32_t value); + +/** + * Pack message Shunt_Voltage2. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_shunt_voltage2_pack( + uint8_t *dst_p, + const struct can1_shunt_voltage2_t *src_p, + size_t size); + +/** + * Unpack message Shunt_Voltage2. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_shunt_voltage2_unpack( + struct can1_shunt_voltage2_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Shunt_Voltage2. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_shunt_voltage2_init(struct can1_shunt_voltage2_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int32_t can1_shunt_voltage2_shunt_voltage2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_shunt_voltage2_shunt_voltage2_decode(int32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_shunt_voltage2_shunt_voltage2_is_in_range(int32_t value); + +/** + * Pack message Shunt_Voltage3. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_shunt_voltage3_pack( + uint8_t *dst_p, + const struct can1_shunt_voltage3_t *src_p, + size_t size); + +/** + * Unpack message Shunt_Voltage3. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_shunt_voltage3_unpack( + struct can1_shunt_voltage3_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Shunt_Voltage3. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_shunt_voltage3_init(struct can1_shunt_voltage3_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int32_t can1_shunt_voltage3_shunt_voltage3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_shunt_voltage3_shunt_voltage3_decode(int32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_shunt_voltage3_shunt_voltage3_is_in_range(int32_t value); + +/** + * Pack message Shunt_Temperature. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_shunt_temperature_pack( + uint8_t *dst_p, + const struct can1_shunt_temperature_t *src_p, + size_t size); + +/** + * Unpack message Shunt_Temperature. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_shunt_temperature_unpack( + struct can1_shunt_temperature_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from Shunt_Temperature. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_shunt_temperature_init(struct can1_shunt_temperature_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint32_t can1_shunt_temperature_shunt_temperature_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_shunt_temperature_shunt_temperature_decode(uint32_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_shunt_temperature_shunt_temperature_is_in_range(uint32_t value); + +/** + * Pack message PDU_Command. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_pdu_command_pack( + uint8_t *dst_p, + const struct can1_pdu_command_t *src_p, + size_t size); + +/** + * Unpack message PDU_Command. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_pdu_command_unpack( + struct can1_pdu_command_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from PDU_Command. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_pdu_command_init(struct can1_pdu_command_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_misc_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_misc_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_misc_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_sdc_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_sdc_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_sdc_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_inverter_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_inverter_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_inverter_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_ts_cooling_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_ts_cooling_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_ts_cooling_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_acc_cooling_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_acc_cooling_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_acc_cooling_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_lldar_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_lldar_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_lldar_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_drs_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_drs_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_drs_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_epsc_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_epsc_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_epsc_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_acu_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_acu_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_acu_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_ebs_a_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_ebs_a_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_ebs_a_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_ebs_b_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_ebs_b_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_ebs_b_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_command_pdu_enable_ebs_c_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_command_pdu_enable_ebs_c_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_command_pdu_enable_ebs_c_is_in_range(uint8_t value); + +/** + * Pack message PDU_Response. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_pdu_response_pack( + uint8_t *dst_p, + const struct can1_pdu_response_t *src_p, + size_t size); + +/** + * Unpack message PDU_Response. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_pdu_response_unpack( + struct can1_pdu_response_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from PDU_Response. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_pdu_response_init(struct can1_pdu_response_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_alwayson_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_alwayson_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_alwayson_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_shutdown_circuit_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_shutdown_circuit_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_shutdown_circuit_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_lidar_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_lidar_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_lidar_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_acu_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_acu_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_acu_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_servos_regler_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_servos_regler_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_servos_regler_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_inverter_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_inverter_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_inverter_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_misc_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_misc_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_misc_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_servo_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_servo_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_servo_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_ebs_valve_1_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_ebs_valve_1_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_ebs_valve_1_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_ebs_valve_2_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_ebs_valve_2_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_ebs_valve_2_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_cs_valve_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_cs_valve_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_cs_valve_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_aggregat_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_aggregat_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_aggregat_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_steering_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_steering_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_steering_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_pwm_tsac_fans_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_pwm_tsac_fans_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_pwm_tsac_fans_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_pwm_radiatot_fans_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_pwm_radiatot_fans_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_pwm_radiatot_fans_tx_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_pwm_aggregat_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_pwm_aggregat_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_pwm_aggregat_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_pwm_pump_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_pwm_pump_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_pwm_pump_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_pdu_response_pdu_heartbeat_ok_tx_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_response_pdu_heartbeat_ok_tx_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_response_pdu_heartbeat_ok_tx_is_in_range(uint8_t value); + +/** + * Pack message AS_Mission_fb. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_as_mission_fb_pack( + uint8_t *dst_p, + const struct can1_as_mission_fb_t *src_p, + size_t size); + +/** + * Unpack message AS_Mission_fb. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_as_mission_fb_unpack( + struct can1_as_mission_fb_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from AS_Mission_fb. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_as_mission_fb_init(struct can1_as_mission_fb_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_as_mission_fb_mission_selection_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_as_mission_fb_mission_selection_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_as_mission_fb_mission_selection_is_in_range(uint8_t value); + +/** + * Pack message STW_mission_selected. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_stw_mission_selected_pack( + uint8_t *dst_p, + const struct can1_stw_mission_selected_t *src_p, + size_t size); + +/** + * Unpack message STW_mission_selected. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_stw_mission_selected_unpack( + struct can1_stw_mission_selected_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from STW_mission_selected. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_stw_mission_selected_init(struct can1_stw_mission_selected_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_mission_selected_mission_selection_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_mission_selected_mission_selection_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_mission_selected_mission_selection_is_in_range(uint8_t value); + +/** + * Pack message EPSC_out. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_epsc_out_pack( + uint8_t *dst_p, + const struct can1_epsc_out_t *src_p, + size_t size); + +/** + * Unpack message EPSC_out. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_epsc_out_unpack( + struct can1_epsc_out_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from EPSC_out. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_epsc_out_init(struct can1_epsc_out_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_epsc_out_epsc_measured_rpm_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_epsc_out_epsc_measured_rpm_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_epsc_out_epsc_measured_rpm_is_in_range(int16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_epsc_out_epsc_measured_steering_angle_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_epsc_out_epsc_measured_steering_angle_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_epsc_out_epsc_measured_steering_angle_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_epsc_out_epsc_measured_mosfet_temperature_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_epsc_out_epsc_measured_mosfet_temperature_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_epsc_out_epsc_measured_mosfet_temperature_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_epsc_out_epsc_measured_voltage_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_epsc_out_epsc_measured_voltage_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_epsc_out_epsc_measured_voltage_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_epsc_out_epsc_measured_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_epsc_out_epsc_measured_current_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_epsc_out_epsc_measured_current_is_in_range(uint8_t value); + +/** + * Pack message EPSC_Steering_In. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_epsc_steering_in_pack( + uint8_t *dst_p, + const struct can1_epsc_steering_in_t *src_p, + size_t size); + +/** + * Unpack message EPSC_Steering_In. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_epsc_steering_in_unpack( + struct can1_epsc_steering_in_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from EPSC_Steering_In. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_epsc_steering_in_init(struct can1_epsc_steering_in_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +int16_t can1_epsc_steering_in_epsc_desired_steering_angle_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_epsc_steering_in_epsc_desired_steering_angle_decode(int16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_epsc_steering_in_epsc_desired_steering_angle_is_in_range(int16_t value); + +/** + * Pack message STW_buttons. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_stw_buttons_pack( + uint8_t *dst_p, + const struct can1_stw_buttons_t *src_p, + size_t size); + +/** + * Unpack message STW_buttons. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_stw_buttons_unpack( + struct can1_stw_buttons_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from STW_buttons. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_stw_buttons_init(struct can1_stw_buttons_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_buttons_stw_button_drs_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_buttons_stw_button_drs_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_buttons_stw_button_drs_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_buttons_stw_button_1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_buttons_stw_button_1_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_buttons_stw_button_1_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_buttons_stw_button_2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_buttons_stw_button_2_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_buttons_stw_button_2_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_buttons_stw_button_3_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_buttons_stw_button_3_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_buttons_stw_button_3_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_buttons_stw_button_4_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_buttons_stw_button_4_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_buttons_stw_button_4_is_in_range(uint8_t value); + +/** + * Pack message STW_status. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_stw_status_pack( + uint8_t *dst_p, + const struct can1_stw_status_t *src_p, + size_t size); + +/** + * Unpack message STW_status. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_stw_status_unpack( + struct can1_stw_status_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from STW_status. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_stw_status_init(struct can1_stw_status_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_lap_count_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_lap_count_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_lap_count_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_pdu_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_pdu_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_pdu_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_res_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_res_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_res_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_r2_d_progress_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_r2_d_progress_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_r2_d_progress_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_as_state_stw_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_as_state_stw_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_as_state_stw_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_as_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_as_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_as_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_app_sp_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_app_sp_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_app_sp_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_s_bspd_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_s_bspd_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_s_bspd_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_scs_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_scs_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_scs_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_con_mon_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_con_mon_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_con_mon_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_ini_chk_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_ini_chk_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_ini_chk_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_inv2_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_inv2_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_inv2_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_inv1_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_inv1_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_inv1_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_ams_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_ams_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_ams_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_err_sdc_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_err_sdc_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_err_sdc_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_sdc_status_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_sdc_status_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_sdc_status_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_inv2_ready_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_inv2_ready_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_inv2_ready_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_inv1_ready_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_inv1_ready_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_inv1_ready_is_in_range(uint8_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_stw_status_energy_per_lap_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_energy_per_lap_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_energy_per_lap_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint8_t can1_stw_status_ini_chk_state_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_stw_status_ini_chk_state_decode(uint8_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_stw_status_ini_chk_state_is_in_range(uint8_t value); + +/** + * Pack message PDU_Current_1. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_pdu_current_1_pack( + uint8_t *dst_p, + const struct can1_pdu_current_1_t *src_p, + size_t size); + +/** + * Unpack message PDU_Current_1. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_pdu_current_1_unpack( + struct can1_pdu_current_1_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from PDU_Current_1. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_pdu_current_1_init(struct can1_pdu_current_1_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_1_pdu_always_on_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_1_pdu_always_on_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_1_pdu_always_on_current_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_1_pdu_lvms_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_1_pdu_lvms_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_1_pdu_lvms_current_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_1_pdu_asms_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_1_pdu_asms_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_1_pdu_asms_current_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_1_pdu_misc_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_1_pdu_misc_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_1_pdu_misc_current_is_in_range(uint16_t value); + +/** + * Pack message PDU_Current_2. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_pdu_current_2_pack( + uint8_t *dst_p, + const struct can1_pdu_current_2_t *src_p, + size_t size); + +/** + * Unpack message PDU_Current_2. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_pdu_current_2_unpack( + struct can1_pdu_current_2_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from PDU_Current_2. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_pdu_current_2_init(struct can1_pdu_current_2_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_2_pdu_sdc_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_2_pdu_sdc_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_2_pdu_sdc_current_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_2_pdu_inverter_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_2_pdu_inverter_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_2_pdu_inverter_current_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_2_pdu_ts_cooling_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_2_pdu_ts_cooling_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_2_pdu_ts_cooling_current_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_2_pdu_acc_cooling_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_2_pdu_acc_cooling_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_2_pdu_acc_cooling_current_is_in_range(uint16_t value); + +/** + * Pack message PDU_Current_3. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_pdu_current_3_pack( + uint8_t *dst_p, + const struct can1_pdu_current_3_t *src_p, + size_t size); + +/** + * Unpack message PDU_Current_3. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_pdu_current_3_unpack( + struct can1_pdu_current_3_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from PDU_Current_3. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_pdu_current_3_init(struct can1_pdu_current_3_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_3_pdu_lidar_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_3_pdu_lidar_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_3_pdu_lidar_current_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_3_pdu_drs_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_3_pdu_drs_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_3_pdu_drs_current_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_3_pdu_epsc_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_3_pdu_epsc_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_3_pdu_epsc_current_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_3_pdu_acu_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_3_pdu_acu_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_3_pdu_acu_current_is_in_range(uint16_t value); + +/** + * Pack message PDU_Current_4. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_pdu_current_4_pack( + uint8_t *dst_p, + const struct can1_pdu_current_4_t *src_p, + size_t size); + +/** + * Unpack message PDU_Current_4. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_pdu_current_4_unpack( + struct can1_pdu_current_4_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from PDU_Current_4. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_pdu_current_4_init(struct can1_pdu_current_4_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_4_pdu_ebs_a_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_4_pdu_ebs_a_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_4_pdu_ebs_a_current_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_pdu_current_4_pdu_ebs_b_current_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_pdu_current_4_pdu_ebs_b_current_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_pdu_current_4_pdu_ebs_b_current_is_in_range(uint16_t value); + +/** + * Pack message EPSC_Config_In. + * + * @param[out] dst_p Buffer to pack the message into. + * @param[in] src_p Data to pack. + * @param[in] size Size of dst_p. + * + * @return Size of packed data, or negative error code. + */ +int can1_epsc_config_in_pack( + uint8_t *dst_p, + const struct can1_epsc_config_in_t *src_p, + size_t size); + +/** + * Unpack message EPSC_Config_In. + * + * @param[out] dst_p Object to unpack the message into. + * @param[in] src_p Message to unpack. + * @param[in] size Size of src_p. + * + * @return zero(0) or negative error code. + */ +int can1_epsc_config_in_unpack( + struct can1_epsc_config_in_t *dst_p, + const uint8_t *src_p, + size_t size); + +/** + * Init message fields to default values from EPSC_Config_In. + * + * @param[in] msg_p Message to init. + * + * @return zero(0) on success or (-1) in case of nullptr argument. + */ +int can1_epsc_config_in_init(struct can1_epsc_config_in_t *msg_p); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_epsc_config_in_epsc_config_p_gain_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_epsc_config_in_epsc_config_p_gain_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_epsc_config_in_epsc_config_p_gain_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_epsc_config_in_epsc_config_i_gain_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_epsc_config_in_epsc_config_i_gain_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_epsc_config_in_epsc_config_i_gain_is_in_range(uint16_t value); + +/** + * Encode given signal by applying scaling and offset. + * + * @param[in] value Signal to encode. + * + * @return Encoded signal. + */ +uint16_t can1_epsc_config_in_epsc_config_d_gain_encode(double value); + +/** + * Decode given signal by applying scaling and offset. + * + * @param[in] value Signal to decode. + * + * @return Decoded signal. + */ +double can1_epsc_config_in_epsc_config_d_gain_decode(uint16_t value); + +/** + * Check that given signal is in allowed range. + * + * @param[in] value Signal to check. + * + * @return true if in range, false otherwise. + */ +bool can1_epsc_config_in_epsc_config_d_gain_is_in_range(uint16_t value); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/endec.hpp b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/endec.hpp new file mode 100644 index 0000000..ca30c8a --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/endec.hpp @@ -0,0 +1,5489 @@ +#ifndef _ENDEC_HPP_ +#define _ENDEC_HPP_ + +#include "can1.h" +#include + +namespace canlib { +// frame structures +namespace frame { +namespace decoded { +namespace can1 { +struct inverter_velocity_t { + double inverter_1_velocity; + double inverter_2_velocity; +inverter_velocity_t() { + this->inverter_1_velocity = 0.0; + this->inverter_2_velocity = 0.0; +} + +inverter_velocity_t( + double inverter_1_velocity, + double inverter_2_velocity) { + this->inverter_1_velocity = inverter_1_velocity; + this->inverter_2_velocity = inverter_2_velocity; +} + +}; +struct inverter_errors_warnings_t { + double inverter_1_errors; + double inverter_1_warnings; + double inverter_2_errors; + double inverter_2_warnings; +inverter_errors_warnings_t() { + this->inverter_1_errors = 0.0; + this->inverter_1_warnings = 0.0; + this->inverter_2_errors = 0.0; + this->inverter_2_warnings = 0.0; +} + +inverter_errors_warnings_t( + double inverter_1_errors, + double inverter_1_warnings, + double inverter_2_errors, + double inverter_2_warnings) { + this->inverter_1_errors = inverter_1_errors; + this->inverter_1_warnings = inverter_1_warnings; + this->inverter_2_errors = inverter_2_errors; + this->inverter_2_warnings = inverter_2_warnings; +} + +}; +struct inverter_torque_actual_cw_t { + double inverter_1_control_word; + double inverter_1_torque_actual; + double inverter_2_control_word; + double inverter_2_torque_actual; +inverter_torque_actual_cw_t() { + this->inverter_1_control_word = 0.0; + this->inverter_1_torque_actual = 0.0; + this->inverter_2_control_word = 0.0; + this->inverter_2_torque_actual = 0.0; +} + +inverter_torque_actual_cw_t( + double inverter_1_control_word, + double inverter_1_torque_actual, + double inverter_2_control_word, + double inverter_2_torque_actual) { + this->inverter_1_control_word = inverter_1_control_word; + this->inverter_1_torque_actual = inverter_1_torque_actual; + this->inverter_2_control_word = inverter_2_control_word; + this->inverter_2_torque_actual = inverter_2_torque_actual; +} + +}; +struct inverter_temperatur_t { + double inverter_1_temp_inv; + double inverter_1_temp_mot; + double inverter_2_temp_inv; + double inverter_2_temp_mot; +inverter_temperatur_t() { + this->inverter_1_temp_inv = 0.0; + this->inverter_1_temp_mot = 0.0; + this->inverter_2_temp_inv = 0.0; + this->inverter_2_temp_mot = 0.0; +} + +inverter_temperatur_t( + double inverter_1_temp_inv, + double inverter_1_temp_mot, + double inverter_2_temp_inv, + double inverter_2_temp_mot) { + this->inverter_1_temp_inv = inverter_1_temp_inv; + this->inverter_1_temp_mot = inverter_1_temp_mot; + this->inverter_2_temp_inv = inverter_2_temp_inv; + this->inverter_2_temp_mot = inverter_2_temp_mot; +} + +}; +struct inverter_torque_wanted_t { + double inverter_1_torque_demanded; + double inverter_2_torque_demanded; + double inverter_1_torque_desired; + double inverter_2_torque_desired; +inverter_torque_wanted_t() { + this->inverter_1_torque_demanded = 0.0; + this->inverter_2_torque_demanded = 0.0; + this->inverter_1_torque_desired = 0.0; + this->inverter_2_torque_desired = 0.0; +} + +inverter_torque_wanted_t( + double inverter_1_torque_demanded, + double inverter_2_torque_demanded, + double inverter_1_torque_desired, + double inverter_2_torque_desired) { + this->inverter_1_torque_demanded = inverter_1_torque_demanded; + this->inverter_2_torque_demanded = inverter_2_torque_demanded; + this->inverter_1_torque_desired = inverter_1_torque_desired; + this->inverter_2_torque_desired = inverter_2_torque_desired; +} + +}; +struct sdo_telemetrie_rx_node1_t { + double sdo_command_byte; + double sdo_od_index; + double sdo_od_subindex; + double sdo_data; +sdo_telemetrie_rx_node1_t() { + this->sdo_command_byte = 0.0; + this->sdo_od_index = 0.0; + this->sdo_od_subindex = 0.0; + this->sdo_data = 0.0; +} + +sdo_telemetrie_rx_node1_t( + double sdo_command_byte, + double sdo_od_index, + double sdo_od_subindex, + double sdo_data) { + this->sdo_command_byte = sdo_command_byte; + this->sdo_od_index = sdo_od_index; + this->sdo_od_subindex = sdo_od_subindex; + this->sdo_data = sdo_data; +} + +}; +struct sdo_telemetrie_rx_node2_t { + double sdo_command_byte; + double sdo_od_index; + double sdo_od_subindex; + double sdo_data; +sdo_telemetrie_rx_node2_t() { + this->sdo_command_byte = 0.0; + this->sdo_od_index = 0.0; + this->sdo_od_subindex = 0.0; + this->sdo_data = 0.0; +} + +sdo_telemetrie_rx_node2_t( + double sdo_command_byte, + double sdo_od_index, + double sdo_od_subindex, + double sdo_data) { + this->sdo_command_byte = sdo_command_byte; + this->sdo_od_index = sdo_od_index; + this->sdo_od_subindex = sdo_od_subindex; + this->sdo_data = sdo_data; +} + +}; +struct sdo_telemetrie_tx_t { + double sdo_command_byte; + double sdo_od_index; + double sdo_od_subindex; + double sdo_data; +sdo_telemetrie_tx_t() { + this->sdo_command_byte = 0.0; + this->sdo_od_index = 0.0; + this->sdo_od_subindex = 0.0; + this->sdo_data = 0.0; +} + +sdo_telemetrie_tx_t( + double sdo_command_byte, + double sdo_od_index, + double sdo_od_subindex, + double sdo_data) { + this->sdo_command_byte = sdo_command_byte; + this->sdo_od_index = sdo_od_index; + this->sdo_od_subindex = sdo_od_subindex; + this->sdo_data = sdo_data; +} + +}; +struct laptop_sdo_node_t { + double node_id_sdo; +laptop_sdo_node_t() { + this->node_id_sdo = 0.0; +} + +laptop_sdo_node_t( + double node_id_sdo) { + this->node_id_sdo = node_id_sdo; +} + +}; +struct x_sens_long_lat_t { + double x_sens_latitude; + double x_sens_longitude; +x_sens_long_lat_t() { + this->x_sens_latitude = 0.0; + this->x_sens_longitude = 0.0; +} + +x_sens_long_lat_t( + double x_sens_latitude, + double x_sens_longitude) { + this->x_sens_latitude = x_sens_latitude; + this->x_sens_longitude = x_sens_longitude; +} + +}; +struct x_sens_rateofturn_t { + double x_sens_gyr_x; + double x_sens_gy_y; + double x_sens_gy_z; +x_sens_rateofturn_t() { + this->x_sens_gyr_x = 0.0; + this->x_sens_gy_y = 0.0; + this->x_sens_gy_z = 0.0; +} + +x_sens_rateofturn_t( + double x_sens_gyr_x, + double x_sens_gy_y, + double x_sens_gy_z) { + this->x_sens_gyr_x = x_sens_gyr_x; + this->x_sens_gy_y = x_sens_gy_y; + this->x_sens_gy_z = x_sens_gy_z; +} + +}; +struct x_sens_acceleration_t { + double x_sens_acc_x; + double x_sens_acc_y; + double x_sens_acc_z; +x_sens_acceleration_t() { + this->x_sens_acc_x = 0.0; + this->x_sens_acc_y = 0.0; + this->x_sens_acc_z = 0.0; +} + +x_sens_acceleration_t( + double x_sens_acc_x, + double x_sens_acc_y, + double x_sens_acc_z) { + this->x_sens_acc_x = x_sens_acc_x; + this->x_sens_acc_y = x_sens_acc_y; + this->x_sens_acc_z = x_sens_acc_z; +} + +}; +struct x_sens_velocity_t { + double x_sens_vel_x; + double x_sens_vel_y; + double x_sens_vel_z; +x_sens_velocity_t() { + this->x_sens_vel_x = 0.0; + this->x_sens_vel_y = 0.0; + this->x_sens_vel_z = 0.0; +} + +x_sens_velocity_t( + double x_sens_vel_x, + double x_sens_vel_y, + double x_sens_vel_z) { + this->x_sens_vel_x = x_sens_vel_x; + this->x_sens_vel_y = x_sens_vel_y; + this->x_sens_vel_z = x_sens_vel_z; +} + +}; +struct telemetrie_t { + double ini_check_error_state; + double powermap; + double apps_ok; + double brake_ok; + double allow_torque; + double asp_ok; + double pressure_sensor_ok; + double torque_vectoring_on; + double reku_on; + double traction_control_on; + double ts_deactivate; + double torque_limit; + double power_limit; + double torque_limit_dynamisch; + double torque_ohne_limit_l; + double torque_ohne_limit_r; +telemetrie_t() { + this->ini_check_error_state = 0.0; + this->powermap = 0.0; + this->apps_ok = 0.0; + this->brake_ok = 0.0; + this->allow_torque = 0.0; + this->asp_ok = 0.0; + this->pressure_sensor_ok = 0.0; + this->torque_vectoring_on = 0.0; + this->reku_on = 0.0; + this->traction_control_on = 0.0; + this->ts_deactivate = 0.0; + this->torque_limit = 0.0; + this->power_limit = 0.0; + this->torque_limit_dynamisch = 0.0; + this->torque_ohne_limit_l = 0.0; + this->torque_ohne_limit_r = 0.0; +} + +telemetrie_t( + double ini_check_error_state, + double powermap, + double apps_ok, + double brake_ok, + double allow_torque, + double asp_ok, + double pressure_sensor_ok, + double torque_vectoring_on, + double reku_on, + double traction_control_on, + double ts_deactivate, + double torque_limit, + double power_limit, + double torque_limit_dynamisch, + double torque_ohne_limit_l, + double torque_ohne_limit_r) { + this->ini_check_error_state = ini_check_error_state; + this->powermap = powermap; + this->apps_ok = apps_ok; + this->brake_ok = brake_ok; + this->allow_torque = allow_torque; + this->asp_ok = asp_ok; + this->pressure_sensor_ok = pressure_sensor_ok; + this->torque_vectoring_on = torque_vectoring_on; + this->reku_on = reku_on; + this->traction_control_on = traction_control_on; + this->ts_deactivate = ts_deactivate; + this->torque_limit = torque_limit; + this->power_limit = power_limit; + this->torque_limit_dynamisch = torque_limit_dynamisch; + this->torque_ohne_limit_l = torque_ohne_limit_l; + this->torque_ohne_limit_r = torque_ohne_limit_r; +} + +}; +struct override_powermap_t { + double laptopp_power_map; + double laptop_reku; + double laptop_tc; + double laptop_tv; + double laptop_slipref; + double laptop_tc_i; + double laptop_tc_p; + double laptop_tc_mumax; +override_powermap_t() { + this->laptopp_power_map = 0.0; + this->laptop_reku = 0.0; + this->laptop_tc = 0.0; + this->laptop_tv = 0.0; + this->laptop_slipref = 0.0; + this->laptop_tc_i = 0.0; + this->laptop_tc_p = 0.0; + this->laptop_tc_mumax = 0.0; +} + +override_powermap_t( + double laptopp_power_map, + double laptop_reku, + double laptop_tc, + double laptop_tv, + double laptop_slipref, + double laptop_tc_i, + double laptop_tc_p, + double laptop_tc_mumax) { + this->laptopp_power_map = laptopp_power_map; + this->laptop_reku = laptop_reku; + this->laptop_tc = laptop_tc; + this->laptop_tv = laptop_tv; + this->laptop_slipref = laptop_slipref; + this->laptop_tc_i = laptop_tc_i; + this->laptop_tc_p = laptop_tc_p; + this->laptop_tc_mumax = laptop_tc_mumax; +} + +}; +struct override_laptop_2_t { + double as_mission; + double as_state; + double manual_input_torque; + double laptop_powerlimit; + double laptop_torque_lim; +override_laptop_2_t() { + this->as_mission = 0.0; + this->as_state = 0.0; + this->manual_input_torque = 0.0; + this->laptop_powerlimit = 0.0; + this->laptop_torque_lim = 0.0; +} + +override_laptop_2_t( + double as_mission, + double as_state, + double manual_input_torque, + double laptop_powerlimit, + double laptop_torque_lim) { + this->as_mission = as_mission; + this->as_state = as_state; + this->manual_input_torque = manual_input_torque; + this->laptop_powerlimit = laptop_powerlimit; + this->laptop_torque_lim = laptop_torque_lim; +} + +}; +struct override_epsc_cooling_t { + double epsc_manual_angle; + double epsc_mode; + double ac_cooling_enable; + double ts_cooling_enable; + double ac_cooling_pwm; + double ts_cooling_pwm; +override_epsc_cooling_t() { + this->epsc_manual_angle = 0.0; + this->epsc_mode = 0.0; + this->ac_cooling_enable = 0.0; + this->ts_cooling_enable = 0.0; + this->ac_cooling_pwm = 0.0; + this->ts_cooling_pwm = 0.0; +} + +override_epsc_cooling_t( + double epsc_manual_angle, + double epsc_mode, + double ac_cooling_enable, + double ts_cooling_enable, + double ac_cooling_pwm, + double ts_cooling_pwm) { + this->epsc_manual_angle = epsc_manual_angle; + this->epsc_mode = epsc_mode; + this->ac_cooling_enable = ac_cooling_enable; + this->ts_cooling_enable = ts_cooling_enable; + this->ac_cooling_pwm = ac_cooling_pwm; + this->ts_cooling_pwm = ts_cooling_pwm; +} + +}; +struct override_laptop_t { + double fake_r2_d; + double fake_soundbox_emergency; + double fake_soundbox_r2_d; + double fake_ts_active; + double override_apps; + double override_as_mission; + double override_as_state; + double override_epsc_mode; + double override_pdu_ac_cooling_enable; + double override_pdu_acu_enable; + double override_pdu_drs_enable; + double override_pdu_epsc_enable; + double override_pdu_heartbeat; + double override_pdu_lidar_enable; + double override_pdu_pn_v1_enable; + double override_pdu_pn_v2_enable; + double override_pdu_ts_cooling_enable; + double override_power_map; + double override_tc_parameter; + double override_torque_input; +override_laptop_t() { + this->fake_r2_d = 0.0; + this->fake_soundbox_emergency = 0.0; + this->fake_soundbox_r2_d = 0.0; + this->fake_ts_active = 0.0; + this->override_apps = 0.0; + this->override_as_mission = 0.0; + this->override_as_state = 0.0; + this->override_epsc_mode = 0.0; + this->override_pdu_ac_cooling_enable = 0.0; + this->override_pdu_acu_enable = 0.0; + this->override_pdu_drs_enable = 0.0; + this->override_pdu_epsc_enable = 0.0; + this->override_pdu_heartbeat = 0.0; + this->override_pdu_lidar_enable = 0.0; + this->override_pdu_pn_v1_enable = 0.0; + this->override_pdu_pn_v2_enable = 0.0; + this->override_pdu_ts_cooling_enable = 0.0; + this->override_power_map = 0.0; + this->override_tc_parameter = 0.0; + this->override_torque_input = 0.0; +} + +override_laptop_t( + double fake_r2_d, + double fake_soundbox_emergency, + double fake_soundbox_r2_d, + double fake_ts_active, + double override_apps, + double override_as_mission, + double override_as_state, + double override_epsc_mode, + double override_pdu_ac_cooling_enable, + double override_pdu_acu_enable, + double override_pdu_drs_enable, + double override_pdu_epsc_enable, + double override_pdu_heartbeat, + double override_pdu_lidar_enable, + double override_pdu_pn_v1_enable, + double override_pdu_pn_v2_enable, + double override_pdu_ts_cooling_enable, + double override_power_map, + double override_tc_parameter, + double override_torque_input) { + this->fake_r2_d = fake_r2_d; + this->fake_soundbox_emergency = fake_soundbox_emergency; + this->fake_soundbox_r2_d = fake_soundbox_r2_d; + this->fake_ts_active = fake_ts_active; + this->override_apps = override_apps; + this->override_as_mission = override_as_mission; + this->override_as_state = override_as_state; + this->override_epsc_mode = override_epsc_mode; + this->override_pdu_ac_cooling_enable = override_pdu_ac_cooling_enable; + this->override_pdu_acu_enable = override_pdu_acu_enable; + this->override_pdu_drs_enable = override_pdu_drs_enable; + this->override_pdu_epsc_enable = override_pdu_epsc_enable; + this->override_pdu_heartbeat = override_pdu_heartbeat; + this->override_pdu_lidar_enable = override_pdu_lidar_enable; + this->override_pdu_pn_v1_enable = override_pdu_pn_v1_enable; + this->override_pdu_pn_v2_enable = override_pdu_pn_v2_enable; + this->override_pdu_ts_cooling_enable = override_pdu_ts_cooling_enable; + this->override_power_map = override_power_map; + this->override_tc_parameter = override_tc_parameter; + this->override_torque_input = override_torque_input; +} + +}; +struct apps_override_t { + double apps_0_max; + double apps_0_min; + double apps_1_max; + double apps_1_min; +apps_override_t() { + this->apps_0_max = 0.0; + this->apps_0_min = 0.0; + this->apps_1_max = 0.0; + this->apps_1_min = 0.0; +} + +apps_override_t( + double apps_0_max, + double apps_0_min, + double apps_1_max, + double apps_1_min) { + this->apps_0_max = apps_0_max; + this->apps_0_min = apps_0_min; + this->apps_1_max = apps_1_max; + this->apps_1_min = apps_1_min; +} + +}; +struct ftcu_damper_t { + double ftcu_damper_fl; + double ftcu_damper_fr; + double ftcu_damper_rl; + double ftcu_damper_rr; +ftcu_damper_t() { + this->ftcu_damper_fl = 0.0; + this->ftcu_damper_fr = 0.0; + this->ftcu_damper_rl = 0.0; + this->ftcu_damper_rr = 0.0; +} + +ftcu_damper_t( + double ftcu_damper_fl, + double ftcu_damper_fr, + double ftcu_damper_rl, + double ftcu_damper_rr) { + this->ftcu_damper_fl = ftcu_damper_fl; + this->ftcu_damper_fr = ftcu_damper_fr; + this->ftcu_damper_rl = ftcu_damper_rl; + this->ftcu_damper_rr = ftcu_damper_rr; +} + +}; +struct ftcu_param_confirm_t { + double ftcu_param_confirm; +ftcu_param_confirm_t() { + this->ftcu_param_confirm = 0.0; +} + +ftcu_param_confirm_t( + double ftcu_param_confirm) { + this->ftcu_param_confirm = ftcu_param_confirm; +} + +}; +struct sensornode_f_10_hz_t { + double ls_l; + double ls_r; + double sdc_m_pre_bots; + double sdc_m_post_ins; + double sdc_m_post_bspd; + double bdts_fl; + double bdts_fr; +sensornode_f_10_hz_t() { + this->ls_l = 0.0; + this->ls_r = 0.0; + this->sdc_m_pre_bots = 0.0; + this->sdc_m_post_ins = 0.0; + this->sdc_m_post_bspd = 0.0; + this->bdts_fl = 0.0; + this->bdts_fr = 0.0; +} + +sensornode_f_10_hz_t( + double ls_l, + double ls_r, + double sdc_m_pre_bots, + double sdc_m_post_ins, + double sdc_m_post_bspd, + double bdts_fl, + double bdts_fr) { + this->ls_l = ls_l; + this->ls_r = ls_r; + this->sdc_m_pre_bots = sdc_m_pre_bots; + this->sdc_m_post_ins = sdc_m_post_ins; + this->sdc_m_post_bspd = sdc_m_post_bspd; + this->bdts_fl = bdts_fl; + this->bdts_fr = bdts_fr; +} + +}; +struct sensornode_f_100_hz_1_t { + double apps_1; + double apps_2; + double bp_f; + double sas; + double wss_fl; + double wss_fr; +sensornode_f_100_hz_1_t() { + this->apps_1 = 0.0; + this->apps_2 = 0.0; + this->bp_f = 0.0; + this->sas = 0.0; + this->wss_fl = 0.0; + this->wss_fr = 0.0; +} + +sensornode_f_100_hz_1_t( + double apps_1, + double apps_2, + double bp_f, + double sas, + double wss_fl, + double wss_fr) { + this->apps_1 = apps_1; + this->apps_2 = apps_2; + this->bp_f = bp_f; + this->sas = sas; + this->wss_fl = wss_fl; + this->wss_fr = wss_fr; +} + +}; +struct sensornode_f_100_hz_2_t { + double ds_fl; + double ds_fr; +sensornode_f_100_hz_2_t() { + this->ds_fl = 0.0; + this->ds_fr = 0.0; +} + +sensornode_f_100_hz_2_t( + double ds_fl, + double ds_fr) { + this->ds_fl = ds_fl; + this->ds_fr = ds_fr; +} + +}; +struct sensornode_f_1k_hz_t { + double sls_fl; + double sls_fr; +sensornode_f_1k_hz_t() { + this->sls_fl = 0.0; + this->sls_fr = 0.0; +} + +sensornode_f_1k_hz_t( + double sls_fl, + double sls_fr) { + this->sls_fl = sls_fl; + this->sls_fr = sls_fr; +} + +}; +struct sensornode_r_10_hz_t { + double ext_ts_on; + double sdc_m_pre_tsms; + double sdc_m_post_tsms; + double bdts_rl; + double bdts_rr; + double wt_bat; + double wt_dt; + double wp_bat; + double wp_dt; +sensornode_r_10_hz_t() { + this->ext_ts_on = 0.0; + this->sdc_m_pre_tsms = 0.0; + this->sdc_m_post_tsms = 0.0; + this->bdts_rl = 0.0; + this->bdts_rr = 0.0; + this->wt_bat = 0.0; + this->wt_dt = 0.0; + this->wp_bat = 0.0; + this->wp_dt = 0.0; +} + +sensornode_r_10_hz_t( + double ext_ts_on, + double sdc_m_pre_tsms, + double sdc_m_post_tsms, + double bdts_rl, + double bdts_rr, + double wt_bat, + double wt_dt, + double wp_bat, + double wp_dt) { + this->ext_ts_on = ext_ts_on; + this->sdc_m_pre_tsms = sdc_m_pre_tsms; + this->sdc_m_post_tsms = sdc_m_post_tsms; + this->bdts_rl = bdts_rl; + this->bdts_rr = bdts_rr; + this->wt_bat = wt_bat; + this->wt_dt = wt_dt; + this->wp_bat = wp_bat; + this->wp_dt = wp_dt; +} + +}; +struct sensornode_r_100_hz_t { + double ebs_aps_1; + double ebs_aps_2; + double bp_r; + double wss_rl; + double wss_rr; + double ds_rl; + double ds_rr; +sensornode_r_100_hz_t() { + this->ebs_aps_1 = 0.0; + this->ebs_aps_2 = 0.0; + this->bp_r = 0.0; + this->wss_rl = 0.0; + this->wss_rr = 0.0; + this->ds_rl = 0.0; + this->ds_rr = 0.0; +} + +sensornode_r_100_hz_t( + double ebs_aps_1, + double ebs_aps_2, + double bp_r, + double wss_rl, + double wss_rr, + double ds_rl, + double ds_rr) { + this->ebs_aps_1 = ebs_aps_1; + this->ebs_aps_2 = ebs_aps_2; + this->bp_r = bp_r; + this->wss_rl = wss_rl; + this->wss_rr = wss_rr; + this->ds_rl = ds_rl; + this->ds_rr = ds_rr; +} + +}; +struct sensornode_r_1k_hz_t { + double sls_rl; + double sls_rr; +sensornode_r_1k_hz_t() { + this->sls_rl = 0.0; + this->sls_rr = 0.0; +} + +sensornode_r_1k_hz_t( + double sls_rl, + double sls_rr) { + this->sls_rl = sls_rl; + this->sls_rr = sls_rr; +} + +}; +struct pwm_duty_cycle_t { + double dc_drs; + double dc_assi_y; + double dc_assi_b; + double dc_bl; + double dc_fans_dt; + double dc_fans_bat; + double dc_sbx; +pwm_duty_cycle_t() { + this->dc_drs = 0.0; + this->dc_assi_y = 0.0; + this->dc_assi_b = 0.0; + this->dc_bl = 0.0; + this->dc_fans_dt = 0.0; + this->dc_fans_bat = 0.0; + this->dc_sbx = 0.0; +} + +pwm_duty_cycle_t( + double dc_drs, + double dc_assi_y, + double dc_assi_b, + double dc_bl, + double dc_fans_dt, + double dc_fans_bat, + double dc_sbx) { + this->dc_drs = dc_drs; + this->dc_assi_y = dc_assi_y; + this->dc_assi_b = dc_assi_b; + this->dc_bl = dc_bl; + this->dc_fans_dt = dc_fans_dt; + this->dc_fans_bat = dc_fans_bat; + this->dc_sbx = dc_sbx; +} + +}; +struct pwm_config_t { + double freq_pwm1_drs_lighting; + double freq_pwm3_fans; + double freq_pwm2_sbx; +pwm_config_t() { + this->freq_pwm1_drs_lighting = 0.0; + this->freq_pwm3_fans = 0.0; + this->freq_pwm2_sbx = 0.0; +} + +pwm_config_t( + double freq_pwm1_drs_lighting, + double freq_pwm3_fans, + double freq_pwm2_sbx) { + this->freq_pwm1_drs_lighting = freq_pwm1_drs_lighting; + this->freq_pwm3_fans = freq_pwm3_fans; + this->freq_pwm2_sbx = freq_pwm2_sbx; +} + +}; +struct dashboard_in_t { + double dashboard_r2_d_button; + double dashboard_ts_activate_button; + double dashboard_race_key; + double dashboard_sdc_in; + double dashboard_sdc_out; +dashboard_in_t() { + this->dashboard_r2_d_button = 0.0; + this->dashboard_ts_activate_button = 0.0; + this->dashboard_race_key = 0.0; + this->dashboard_sdc_in = 0.0; + this->dashboard_sdc_out = 0.0; +} + +dashboard_in_t( + double dashboard_r2_d_button, + double dashboard_ts_activate_button, + double dashboard_race_key, + double dashboard_sdc_in, + double dashboard_sdc_out) { + this->dashboard_r2_d_button = dashboard_r2_d_button; + this->dashboard_ts_activate_button = dashboard_ts_activate_button; + this->dashboard_race_key = dashboard_race_key; + this->dashboard_sdc_in = dashboard_sdc_in; + this->dashboard_sdc_out = dashboard_sdc_out; +} + +}; +struct ams_slave1_status_t { + double ams_slave_status_error; + double ams_slave_status_id; + double ams_slave_status_temp_sensor; + double ams_slave_status_min_cell_volt; + double ams_slave_status_max_cell_volt; + double ams_slave_status_max_temp; +ams_slave1_status_t() { + this->ams_slave_status_error = 0.0; + this->ams_slave_status_id = 0.0; + this->ams_slave_status_temp_sensor = 0.0; + this->ams_slave_status_min_cell_volt = 0.0; + this->ams_slave_status_max_cell_volt = 0.0; + this->ams_slave_status_max_temp = 0.0; +} + +ams_slave1_status_t( + double ams_slave_status_error, + double ams_slave_status_id, + double ams_slave_status_temp_sensor, + double ams_slave_status_min_cell_volt, + double ams_slave_status_max_cell_volt, + double ams_slave_status_max_temp) { + this->ams_slave_status_error = ams_slave_status_error; + this->ams_slave_status_id = ams_slave_status_id; + this->ams_slave_status_temp_sensor = ams_slave_status_temp_sensor; + this->ams_slave_status_min_cell_volt = ams_slave_status_min_cell_volt; + this->ams_slave_status_max_cell_volt = ams_slave_status_max_cell_volt; + this->ams_slave_status_max_temp = ams_slave_status_max_temp; +} + +}; +struct ams_slave2_log0_t { + double ams_slave_id_v0; + double ams_slave_id_v1; + double ams_slave_id_v2; + double ams_slave_id_v3; +ams_slave2_log0_t() { + this->ams_slave_id_v0 = 0.0; + this->ams_slave_id_v1 = 0.0; + this->ams_slave_id_v2 = 0.0; + this->ams_slave_id_v3 = 0.0; +} + +ams_slave2_log0_t( + double ams_slave_id_v0, + double ams_slave_id_v1, + double ams_slave_id_v2, + double ams_slave_id_v3) { + this->ams_slave_id_v0 = ams_slave_id_v0; + this->ams_slave_id_v1 = ams_slave_id_v1; + this->ams_slave_id_v2 = ams_slave_id_v2; + this->ams_slave_id_v3 = ams_slave_id_v3; +} + +}; +struct ams_slave2_log1_t { + double ams_slave_id_v4; + double ams_slave_id_v5; + double ams_slave_id_v6; + double ams_slave_id_v7; +ams_slave2_log1_t() { + this->ams_slave_id_v4 = 0.0; + this->ams_slave_id_v5 = 0.0; + this->ams_slave_id_v6 = 0.0; + this->ams_slave_id_v7 = 0.0; +} + +ams_slave2_log1_t( + double ams_slave_id_v4, + double ams_slave_id_v5, + double ams_slave_id_v6, + double ams_slave_id_v7) { + this->ams_slave_id_v4 = ams_slave_id_v4; + this->ams_slave_id_v5 = ams_slave_id_v5; + this->ams_slave_id_v6 = ams_slave_id_v6; + this->ams_slave_id_v7 = ams_slave_id_v7; +} + +}; +struct ams_slave2_log2_t { + double ams_slave_id_v8; + double ams_slave_id_v9; + double ams_slave_id_v10; + double ams_slave_id_v11; +ams_slave2_log2_t() { + this->ams_slave_id_v8 = 0.0; + this->ams_slave_id_v9 = 0.0; + this->ams_slave_id_v10 = 0.0; + this->ams_slave_id_v11 = 0.0; +} + +ams_slave2_log2_t( + double ams_slave_id_v8, + double ams_slave_id_v9, + double ams_slave_id_v10, + double ams_slave_id_v11) { + this->ams_slave_id_v8 = ams_slave_id_v8; + this->ams_slave_id_v9 = ams_slave_id_v9; + this->ams_slave_id_v10 = ams_slave_id_v10; + this->ams_slave_id_v11 = ams_slave_id_v11; +} + +}; +struct ams_slave2_log3_t { + double ams_slave_id_v12; + double ams_slave_id_v13; + double ams_slave_id_v14; + double ams_slave_id_v15; +ams_slave2_log3_t() { + this->ams_slave_id_v12 = 0.0; + this->ams_slave_id_v13 = 0.0; + this->ams_slave_id_v14 = 0.0; + this->ams_slave_id_v15 = 0.0; +} + +ams_slave2_log3_t( + double ams_slave_id_v12, + double ams_slave_id_v13, + double ams_slave_id_v14, + double ams_slave_id_v15) { + this->ams_slave_id_v12 = ams_slave_id_v12; + this->ams_slave_id_v13 = ams_slave_id_v13; + this->ams_slave_id_v14 = ams_slave_id_v14; + this->ams_slave_id_v15 = ams_slave_id_v15; +} + +}; +struct ams_slave2_log4_t { + double ams_slave_id_failed_sensors; +ams_slave2_log4_t() { + this->ams_slave_id_failed_sensors = 0.0; +} + +ams_slave2_log4_t( + double ams_slave_id_failed_sensors) { + this->ams_slave_id_failed_sensors = ams_slave_id_failed_sensors; +} + +}; +struct ams_slave2_log5_t { + double ams_slave_id_t0; + double ams_slave_id_t1; + double ams_slave_id_t2; + double ams_slave_id_t3; + double ams_slave_id_t4; + double ams_slave_id_t5; + double ams_slave_id_t6; + double ams_slave_id_t7; +ams_slave2_log5_t() { + this->ams_slave_id_t0 = 0.0; + this->ams_slave_id_t1 = 0.0; + this->ams_slave_id_t2 = 0.0; + this->ams_slave_id_t3 = 0.0; + this->ams_slave_id_t4 = 0.0; + this->ams_slave_id_t5 = 0.0; + this->ams_slave_id_t6 = 0.0; + this->ams_slave_id_t7 = 0.0; +} + +ams_slave2_log5_t( + double ams_slave_id_t0, + double ams_slave_id_t1, + double ams_slave_id_t2, + double ams_slave_id_t3, + double ams_slave_id_t4, + double ams_slave_id_t5, + double ams_slave_id_t6, + double ams_slave_id_t7) { + this->ams_slave_id_t0 = ams_slave_id_t0; + this->ams_slave_id_t1 = ams_slave_id_t1; + this->ams_slave_id_t2 = ams_slave_id_t2; + this->ams_slave_id_t3 = ams_slave_id_t3; + this->ams_slave_id_t4 = ams_slave_id_t4; + this->ams_slave_id_t5 = ams_slave_id_t5; + this->ams_slave_id_t6 = ams_slave_id_t6; + this->ams_slave_id_t7 = ams_slave_id_t7; +} + +}; +struct ams_slave5_log6_t { + double ams_slave_id_t8; + double ams_slave_id_t9; +ams_slave5_log6_t() { + this->ams_slave_id_t8 = 0.0; + this->ams_slave_id_t9 = 0.0; +} + +ams_slave5_log6_t( + double ams_slave_id_t8, + double ams_slave_id_t9) { + this->ams_slave_id_t8 = ams_slave_id_t8; + this->ams_slave_id_t9 = ams_slave_id_t9; +} + +}; +struct ams_slave4_log6_t { + double ams_slave_id_t8; + double ams_slave_id_t9; +ams_slave4_log6_t() { + this->ams_slave_id_t8 = 0.0; + this->ams_slave_id_t9 = 0.0; +} + +ams_slave4_log6_t( + double ams_slave_id_t8, + double ams_slave_id_t9) { + this->ams_slave_id_t8 = ams_slave_id_t8; + this->ams_slave_id_t9 = ams_slave_id_t9; +} + +}; +struct ams_slave3_log6_t { + double ams_slave_id_t8; + double ams_slave_id_t9; +ams_slave3_log6_t() { + this->ams_slave_id_t8 = 0.0; + this->ams_slave_id_t9 = 0.0; +} + +ams_slave3_log6_t( + double ams_slave_id_t8, + double ams_slave_id_t9) { + this->ams_slave_id_t8 = ams_slave_id_t8; + this->ams_slave_id_t9 = ams_slave_id_t9; +} + +}; +struct ams_slave2_log6_t { + double ams_slave_id_t8; + double ams_slave_id_t9; +ams_slave2_log6_t() { + this->ams_slave_id_t8 = 0.0; + this->ams_slave_id_t9 = 0.0; +} + +ams_slave2_log6_t( + double ams_slave_id_t8, + double ams_slave_id_t9) { + this->ams_slave_id_t8 = ams_slave_id_t8; + this->ams_slave_id_t9 = ams_slave_id_t9; +} + +}; +struct ams_slave1_log6_t { + double ams_slave_id_t8; + double ams_slave_id_t9; +ams_slave1_log6_t() { + this->ams_slave_id_t8 = 0.0; + this->ams_slave_id_t9 = 0.0; +} + +ams_slave1_log6_t( + double ams_slave_id_t8, + double ams_slave_id_t9) { + this->ams_slave_id_t8 = ams_slave_id_t8; + this->ams_slave_id_t9 = ams_slave_id_t9; +} + +}; +struct ams_slave5_log5_t { + double ams_slave_id_t0; + double ams_slave_id_t1; + double ams_slave_id_t2; + double ams_slave_id_t3; + double ams_slave_id_t4; + double ams_slave_id_t5; + double ams_slave_id_t6; + double ams_slave_id_t7; +ams_slave5_log5_t() { + this->ams_slave_id_t0 = 0.0; + this->ams_slave_id_t1 = 0.0; + this->ams_slave_id_t2 = 0.0; + this->ams_slave_id_t3 = 0.0; + this->ams_slave_id_t4 = 0.0; + this->ams_slave_id_t5 = 0.0; + this->ams_slave_id_t6 = 0.0; + this->ams_slave_id_t7 = 0.0; +} + +ams_slave5_log5_t( + double ams_slave_id_t0, + double ams_slave_id_t1, + double ams_slave_id_t2, + double ams_slave_id_t3, + double ams_slave_id_t4, + double ams_slave_id_t5, + double ams_slave_id_t6, + double ams_slave_id_t7) { + this->ams_slave_id_t0 = ams_slave_id_t0; + this->ams_slave_id_t1 = ams_slave_id_t1; + this->ams_slave_id_t2 = ams_slave_id_t2; + this->ams_slave_id_t3 = ams_slave_id_t3; + this->ams_slave_id_t4 = ams_slave_id_t4; + this->ams_slave_id_t5 = ams_slave_id_t5; + this->ams_slave_id_t6 = ams_slave_id_t6; + this->ams_slave_id_t7 = ams_slave_id_t7; +} + +}; +struct ams_slave4_log5_t { + double ams_slave_id_t0; + double ams_slave_id_t1; + double ams_slave_id_t2; + double ams_slave_id_t3; + double ams_slave_id_t4; + double ams_slave_id_t5; + double ams_slave_id_t6; + double ams_slave_id_t7; +ams_slave4_log5_t() { + this->ams_slave_id_t0 = 0.0; + this->ams_slave_id_t1 = 0.0; + this->ams_slave_id_t2 = 0.0; + this->ams_slave_id_t3 = 0.0; + this->ams_slave_id_t4 = 0.0; + this->ams_slave_id_t5 = 0.0; + this->ams_slave_id_t6 = 0.0; + this->ams_slave_id_t7 = 0.0; +} + +ams_slave4_log5_t( + double ams_slave_id_t0, + double ams_slave_id_t1, + double ams_slave_id_t2, + double ams_slave_id_t3, + double ams_slave_id_t4, + double ams_slave_id_t5, + double ams_slave_id_t6, + double ams_slave_id_t7) { + this->ams_slave_id_t0 = ams_slave_id_t0; + this->ams_slave_id_t1 = ams_slave_id_t1; + this->ams_slave_id_t2 = ams_slave_id_t2; + this->ams_slave_id_t3 = ams_slave_id_t3; + this->ams_slave_id_t4 = ams_slave_id_t4; + this->ams_slave_id_t5 = ams_slave_id_t5; + this->ams_slave_id_t6 = ams_slave_id_t6; + this->ams_slave_id_t7 = ams_slave_id_t7; +} + +}; +struct ams_slave3_log5_t { + double ams_slave_id_t0; + double ams_slave_id_t1; + double ams_slave_id_t2; + double ams_slave_id_t3; + double ams_slave_id_t4; + double ams_slave_id_t5; + double ams_slave_id_t6; + double ams_slave_id_t7; +ams_slave3_log5_t() { + this->ams_slave_id_t0 = 0.0; + this->ams_slave_id_t1 = 0.0; + this->ams_slave_id_t2 = 0.0; + this->ams_slave_id_t3 = 0.0; + this->ams_slave_id_t4 = 0.0; + this->ams_slave_id_t5 = 0.0; + this->ams_slave_id_t6 = 0.0; + this->ams_slave_id_t7 = 0.0; +} + +ams_slave3_log5_t( + double ams_slave_id_t0, + double ams_slave_id_t1, + double ams_slave_id_t2, + double ams_slave_id_t3, + double ams_slave_id_t4, + double ams_slave_id_t5, + double ams_slave_id_t6, + double ams_slave_id_t7) { + this->ams_slave_id_t0 = ams_slave_id_t0; + this->ams_slave_id_t1 = ams_slave_id_t1; + this->ams_slave_id_t2 = ams_slave_id_t2; + this->ams_slave_id_t3 = ams_slave_id_t3; + this->ams_slave_id_t4 = ams_slave_id_t4; + this->ams_slave_id_t5 = ams_slave_id_t5; + this->ams_slave_id_t6 = ams_slave_id_t6; + this->ams_slave_id_t7 = ams_slave_id_t7; +} + +}; +struct ams_slave1_log5_t { + double ams_slave_id_t0; + double ams_slave_id_t1; + double ams_slave_id_t2; + double ams_slave_id_t3; + double ams_slave_id_t4; + double ams_slave_id_t5; + double ams_slave_id_t6; + double ams_slave_id_t7; +ams_slave1_log5_t() { + this->ams_slave_id_t0 = 0.0; + this->ams_slave_id_t1 = 0.0; + this->ams_slave_id_t2 = 0.0; + this->ams_slave_id_t3 = 0.0; + this->ams_slave_id_t4 = 0.0; + this->ams_slave_id_t5 = 0.0; + this->ams_slave_id_t6 = 0.0; + this->ams_slave_id_t7 = 0.0; +} + +ams_slave1_log5_t( + double ams_slave_id_t0, + double ams_slave_id_t1, + double ams_slave_id_t2, + double ams_slave_id_t3, + double ams_slave_id_t4, + double ams_slave_id_t5, + double ams_slave_id_t6, + double ams_slave_id_t7) { + this->ams_slave_id_t0 = ams_slave_id_t0; + this->ams_slave_id_t1 = ams_slave_id_t1; + this->ams_slave_id_t2 = ams_slave_id_t2; + this->ams_slave_id_t3 = ams_slave_id_t3; + this->ams_slave_id_t4 = ams_slave_id_t4; + this->ams_slave_id_t5 = ams_slave_id_t5; + this->ams_slave_id_t6 = ams_slave_id_t6; + this->ams_slave_id_t7 = ams_slave_id_t7; +} + +}; +struct ams_slave5_log4_t { + double ams_slave_id_failed_sensors; +ams_slave5_log4_t() { + this->ams_slave_id_failed_sensors = 0.0; +} + +ams_slave5_log4_t( + double ams_slave_id_failed_sensors) { + this->ams_slave_id_failed_sensors = ams_slave_id_failed_sensors; +} + +}; +struct ams_slave4_log4_t { + double ams_slave_id_failed_sensors; +ams_slave4_log4_t() { + this->ams_slave_id_failed_sensors = 0.0; +} + +ams_slave4_log4_t( + double ams_slave_id_failed_sensors) { + this->ams_slave_id_failed_sensors = ams_slave_id_failed_sensors; +} + +}; +struct ams_slave3_log4_t { + double ams_slave_id_failed_sensors; +ams_slave3_log4_t() { + this->ams_slave_id_failed_sensors = 0.0; +} + +ams_slave3_log4_t( + double ams_slave_id_failed_sensors) { + this->ams_slave_id_failed_sensors = ams_slave_id_failed_sensors; +} + +}; +struct ams_slave1_log4_t { + double ams_slave_id_failed_sensors; +ams_slave1_log4_t() { + this->ams_slave_id_failed_sensors = 0.0; +} + +ams_slave1_log4_t( + double ams_slave_id_failed_sensors) { + this->ams_slave_id_failed_sensors = ams_slave_id_failed_sensors; +} + +}; +struct ams_slave5_log3_t { + double ams_slave_id_v12; + double ams_slave_id_v13; + double ams_slave_id_v14; + double ams_slave_id_v15; +ams_slave5_log3_t() { + this->ams_slave_id_v12 = 0.0; + this->ams_slave_id_v13 = 0.0; + this->ams_slave_id_v14 = 0.0; + this->ams_slave_id_v15 = 0.0; +} + +ams_slave5_log3_t( + double ams_slave_id_v12, + double ams_slave_id_v13, + double ams_slave_id_v14, + double ams_slave_id_v15) { + this->ams_slave_id_v12 = ams_slave_id_v12; + this->ams_slave_id_v13 = ams_slave_id_v13; + this->ams_slave_id_v14 = ams_slave_id_v14; + this->ams_slave_id_v15 = ams_slave_id_v15; +} + +}; +struct ams_slave4_log3_t { + double ams_slave_id_v12; + double ams_slave_id_v13; + double ams_slave_id_v14; + double ams_slave_id_v15; +ams_slave4_log3_t() { + this->ams_slave_id_v12 = 0.0; + this->ams_slave_id_v13 = 0.0; + this->ams_slave_id_v14 = 0.0; + this->ams_slave_id_v15 = 0.0; +} + +ams_slave4_log3_t( + double ams_slave_id_v12, + double ams_slave_id_v13, + double ams_slave_id_v14, + double ams_slave_id_v15) { + this->ams_slave_id_v12 = ams_slave_id_v12; + this->ams_slave_id_v13 = ams_slave_id_v13; + this->ams_slave_id_v14 = ams_slave_id_v14; + this->ams_slave_id_v15 = ams_slave_id_v15; +} + +}; +struct ams_slave3_log3_t { + double ams_slave_id_v12; + double ams_slave_id_v13; + double ams_slave_id_v14; + double ams_slave_id_v15; +ams_slave3_log3_t() { + this->ams_slave_id_v12 = 0.0; + this->ams_slave_id_v13 = 0.0; + this->ams_slave_id_v14 = 0.0; + this->ams_slave_id_v15 = 0.0; +} + +ams_slave3_log3_t( + double ams_slave_id_v12, + double ams_slave_id_v13, + double ams_slave_id_v14, + double ams_slave_id_v15) { + this->ams_slave_id_v12 = ams_slave_id_v12; + this->ams_slave_id_v13 = ams_slave_id_v13; + this->ams_slave_id_v14 = ams_slave_id_v14; + this->ams_slave_id_v15 = ams_slave_id_v15; +} + +}; +struct ams_slave1_log3_t { + double ams_slave_id_v12; + double ams_slave_id_v13; + double ams_slave_id_v14; + double ams_slave_id_v15; +ams_slave1_log3_t() { + this->ams_slave_id_v12 = 0.0; + this->ams_slave_id_v13 = 0.0; + this->ams_slave_id_v14 = 0.0; + this->ams_slave_id_v15 = 0.0; +} + +ams_slave1_log3_t( + double ams_slave_id_v12, + double ams_slave_id_v13, + double ams_slave_id_v14, + double ams_slave_id_v15) { + this->ams_slave_id_v12 = ams_slave_id_v12; + this->ams_slave_id_v13 = ams_slave_id_v13; + this->ams_slave_id_v14 = ams_slave_id_v14; + this->ams_slave_id_v15 = ams_slave_id_v15; +} + +}; +struct ams_slave5_log2_t { + double ams_slave_id_v8; + double ams_slave_id_v9; + double ams_slave_id_v10; + double ams_slave_id_v11; +ams_slave5_log2_t() { + this->ams_slave_id_v8 = 0.0; + this->ams_slave_id_v9 = 0.0; + this->ams_slave_id_v10 = 0.0; + this->ams_slave_id_v11 = 0.0; +} + +ams_slave5_log2_t( + double ams_slave_id_v8, + double ams_slave_id_v9, + double ams_slave_id_v10, + double ams_slave_id_v11) { + this->ams_slave_id_v8 = ams_slave_id_v8; + this->ams_slave_id_v9 = ams_slave_id_v9; + this->ams_slave_id_v10 = ams_slave_id_v10; + this->ams_slave_id_v11 = ams_slave_id_v11; +} + +}; +struct ams_slave4_log2_t { + double ams_slave_id_v8; + double ams_slave_id_v9; + double ams_slave_id_v10; + double ams_slave_id_v11; +ams_slave4_log2_t() { + this->ams_slave_id_v8 = 0.0; + this->ams_slave_id_v9 = 0.0; + this->ams_slave_id_v10 = 0.0; + this->ams_slave_id_v11 = 0.0; +} + +ams_slave4_log2_t( + double ams_slave_id_v8, + double ams_slave_id_v9, + double ams_slave_id_v10, + double ams_slave_id_v11) { + this->ams_slave_id_v8 = ams_slave_id_v8; + this->ams_slave_id_v9 = ams_slave_id_v9; + this->ams_slave_id_v10 = ams_slave_id_v10; + this->ams_slave_id_v11 = ams_slave_id_v11; +} + +}; +struct ams_slave3_log2_t { + double ams_slave_id_v8; + double ams_slave_id_v9; + double ams_slave_id_v10; + double ams_slave_id_v11; +ams_slave3_log2_t() { + this->ams_slave_id_v8 = 0.0; + this->ams_slave_id_v9 = 0.0; + this->ams_slave_id_v10 = 0.0; + this->ams_slave_id_v11 = 0.0; +} + +ams_slave3_log2_t( + double ams_slave_id_v8, + double ams_slave_id_v9, + double ams_slave_id_v10, + double ams_slave_id_v11) { + this->ams_slave_id_v8 = ams_slave_id_v8; + this->ams_slave_id_v9 = ams_slave_id_v9; + this->ams_slave_id_v10 = ams_slave_id_v10; + this->ams_slave_id_v11 = ams_slave_id_v11; +} + +}; +struct ams_slave1_log2_t { + double ams_slave_id_v8; + double ams_slave_id_v9; + double ams_slave_id_v10; + double ams_slave_id_v11; +ams_slave1_log2_t() { + this->ams_slave_id_v8 = 0.0; + this->ams_slave_id_v9 = 0.0; + this->ams_slave_id_v10 = 0.0; + this->ams_slave_id_v11 = 0.0; +} + +ams_slave1_log2_t( + double ams_slave_id_v8, + double ams_slave_id_v9, + double ams_slave_id_v10, + double ams_slave_id_v11) { + this->ams_slave_id_v8 = ams_slave_id_v8; + this->ams_slave_id_v9 = ams_slave_id_v9; + this->ams_slave_id_v10 = ams_slave_id_v10; + this->ams_slave_id_v11 = ams_slave_id_v11; +} + +}; +struct ams_slave5_log1_t { + double ams_slave_id_v4; + double ams_slave_id_v5; + double ams_slave_id_v6; + double ams_slave_id_v7; +ams_slave5_log1_t() { + this->ams_slave_id_v4 = 0.0; + this->ams_slave_id_v5 = 0.0; + this->ams_slave_id_v6 = 0.0; + this->ams_slave_id_v7 = 0.0; +} + +ams_slave5_log1_t( + double ams_slave_id_v4, + double ams_slave_id_v5, + double ams_slave_id_v6, + double ams_slave_id_v7) { + this->ams_slave_id_v4 = ams_slave_id_v4; + this->ams_slave_id_v5 = ams_slave_id_v5; + this->ams_slave_id_v6 = ams_slave_id_v6; + this->ams_slave_id_v7 = ams_slave_id_v7; +} + +}; +struct ams_slave4_log1_t { + double ams_slave_id_v4; + double ams_slave_id_v5; + double ams_slave_id_v6; + double ams_slave_id_v7; +ams_slave4_log1_t() { + this->ams_slave_id_v4 = 0.0; + this->ams_slave_id_v5 = 0.0; + this->ams_slave_id_v6 = 0.0; + this->ams_slave_id_v7 = 0.0; +} + +ams_slave4_log1_t( + double ams_slave_id_v4, + double ams_slave_id_v5, + double ams_slave_id_v6, + double ams_slave_id_v7) { + this->ams_slave_id_v4 = ams_slave_id_v4; + this->ams_slave_id_v5 = ams_slave_id_v5; + this->ams_slave_id_v6 = ams_slave_id_v6; + this->ams_slave_id_v7 = ams_slave_id_v7; +} + +}; +struct ams_slave3_log1_t { + double ams_slave_id_v4; + double ams_slave_id_v5; + double ams_slave_id_v6; + double ams_slave_id_v7; +ams_slave3_log1_t() { + this->ams_slave_id_v4 = 0.0; + this->ams_slave_id_v5 = 0.0; + this->ams_slave_id_v6 = 0.0; + this->ams_slave_id_v7 = 0.0; +} + +ams_slave3_log1_t( + double ams_slave_id_v4, + double ams_slave_id_v5, + double ams_slave_id_v6, + double ams_slave_id_v7) { + this->ams_slave_id_v4 = ams_slave_id_v4; + this->ams_slave_id_v5 = ams_slave_id_v5; + this->ams_slave_id_v6 = ams_slave_id_v6; + this->ams_slave_id_v7 = ams_slave_id_v7; +} + +}; +struct ams_slave1_log1_t { + double ams_slave_id_v4; + double ams_slave_id_v5; + double ams_slave_id_v6; + double ams_slave_id_v7; +ams_slave1_log1_t() { + this->ams_slave_id_v4 = 0.0; + this->ams_slave_id_v5 = 0.0; + this->ams_slave_id_v6 = 0.0; + this->ams_slave_id_v7 = 0.0; +} + +ams_slave1_log1_t( + double ams_slave_id_v4, + double ams_slave_id_v5, + double ams_slave_id_v6, + double ams_slave_id_v7) { + this->ams_slave_id_v4 = ams_slave_id_v4; + this->ams_slave_id_v5 = ams_slave_id_v5; + this->ams_slave_id_v6 = ams_slave_id_v6; + this->ams_slave_id_v7 = ams_slave_id_v7; +} + +}; +struct ams_slave5_log0_t { + double ams_slave_id_v0; + double ams_slave_id_v1; + double ams_slave_id_v2; + double ams_slave_id_v3; +ams_slave5_log0_t() { + this->ams_slave_id_v0 = 0.0; + this->ams_slave_id_v1 = 0.0; + this->ams_slave_id_v2 = 0.0; + this->ams_slave_id_v3 = 0.0; +} + +ams_slave5_log0_t( + double ams_slave_id_v0, + double ams_slave_id_v1, + double ams_slave_id_v2, + double ams_slave_id_v3) { + this->ams_slave_id_v0 = ams_slave_id_v0; + this->ams_slave_id_v1 = ams_slave_id_v1; + this->ams_slave_id_v2 = ams_slave_id_v2; + this->ams_slave_id_v3 = ams_slave_id_v3; +} + +}; +struct ams_slave4_log0_t { + double ams_slave_id_v0; + double ams_slave_id_v1; + double ams_slave_id_v2; + double ams_slave_id_v3; +ams_slave4_log0_t() { + this->ams_slave_id_v0 = 0.0; + this->ams_slave_id_v1 = 0.0; + this->ams_slave_id_v2 = 0.0; + this->ams_slave_id_v3 = 0.0; +} + +ams_slave4_log0_t( + double ams_slave_id_v0, + double ams_slave_id_v1, + double ams_slave_id_v2, + double ams_slave_id_v3) { + this->ams_slave_id_v0 = ams_slave_id_v0; + this->ams_slave_id_v1 = ams_slave_id_v1; + this->ams_slave_id_v2 = ams_slave_id_v2; + this->ams_slave_id_v3 = ams_slave_id_v3; +} + +}; +struct ams_slave3_log0_t { + double ams_slave_id_v0; + double ams_slave_id_v1; + double ams_slave_id_v2; + double ams_slave_id_v3; +ams_slave3_log0_t() { + this->ams_slave_id_v0 = 0.0; + this->ams_slave_id_v1 = 0.0; + this->ams_slave_id_v2 = 0.0; + this->ams_slave_id_v3 = 0.0; +} + +ams_slave3_log0_t( + double ams_slave_id_v0, + double ams_slave_id_v1, + double ams_slave_id_v2, + double ams_slave_id_v3) { + this->ams_slave_id_v0 = ams_slave_id_v0; + this->ams_slave_id_v1 = ams_slave_id_v1; + this->ams_slave_id_v2 = ams_slave_id_v2; + this->ams_slave_id_v3 = ams_slave_id_v3; +} + +}; +struct ams_slave1_log0_t { + double ams_slave_id_v0; + double ams_slave_id_v1; + double ams_slave_id_v2; + double ams_slave_id_v3; +ams_slave1_log0_t() { + this->ams_slave_id_v0 = 0.0; + this->ams_slave_id_v1 = 0.0; + this->ams_slave_id_v2 = 0.0; + this->ams_slave_id_v3 = 0.0; +} + +ams_slave1_log0_t( + double ams_slave_id_v0, + double ams_slave_id_v1, + double ams_slave_id_v2, + double ams_slave_id_v3) { + this->ams_slave_id_v0 = ams_slave_id_v0; + this->ams_slave_id_v1 = ams_slave_id_v1; + this->ams_slave_id_v2 = ams_slave_id_v2; + this->ams_slave_id_v3 = ams_slave_id_v3; +} + +}; +struct pdu_heartbeat_t { + double pdu_heartbeat; +pdu_heartbeat_t() { + this->pdu_heartbeat = 0.0; +} + +pdu_heartbeat_t( + double pdu_heartbeat) { + this->pdu_heartbeat = pdu_heartbeat; +} + +}; +struct ftcu_pneumatik_t { + double ftcu_tank_pressure_1; + double ftcu_tank_pressure_2; +ftcu_pneumatik_t() { + this->ftcu_tank_pressure_1 = 0.0; + this->ftcu_tank_pressure_2 = 0.0; +} + +ftcu_pneumatik_t( + double ftcu_tank_pressure_1, + double ftcu_tank_pressure_2) { + this->ftcu_tank_pressure_1 = ftcu_tank_pressure_1; + this->ftcu_tank_pressure_2 = ftcu_tank_pressure_2; +} + +}; +struct acu_tx_commands_t { + double abx_speed_fl; + double abx_speed_fr; + double abx_speed_rl; + double abx_speed_rr; + double abx_steering_angle_left; + double abx_steering_angle_right; +acu_tx_commands_t() { + this->abx_speed_fl = 0.0; + this->abx_speed_fr = 0.0; + this->abx_speed_rl = 0.0; + this->abx_speed_rr = 0.0; + this->abx_steering_angle_left = 0.0; + this->abx_steering_angle_right = 0.0; +} + +acu_tx_commands_t( + double abx_speed_fl, + double abx_speed_fr, + double abx_speed_rl, + double abx_speed_rr, + double abx_steering_angle_left, + double abx_steering_angle_right) { + this->abx_speed_fl = abx_speed_fl; + this->abx_speed_fr = abx_speed_fr; + this->abx_speed_rl = abx_speed_rl; + this->abx_speed_rr = abx_speed_rr; + this->abx_steering_angle_left = abx_steering_angle_left; + this->abx_steering_angle_right = abx_steering_angle_right; +} + +}; +struct acu_rx_commands_t { + double acu_speed_target_left; + double acu_speed_target_right; + double acu_steering_angle_right; + double acu_steering_angle_left; +acu_rx_commands_t() { + this->acu_speed_target_left = 0.0; + this->acu_speed_target_right = 0.0; + this->acu_steering_angle_right = 0.0; + this->acu_steering_angle_left = 0.0; +} + +acu_rx_commands_t( + double acu_speed_target_left, + double acu_speed_target_right, + double acu_steering_angle_right, + double acu_steering_angle_left) { + this->acu_speed_target_left = acu_speed_target_left; + this->acu_speed_target_right = acu_speed_target_right; + this->acu_steering_angle_right = acu_steering_angle_right; + this->acu_steering_angle_left = acu_steering_angle_left; +} + +}; +struct acu_rx_t { + double acu_as_mission_complete; + double acu_as_ok; + double acu_drs; + double acu_lap_count; + double acu_cones_all; + double acu_cones_actual; +acu_rx_t() { + this->acu_as_mission_complete = 0.0; + this->acu_as_ok = 0.0; + this->acu_drs = 0.0; + this->acu_lap_count = 0.0; + this->acu_cones_all = 0.0; + this->acu_cones_actual = 0.0; +} + +acu_rx_t( + double acu_as_mission_complete, + double acu_as_ok, + double acu_drs, + double acu_lap_count, + double acu_cones_all, + double acu_cones_actual) { + this->acu_as_mission_complete = acu_as_mission_complete; + this->acu_as_ok = acu_as_ok; + this->acu_drs = acu_drs; + this->acu_lap_count = acu_lap_count; + this->acu_cones_all = acu_cones_all; + this->acu_cones_actual = acu_cones_actual; +} + +}; +struct ams_slave0_log0_t { + double ams_slave_id_v0; + double ams_slave_id_v1; + double ams_slave_id_v2; + double ams_slave_id_v3; +ams_slave0_log0_t() { + this->ams_slave_id_v0 = 0.0; + this->ams_slave_id_v1 = 0.0; + this->ams_slave_id_v2 = 0.0; + this->ams_slave_id_v3 = 0.0; +} + +ams_slave0_log0_t( + double ams_slave_id_v0, + double ams_slave_id_v1, + double ams_slave_id_v2, + double ams_slave_id_v3) { + this->ams_slave_id_v0 = ams_slave_id_v0; + this->ams_slave_id_v1 = ams_slave_id_v1; + this->ams_slave_id_v2 = ams_slave_id_v2; + this->ams_slave_id_v3 = ams_slave_id_v3; +} + +}; +struct ams_slave0_log1_t { + double ams_slave_id_v4; + double ams_slave_id_v5; + double ams_slave_id_v6; + double ams_slave_id_v7; +ams_slave0_log1_t() { + this->ams_slave_id_v4 = 0.0; + this->ams_slave_id_v5 = 0.0; + this->ams_slave_id_v6 = 0.0; + this->ams_slave_id_v7 = 0.0; +} + +ams_slave0_log1_t( + double ams_slave_id_v4, + double ams_slave_id_v5, + double ams_slave_id_v6, + double ams_slave_id_v7) { + this->ams_slave_id_v4 = ams_slave_id_v4; + this->ams_slave_id_v5 = ams_slave_id_v5; + this->ams_slave_id_v6 = ams_slave_id_v6; + this->ams_slave_id_v7 = ams_slave_id_v7; +} + +}; +struct ams_slave0_log3_t { + double ams_slave_id_v12; + double ams_slave_id_v13; + double ams_slave_id_v14; + double ams_slave_id_v15; +ams_slave0_log3_t() { + this->ams_slave_id_v12 = 0.0; + this->ams_slave_id_v13 = 0.0; + this->ams_slave_id_v14 = 0.0; + this->ams_slave_id_v15 = 0.0; +} + +ams_slave0_log3_t( + double ams_slave_id_v12, + double ams_slave_id_v13, + double ams_slave_id_v14, + double ams_slave_id_v15) { + this->ams_slave_id_v12 = ams_slave_id_v12; + this->ams_slave_id_v13 = ams_slave_id_v13; + this->ams_slave_id_v14 = ams_slave_id_v14; + this->ams_slave_id_v15 = ams_slave_id_v15; +} + +}; +struct ams_slave0_log4_t { + double ams_slave_id_failed_sensors; +ams_slave0_log4_t() { + this->ams_slave_id_failed_sensors = 0.0; +} + +ams_slave0_log4_t( + double ams_slave_id_failed_sensors) { + this->ams_slave_id_failed_sensors = ams_slave_id_failed_sensors; +} + +}; +struct ams_slave0_log5_t { + double ams_slave_id_t0; + double ams_slave_id_t1; + double ams_slave_id_t2; + double ams_slave_id_t3; + double ams_slave_id_t4; + double ams_slave_id_t5; + double ams_slave_id_t6; + double ams_slave_id_t7; +ams_slave0_log5_t() { + this->ams_slave_id_t0 = 0.0; + this->ams_slave_id_t1 = 0.0; + this->ams_slave_id_t2 = 0.0; + this->ams_slave_id_t3 = 0.0; + this->ams_slave_id_t4 = 0.0; + this->ams_slave_id_t5 = 0.0; + this->ams_slave_id_t6 = 0.0; + this->ams_slave_id_t7 = 0.0; +} + +ams_slave0_log5_t( + double ams_slave_id_t0, + double ams_slave_id_t1, + double ams_slave_id_t2, + double ams_slave_id_t3, + double ams_slave_id_t4, + double ams_slave_id_t5, + double ams_slave_id_t6, + double ams_slave_id_t7) { + this->ams_slave_id_t0 = ams_slave_id_t0; + this->ams_slave_id_t1 = ams_slave_id_t1; + this->ams_slave_id_t2 = ams_slave_id_t2; + this->ams_slave_id_t3 = ams_slave_id_t3; + this->ams_slave_id_t4 = ams_slave_id_t4; + this->ams_slave_id_t5 = ams_slave_id_t5; + this->ams_slave_id_t6 = ams_slave_id_t6; + this->ams_slave_id_t7 = ams_slave_id_t7; +} + +}; +struct ams_slave0_log6_t { + double ams_slave_id_t8; + double ams_slave_id_t9; +ams_slave0_log6_t() { + this->ams_slave_id_t8 = 0.0; + this->ams_slave_id_t9 = 0.0; +} + +ams_slave0_log6_t( + double ams_slave_id_t8, + double ams_slave_id_t9) { + this->ams_slave_id_t8 = ams_slave_id_t8; + this->ams_slave_id_t9 = ams_slave_id_t9; +} + +}; +struct acu_tx_t { + double acu_as_mission; + double acu_as_state; + double acu_power_off; + double acu_reset; + double acu_allow_torque; + double abx_con_mon_error; +acu_tx_t() { + this->acu_as_mission = 0.0; + this->acu_as_state = 0.0; + this->acu_power_off = 0.0; + this->acu_reset = 0.0; + this->acu_allow_torque = 0.0; + this->abx_con_mon_error = 0.0; +} + +acu_tx_t( + double acu_as_mission, + double acu_as_state, + double acu_power_off, + double acu_reset, + double acu_allow_torque, + double abx_con_mon_error) { + this->acu_as_mission = acu_as_mission; + this->acu_as_state = acu_as_state; + this->acu_power_off = acu_power_off; + this->acu_reset = acu_reset; + this->acu_allow_torque = acu_allow_torque; + this->abx_con_mon_error = abx_con_mon_error; +} + +}; +struct ams_slave5_status_t { + double ams_slave_status_error; + double ams_slave_status_id; + double ams_slave_status_temp_sensor; + double ams_slave_status_min_cell_volt; + double ams_slave_status_max_cell_volt; + double ams_slave_status_max_temp; +ams_slave5_status_t() { + this->ams_slave_status_error = 0.0; + this->ams_slave_status_id = 0.0; + this->ams_slave_status_temp_sensor = 0.0; + this->ams_slave_status_min_cell_volt = 0.0; + this->ams_slave_status_max_cell_volt = 0.0; + this->ams_slave_status_max_temp = 0.0; +} + +ams_slave5_status_t( + double ams_slave_status_error, + double ams_slave_status_id, + double ams_slave_status_temp_sensor, + double ams_slave_status_min_cell_volt, + double ams_slave_status_max_cell_volt, + double ams_slave_status_max_temp) { + this->ams_slave_status_error = ams_slave_status_error; + this->ams_slave_status_id = ams_slave_status_id; + this->ams_slave_status_temp_sensor = ams_slave_status_temp_sensor; + this->ams_slave_status_min_cell_volt = ams_slave_status_min_cell_volt; + this->ams_slave_status_max_cell_volt = ams_slave_status_max_cell_volt; + this->ams_slave_status_max_temp = ams_slave_status_max_temp; +} + +}; +struct ams_slave4_status_t { + double ams_slave_status_error; + double ams_slave_status_id; + double ams_slave_status_temp_sensor; + double ams_slave_status_min_cell_volt; + double ams_slave_status_max_cell_volt; + double ams_slave_status_max_temp; +ams_slave4_status_t() { + this->ams_slave_status_error = 0.0; + this->ams_slave_status_id = 0.0; + this->ams_slave_status_temp_sensor = 0.0; + this->ams_slave_status_min_cell_volt = 0.0; + this->ams_slave_status_max_cell_volt = 0.0; + this->ams_slave_status_max_temp = 0.0; +} + +ams_slave4_status_t( + double ams_slave_status_error, + double ams_slave_status_id, + double ams_slave_status_temp_sensor, + double ams_slave_status_min_cell_volt, + double ams_slave_status_max_cell_volt, + double ams_slave_status_max_temp) { + this->ams_slave_status_error = ams_slave_status_error; + this->ams_slave_status_id = ams_slave_status_id; + this->ams_slave_status_temp_sensor = ams_slave_status_temp_sensor; + this->ams_slave_status_min_cell_volt = ams_slave_status_min_cell_volt; + this->ams_slave_status_max_cell_volt = ams_slave_status_max_cell_volt; + this->ams_slave_status_max_temp = ams_slave_status_max_temp; +} + +}; +struct ams_slave3_status_t { + double ams_slave_status_error; + double ams_slave_status_id; + double ams_slave_status_temp_sensor; + double ams_slave_status_min_cell_volt; + double ams_slave_status_max_cell_volt; + double ams_slave_status_max_temp; +ams_slave3_status_t() { + this->ams_slave_status_error = 0.0; + this->ams_slave_status_id = 0.0; + this->ams_slave_status_temp_sensor = 0.0; + this->ams_slave_status_min_cell_volt = 0.0; + this->ams_slave_status_max_cell_volt = 0.0; + this->ams_slave_status_max_temp = 0.0; +} + +ams_slave3_status_t( + double ams_slave_status_error, + double ams_slave_status_id, + double ams_slave_status_temp_sensor, + double ams_slave_status_min_cell_volt, + double ams_slave_status_max_cell_volt, + double ams_slave_status_max_temp) { + this->ams_slave_status_error = ams_slave_status_error; + this->ams_slave_status_id = ams_slave_status_id; + this->ams_slave_status_temp_sensor = ams_slave_status_temp_sensor; + this->ams_slave_status_min_cell_volt = ams_slave_status_min_cell_volt; + this->ams_slave_status_max_cell_volt = ams_slave_status_max_cell_volt; + this->ams_slave_status_max_temp = ams_slave_status_max_temp; +} + +}; +struct ams_slave2_status_t { + double ams_slave_status_error; + double ams_slave_status_id; + double ams_slave_status_temp_sensor; + double ams_slave_status_min_cell_volt; + double ams_slave_status_max_cell_volt; + double ams_slave_status_max_temp; +ams_slave2_status_t() { + this->ams_slave_status_error = 0.0; + this->ams_slave_status_id = 0.0; + this->ams_slave_status_temp_sensor = 0.0; + this->ams_slave_status_min_cell_volt = 0.0; + this->ams_slave_status_max_cell_volt = 0.0; + this->ams_slave_status_max_temp = 0.0; +} + +ams_slave2_status_t( + double ams_slave_status_error, + double ams_slave_status_id, + double ams_slave_status_temp_sensor, + double ams_slave_status_min_cell_volt, + double ams_slave_status_max_cell_volt, + double ams_slave_status_max_temp) { + this->ams_slave_status_error = ams_slave_status_error; + this->ams_slave_status_id = ams_slave_status_id; + this->ams_slave_status_temp_sensor = ams_slave_status_temp_sensor; + this->ams_slave_status_min_cell_volt = ams_slave_status_min_cell_volt; + this->ams_slave_status_max_cell_volt = ams_slave_status_max_cell_volt; + this->ams_slave_status_max_temp = ams_slave_status_max_temp; +} + +}; +struct ams_error_t { + double ams_error_kind; + double ams_error_arg; +ams_error_t() { + this->ams_error_kind = 0.0; + this->ams_error_arg = 0.0; +} + +ams_error_t( + double ams_error_kind, + double ams_error_arg) { + this->ams_error_kind = ams_error_kind; + this->ams_error_arg = ams_error_arg; +} + +}; +struct ftcu_cooling_t { + double ftcu_water_pressure_2; + double ftcu_water_pressure_1; + double ftcu_water_temperature_1; + double ftcu_water_temperature_2; + double ftcu_flow_rate; +ftcu_cooling_t() { + this->ftcu_water_pressure_2 = 0.0; + this->ftcu_water_pressure_1 = 0.0; + this->ftcu_water_temperature_1 = 0.0; + this->ftcu_water_temperature_2 = 0.0; + this->ftcu_flow_rate = 0.0; +} + +ftcu_cooling_t( + double ftcu_water_pressure_2, + double ftcu_water_pressure_1, + double ftcu_water_temperature_1, + double ftcu_water_temperature_2, + double ftcu_flow_rate) { + this->ftcu_water_pressure_2 = ftcu_water_pressure_2; + this->ftcu_water_pressure_1 = ftcu_water_pressure_1; + this->ftcu_water_temperature_1 = ftcu_water_temperature_1; + this->ftcu_water_temperature_2 = ftcu_water_temperature_2; + this->ftcu_flow_rate = ftcu_flow_rate; +} + +}; +struct ftcu_brake_t_t { + double ftcu_brake_t_fl; + double ftcu_brake_t_fr; + double ftcu_brake_t_rl; + double ftcu_brake_t_rr; +ftcu_brake_t_t() { + this->ftcu_brake_t_fl = 0.0; + this->ftcu_brake_t_fr = 0.0; + this->ftcu_brake_t_rl = 0.0; + this->ftcu_brake_t_rr = 0.0; +} + +ftcu_brake_t_t( + double ftcu_brake_t_fl, + double ftcu_brake_t_fr, + double ftcu_brake_t_rl, + double ftcu_brake_t_rr) { + this->ftcu_brake_t_fl = ftcu_brake_t_fl; + this->ftcu_brake_t_fr = ftcu_brake_t_fr; + this->ftcu_brake_t_rl = ftcu_brake_t_rl; + this->ftcu_brake_t_rr = ftcu_brake_t_rr; +} + +}; +struct ftcu_wheelspeed_t { + double ftcu_wheelspeed_fl; + double ftcu_wheelspeed_fr; + double ftcu_wheelspeed_rl; + double ftcu_wheelspeed_rr; + double ftcu_distance_session; +ftcu_wheelspeed_t() { + this->ftcu_wheelspeed_fl = 0.0; + this->ftcu_wheelspeed_fr = 0.0; + this->ftcu_wheelspeed_rl = 0.0; + this->ftcu_wheelspeed_rr = 0.0; + this->ftcu_distance_session = 0.0; +} + +ftcu_wheelspeed_t( + double ftcu_wheelspeed_fl, + double ftcu_wheelspeed_fr, + double ftcu_wheelspeed_rl, + double ftcu_wheelspeed_rr, + double ftcu_distance_session) { + this->ftcu_wheelspeed_fl = ftcu_wheelspeed_fl; + this->ftcu_wheelspeed_fr = ftcu_wheelspeed_fr; + this->ftcu_wheelspeed_rl = ftcu_wheelspeed_rl; + this->ftcu_wheelspeed_rr = ftcu_wheelspeed_rr; + this->ftcu_distance_session = ftcu_distance_session; +} + +}; +struct ftcu_timings_t { + double ftcu_laptime_best; + double ftcu_laptime_last; + double ftcu_sectortime_best; + double ftcu_sectortime_last; +ftcu_timings_t() { + this->ftcu_laptime_best = 0.0; + this->ftcu_laptime_last = 0.0; + this->ftcu_sectortime_best = 0.0; + this->ftcu_sectortime_last = 0.0; +} + +ftcu_timings_t( + double ftcu_laptime_best, + double ftcu_laptime_last, + double ftcu_sectortime_best, + double ftcu_sectortime_last) { + this->ftcu_laptime_best = ftcu_laptime_best; + this->ftcu_laptime_last = ftcu_laptime_last; + this->ftcu_sectortime_best = ftcu_sectortime_best; + this->ftcu_sectortime_last = ftcu_sectortime_last; +} + +}; +struct ftcu_driver_t { + double ftcu_apps_percent; + double ftcu_brake_pressure_f; + double ftcu_brake_pressure_r; + double ftcu_steering_angle; + double ftcu_speed; + double ftcu_lapcounter; + double ftcu_sectorcounter; +ftcu_driver_t() { + this->ftcu_apps_percent = 0.0; + this->ftcu_brake_pressure_f = 0.0; + this->ftcu_brake_pressure_r = 0.0; + this->ftcu_steering_angle = 0.0; + this->ftcu_speed = 0.0; + this->ftcu_lapcounter = 0.0; + this->ftcu_sectorcounter = 0.0; +} + +ftcu_driver_t( + double ftcu_apps_percent, + double ftcu_brake_pressure_f, + double ftcu_brake_pressure_r, + double ftcu_steering_angle, + double ftcu_speed, + double ftcu_lapcounter, + double ftcu_sectorcounter) { + this->ftcu_apps_percent = ftcu_apps_percent; + this->ftcu_brake_pressure_f = ftcu_brake_pressure_f; + this->ftcu_brake_pressure_r = ftcu_brake_pressure_r; + this->ftcu_steering_angle = ftcu_steering_angle; + this->ftcu_speed = ftcu_speed; + this->ftcu_lapcounter = ftcu_lapcounter; + this->ftcu_sectorcounter = ftcu_sectorcounter; +} + +}; +struct tts_rr_t { + double tts_outer_left; + double tts_center_left; + double tts_center; + double tts_center_right; + double tts_outet_right; + double tts_status; +tts_rr_t() { + this->tts_outer_left = 0.0; + this->tts_center_left = 0.0; + this->tts_center = 0.0; + this->tts_center_right = 0.0; + this->tts_outet_right = 0.0; + this->tts_status = 0.0; +} + +tts_rr_t( + double tts_outer_left, + double tts_center_left, + double tts_center, + double tts_center_right, + double tts_outet_right, + double tts_status) { + this->tts_outer_left = tts_outer_left; + this->tts_center_left = tts_center_left; + this->tts_center = tts_center; + this->tts_center_right = tts_center_right; + this->tts_outet_right = tts_outet_right; + this->tts_status = tts_status; +} + +}; +struct tts_rl_t { + double tts_outer_left; + double tts_center_left; + double tts_center; + double tts_center_right; + double tts_outer_right; + double tts_status; +tts_rl_t() { + this->tts_outer_left = 0.0; + this->tts_center_left = 0.0; + this->tts_center = 0.0; + this->tts_center_right = 0.0; + this->tts_outer_right = 0.0; + this->tts_status = 0.0; +} + +tts_rl_t( + double tts_outer_left, + double tts_center_left, + double tts_center, + double tts_center_right, + double tts_outer_right, + double tts_status) { + this->tts_outer_left = tts_outer_left; + this->tts_center_left = tts_center_left; + this->tts_center = tts_center; + this->tts_center_right = tts_center_right; + this->tts_outer_right = tts_outer_right; + this->tts_status = tts_status; +} + +}; +struct tts_fr_t { + double tts_outer_left; + double tts_center_left; + double tts_center; + double tts_center_right; + double tts_outer_right; + double tts_status; +tts_fr_t() { + this->tts_outer_left = 0.0; + this->tts_center_left = 0.0; + this->tts_center = 0.0; + this->tts_center_right = 0.0; + this->tts_outer_right = 0.0; + this->tts_status = 0.0; +} + +tts_fr_t( + double tts_outer_left, + double tts_center_left, + double tts_center, + double tts_center_right, + double tts_outer_right, + double tts_status) { + this->tts_outer_left = tts_outer_left; + this->tts_center_left = tts_center_left; + this->tts_center = tts_center; + this->tts_center_right = tts_center_right; + this->tts_outer_right = tts_outer_right; + this->tts_status = tts_status; +} + +}; +struct tts_fl_t { + double tts_outer_left; + double tts_center_left; + double tts_center; + double tts_center_right; + double tts_outer_right; + double tts_status; +tts_fl_t() { + this->tts_outer_left = 0.0; + this->tts_center_left = 0.0; + this->tts_center = 0.0; + this->tts_center_right = 0.0; + this->tts_outer_right = 0.0; + this->tts_status = 0.0; +} + +tts_fl_t( + double tts_outer_left, + double tts_center_left, + double tts_center, + double tts_center_right, + double tts_outer_right, + double tts_status) { + this->tts_outer_left = tts_outer_left; + this->tts_center_left = tts_center_left; + this->tts_center = tts_center; + this->tts_center_right = tts_center_right; + this->tts_outer_right = tts_outer_right; + this->tts_status = tts_status; +} + +}; +struct stw_param_set_t { + double stw_param_set; + double stw_param_tc_slipref; + double stw_param_tc_mumax; + double stw_param_tc_i; + double stw_param_plim; + double stw_param_tlim; + double stw_param_tc_p; + double stw_param_reku; + double stw_param_tc_on; + double stw_param_tv_on; + double stw_param_discipline; + double stw_param_slim; +stw_param_set_t() { + this->stw_param_set = 0.0; + this->stw_param_tc_slipref = 0.0; + this->stw_param_tc_mumax = 0.0; + this->stw_param_tc_i = 0.0; + this->stw_param_plim = 0.0; + this->stw_param_tlim = 0.0; + this->stw_param_tc_p = 0.0; + this->stw_param_reku = 0.0; + this->stw_param_tc_on = 0.0; + this->stw_param_tv_on = 0.0; + this->stw_param_discipline = 0.0; + this->stw_param_slim = 0.0; +} + +stw_param_set_t( + double stw_param_set, + double stw_param_tc_slipref, + double stw_param_tc_mumax, + double stw_param_tc_i, + double stw_param_plim, + double stw_param_tlim, + double stw_param_tc_p, + double stw_param_reku, + double stw_param_tc_on, + double stw_param_tv_on, + double stw_param_discipline, + double stw_param_slim) { + this->stw_param_set = stw_param_set; + this->stw_param_tc_slipref = stw_param_tc_slipref; + this->stw_param_tc_mumax = stw_param_tc_mumax; + this->stw_param_tc_i = stw_param_tc_i; + this->stw_param_plim = stw_param_plim; + this->stw_param_tlim = stw_param_tlim; + this->stw_param_tc_p = stw_param_tc_p; + this->stw_param_reku = stw_param_reku; + this->stw_param_tc_on = stw_param_tc_on; + this->stw_param_tv_on = stw_param_tv_on; + this->stw_param_discipline = stw_param_discipline; + this->stw_param_slim = stw_param_slim; +} + +}; +struct ams_slave0_status_t { + double ams_slave_status_error; + double ams_slave_status_id; + double ams_slave_status_temp_sensor; + double ams_slave_status_min_cell_volt; + double ams_slave_status_max_cell_volt; + double ams_slave_status_max_temp; +ams_slave0_status_t() { + this->ams_slave_status_error = 0.0; + this->ams_slave_status_id = 0.0; + this->ams_slave_status_temp_sensor = 0.0; + this->ams_slave_status_min_cell_volt = 0.0; + this->ams_slave_status_max_cell_volt = 0.0; + this->ams_slave_status_max_temp = 0.0; +} + +ams_slave0_status_t( + double ams_slave_status_error, + double ams_slave_status_id, + double ams_slave_status_temp_sensor, + double ams_slave_status_min_cell_volt, + double ams_slave_status_max_cell_volt, + double ams_slave_status_max_temp) { + this->ams_slave_status_error = ams_slave_status_error; + this->ams_slave_status_id = ams_slave_status_id; + this->ams_slave_status_temp_sensor = ams_slave_status_temp_sensor; + this->ams_slave_status_min_cell_volt = ams_slave_status_min_cell_volt; + this->ams_slave_status_max_cell_volt = ams_slave_status_max_cell_volt; + this->ams_slave_status_max_temp = ams_slave_status_max_temp; +} + +}; +struct ssu_message_t { + double ssu_pressure; + double ssu_air_temp; +ssu_message_t() { + this->ssu_pressure = 0.0; + this->ssu_air_temp = 0.0; +} + +ssu_message_t( + double ssu_pressure, + double ssu_air_temp) { + this->ssu_pressure = ssu_pressure; + this->ssu_air_temp = ssu_air_temp; +} + +}; +struct ams_status_t { + double ams_state; + double sdc_closed; + double soc; + double min_cell_volt; + double max_cell_temp; + double ams_imd_state; + double ams_imd_ok; +ams_status_t() { + this->ams_state = 0.0; + this->sdc_closed = 0.0; + this->soc = 0.0; + this->min_cell_volt = 0.0; + this->max_cell_temp = 0.0; + this->ams_imd_state = 0.0; + this->ams_imd_ok = 0.0; +} + +ams_status_t( + double ams_state, + double sdc_closed, + double soc, + double min_cell_volt, + double max_cell_temp, + double ams_imd_state, + double ams_imd_ok) { + this->ams_state = ams_state; + this->sdc_closed = sdc_closed; + this->soc = soc; + this->min_cell_volt = min_cell_volt; + this->max_cell_temp = max_cell_temp; + this->ams_imd_state = ams_imd_state; + this->ams_imd_ok = ams_imd_ok; +} + +}; +struct ams_slave_panic_t { + double ams_slave_panic_slave_id; + double ams_slave_panic_kind; + double ams_slave_panic_arg; +ams_slave_panic_t() { + this->ams_slave_panic_slave_id = 0.0; + this->ams_slave_panic_kind = 0.0; + this->ams_slave_panic_arg = 0.0; +} + +ams_slave_panic_t( + double ams_slave_panic_slave_id, + double ams_slave_panic_kind, + double ams_slave_panic_arg) { + this->ams_slave_panic_slave_id = ams_slave_panic_slave_id; + this->ams_slave_panic_kind = ams_slave_panic_kind; + this->ams_slave_panic_arg = ams_slave_panic_arg; +} + +}; +struct ams_in_t { + double ts_activate; + double inverters_discharged; + double lap_number; +ams_in_t() { + this->ts_activate = 0.0; + this->inverters_discharged = 0.0; + this->lap_number = 0.0; +} + +ams_in_t( + double ts_activate, + double inverters_discharged, + double lap_number) { + this->ts_activate = ts_activate; + this->inverters_discharged = inverters_discharged; + this->lap_number = lap_number; +} + +}; +struct shunt_current_t { + double shunt_current; +shunt_current_t() { + this->shunt_current = 0.0; +} + +shunt_current_t( + double shunt_current) { + this->shunt_current = shunt_current; +} + +}; +struct shunt_voltage1_t { + double shunt_voltage1; +shunt_voltage1_t() { + this->shunt_voltage1 = 0.0; +} + +shunt_voltage1_t( + double shunt_voltage1) { + this->shunt_voltage1 = shunt_voltage1; +} + +}; +struct shunt_voltage2_t { + double shunt_voltage2; +shunt_voltage2_t() { + this->shunt_voltage2 = 0.0; +} + +shunt_voltage2_t( + double shunt_voltage2) { + this->shunt_voltage2 = shunt_voltage2; +} + +}; +struct shunt_voltage3_t { + double shunt_voltage3; +shunt_voltage3_t() { + this->shunt_voltage3 = 0.0; +} + +shunt_voltage3_t( + double shunt_voltage3) { + this->shunt_voltage3 = shunt_voltage3; +} + +}; +struct shunt_temperature_t { + double shunt_temperature; +shunt_temperature_t() { + this->shunt_temperature = 0.0; +} + +shunt_temperature_t( + double shunt_temperature) { + this->shunt_temperature = shunt_temperature; +} + +}; +struct pdu_command_t { + double pdu_enable_misc; + double pdu_enable_sdc; + double pdu_enable_inverter; + double pdu_enable_ts_cooling; + double pdu_enable_acc_cooling; + double pdu_enable_lldar; + double pdu_enable_drs; + double pdu_enable_epsc; + double pdu_enable_acu; + double pdu_enable_ebs_a; + double pdu_enable_ebs_b; + double pdu_enable_ebs_c; +pdu_command_t() { + this->pdu_enable_misc = 0.0; + this->pdu_enable_sdc = 0.0; + this->pdu_enable_inverter = 0.0; + this->pdu_enable_ts_cooling = 0.0; + this->pdu_enable_acc_cooling = 0.0; + this->pdu_enable_lldar = 0.0; + this->pdu_enable_drs = 0.0; + this->pdu_enable_epsc = 0.0; + this->pdu_enable_acu = 0.0; + this->pdu_enable_ebs_a = 0.0; + this->pdu_enable_ebs_b = 0.0; + this->pdu_enable_ebs_c = 0.0; +} + +pdu_command_t( + double pdu_enable_misc, + double pdu_enable_sdc, + double pdu_enable_inverter, + double pdu_enable_ts_cooling, + double pdu_enable_acc_cooling, + double pdu_enable_lldar, + double pdu_enable_drs, + double pdu_enable_epsc, + double pdu_enable_acu, + double pdu_enable_ebs_a, + double pdu_enable_ebs_b, + double pdu_enable_ebs_c) { + this->pdu_enable_misc = pdu_enable_misc; + this->pdu_enable_sdc = pdu_enable_sdc; + this->pdu_enable_inverter = pdu_enable_inverter; + this->pdu_enable_ts_cooling = pdu_enable_ts_cooling; + this->pdu_enable_acc_cooling = pdu_enable_acc_cooling; + this->pdu_enable_lldar = pdu_enable_lldar; + this->pdu_enable_drs = pdu_enable_drs; + this->pdu_enable_epsc = pdu_enable_epsc; + this->pdu_enable_acu = pdu_enable_acu; + this->pdu_enable_ebs_a = pdu_enable_ebs_a; + this->pdu_enable_ebs_b = pdu_enable_ebs_b; + this->pdu_enable_ebs_c = pdu_enable_ebs_c; +} + +}; +struct pdu_response_t { + double pdu_alwayson_tx; + double pdu_shutdown_circuit_tx; + double pdu_lidar_tx; + double pdu_acu_tx; + double pdu_servos_regler_tx; + double pdu_inverter_tx; + double pdu_misc_tx; + double pdu_servo_tx; + double pdu_ebs_valve_1_tx; + double pdu_ebs_valve_2_tx; + double pdu_cs_valve_tx; + double pdu_aggregat_tx; + double pdu_steering_tx; + double pdu_pwm_tsac_fans; + double pdu_pwm_radiatot_fans_tx; + double pdu_pwm_aggregat; + double pdu_pwm_pump; + double pdu_heartbeat_ok_tx; +pdu_response_t() { + this->pdu_alwayson_tx = 0.0; + this->pdu_shutdown_circuit_tx = 0.0; + this->pdu_lidar_tx = 0.0; + this->pdu_acu_tx = 0.0; + this->pdu_servos_regler_tx = 0.0; + this->pdu_inverter_tx = 0.0; + this->pdu_misc_tx = 0.0; + this->pdu_servo_tx = 0.0; + this->pdu_ebs_valve_1_tx = 0.0; + this->pdu_ebs_valve_2_tx = 0.0; + this->pdu_cs_valve_tx = 0.0; + this->pdu_aggregat_tx = 0.0; + this->pdu_steering_tx = 0.0; + this->pdu_pwm_tsac_fans = 0.0; + this->pdu_pwm_radiatot_fans_tx = 0.0; + this->pdu_pwm_aggregat = 0.0; + this->pdu_pwm_pump = 0.0; + this->pdu_heartbeat_ok_tx = 0.0; +} + +pdu_response_t( + double pdu_alwayson_tx, + double pdu_shutdown_circuit_tx, + double pdu_lidar_tx, + double pdu_acu_tx, + double pdu_servos_regler_tx, + double pdu_inverter_tx, + double pdu_misc_tx, + double pdu_servo_tx, + double pdu_ebs_valve_1_tx, + double pdu_ebs_valve_2_tx, + double pdu_cs_valve_tx, + double pdu_aggregat_tx, + double pdu_steering_tx, + double pdu_pwm_tsac_fans, + double pdu_pwm_radiatot_fans_tx, + double pdu_pwm_aggregat, + double pdu_pwm_pump, + double pdu_heartbeat_ok_tx) { + this->pdu_alwayson_tx = pdu_alwayson_tx; + this->pdu_shutdown_circuit_tx = pdu_shutdown_circuit_tx; + this->pdu_lidar_tx = pdu_lidar_tx; + this->pdu_acu_tx = pdu_acu_tx; + this->pdu_servos_regler_tx = pdu_servos_regler_tx; + this->pdu_inverter_tx = pdu_inverter_tx; + this->pdu_misc_tx = pdu_misc_tx; + this->pdu_servo_tx = pdu_servo_tx; + this->pdu_ebs_valve_1_tx = pdu_ebs_valve_1_tx; + this->pdu_ebs_valve_2_tx = pdu_ebs_valve_2_tx; + this->pdu_cs_valve_tx = pdu_cs_valve_tx; + this->pdu_aggregat_tx = pdu_aggregat_tx; + this->pdu_steering_tx = pdu_steering_tx; + this->pdu_pwm_tsac_fans = pdu_pwm_tsac_fans; + this->pdu_pwm_radiatot_fans_tx = pdu_pwm_radiatot_fans_tx; + this->pdu_pwm_aggregat = pdu_pwm_aggregat; + this->pdu_pwm_pump = pdu_pwm_pump; + this->pdu_heartbeat_ok_tx = pdu_heartbeat_ok_tx; +} + +}; +struct as_mission_fb_t { + double mission_selection; +as_mission_fb_t() { + this->mission_selection = 0.0; +} + +as_mission_fb_t( + double mission_selection) { + this->mission_selection = mission_selection; +} + +}; +struct stw_mission_selected_t { + double mission_selection; +stw_mission_selected_t() { + this->mission_selection = 0.0; +} + +stw_mission_selected_t( + double mission_selection) { + this->mission_selection = mission_selection; +} + +}; +struct epsc_out_t { + double epsc_measured_rpm; + double epsc_measured_steering_angle; + double epsc_measured_mosfet_temperature; + double epsc_measured_voltage; + double epsc_measured_current; +epsc_out_t() { + this->epsc_measured_rpm = 0.0; + this->epsc_measured_steering_angle = 0.0; + this->epsc_measured_mosfet_temperature = 0.0; + this->epsc_measured_voltage = 0.0; + this->epsc_measured_current = 0.0; +} + +epsc_out_t( + double epsc_measured_rpm, + double epsc_measured_steering_angle, + double epsc_measured_mosfet_temperature, + double epsc_measured_voltage, + double epsc_measured_current) { + this->epsc_measured_rpm = epsc_measured_rpm; + this->epsc_measured_steering_angle = epsc_measured_steering_angle; + this->epsc_measured_mosfet_temperature = epsc_measured_mosfet_temperature; + this->epsc_measured_voltage = epsc_measured_voltage; + this->epsc_measured_current = epsc_measured_current; +} + +}; +struct epsc_steering_in_t { + double epsc_desired_steering_angle; +epsc_steering_in_t() { + this->epsc_desired_steering_angle = 0.0; +} + +epsc_steering_in_t( + double epsc_desired_steering_angle) { + this->epsc_desired_steering_angle = epsc_desired_steering_angle; +} + +}; +struct stw_buttons_t { + double stw_button_drs; + double stw_button_1; + double stw_button_2; + double stw_button_3; + double stw_button_4; +stw_buttons_t() { + this->stw_button_drs = 0.0; + this->stw_button_1 = 0.0; + this->stw_button_2 = 0.0; + this->stw_button_3 = 0.0; + this->stw_button_4 = 0.0; +} + +stw_buttons_t( + double stw_button_drs, + double stw_button_1, + double stw_button_2, + double stw_button_3, + double stw_button_4) { + this->stw_button_drs = stw_button_drs; + this->stw_button_1 = stw_button_1; + this->stw_button_2 = stw_button_2; + this->stw_button_3 = stw_button_3; + this->stw_button_4 = stw_button_4; +} + +}; +struct stw_status_t { + double lap_count; + double err_pdu; + double err_res; + double r2_d_progress; + double as_state_stw; + double err_as; + double err_app_sp; + double err_s_bspd; + double err_scs; + double err_con_mon; + double err_ini_chk; + double err_inv2; + double err_inv1; + double err_ams; + double err_sdc; + double sdc_status; + double inv2_ready; + double inv1_ready; + double energy_per_lap; + double ini_chk_state; +stw_status_t() { + this->lap_count = 0.0; + this->err_pdu = 0.0; + this->err_res = 0.0; + this->r2_d_progress = 0.0; + this->as_state_stw = 0.0; + this->err_as = 0.0; + this->err_app_sp = 0.0; + this->err_s_bspd = 0.0; + this->err_scs = 0.0; + this->err_con_mon = 0.0; + this->err_ini_chk = 0.0; + this->err_inv2 = 0.0; + this->err_inv1 = 0.0; + this->err_ams = 0.0; + this->err_sdc = 0.0; + this->sdc_status = 0.0; + this->inv2_ready = 0.0; + this->inv1_ready = 0.0; + this->energy_per_lap = 0.0; + this->ini_chk_state = 0.0; +} + +stw_status_t( + double lap_count, + double err_pdu, + double err_res, + double r2_d_progress, + double as_state_stw, + double err_as, + double err_app_sp, + double err_s_bspd, + double err_scs, + double err_con_mon, + double err_ini_chk, + double err_inv2, + double err_inv1, + double err_ams, + double err_sdc, + double sdc_status, + double inv2_ready, + double inv1_ready, + double energy_per_lap, + double ini_chk_state) { + this->lap_count = lap_count; + this->err_pdu = err_pdu; + this->err_res = err_res; + this->r2_d_progress = r2_d_progress; + this->as_state_stw = as_state_stw; + this->err_as = err_as; + this->err_app_sp = err_app_sp; + this->err_s_bspd = err_s_bspd; + this->err_scs = err_scs; + this->err_con_mon = err_con_mon; + this->err_ini_chk = err_ini_chk; + this->err_inv2 = err_inv2; + this->err_inv1 = err_inv1; + this->err_ams = err_ams; + this->err_sdc = err_sdc; + this->sdc_status = sdc_status; + this->inv2_ready = inv2_ready; + this->inv1_ready = inv1_ready; + this->energy_per_lap = energy_per_lap; + this->ini_chk_state = ini_chk_state; +} + +}; +struct pdu_current_1_t { + double pdu_always_on_current; + double pdu_lvms_current; + double pdu_asms_current; + double pdu_misc_current; +pdu_current_1_t() { + this->pdu_always_on_current = 0.0; + this->pdu_lvms_current = 0.0; + this->pdu_asms_current = 0.0; + this->pdu_misc_current = 0.0; +} + +pdu_current_1_t( + double pdu_always_on_current, + double pdu_lvms_current, + double pdu_asms_current, + double pdu_misc_current) { + this->pdu_always_on_current = pdu_always_on_current; + this->pdu_lvms_current = pdu_lvms_current; + this->pdu_asms_current = pdu_asms_current; + this->pdu_misc_current = pdu_misc_current; +} + +}; +struct pdu_current_2_t { + double pdu_sdc_current; + double pdu_inverter_current; + double pdu_ts_cooling_current; + double pdu_acc_cooling_current; +pdu_current_2_t() { + this->pdu_sdc_current = 0.0; + this->pdu_inverter_current = 0.0; + this->pdu_ts_cooling_current = 0.0; + this->pdu_acc_cooling_current = 0.0; +} + +pdu_current_2_t( + double pdu_sdc_current, + double pdu_inverter_current, + double pdu_ts_cooling_current, + double pdu_acc_cooling_current) { + this->pdu_sdc_current = pdu_sdc_current; + this->pdu_inverter_current = pdu_inverter_current; + this->pdu_ts_cooling_current = pdu_ts_cooling_current; + this->pdu_acc_cooling_current = pdu_acc_cooling_current; +} + +}; +struct pdu_current_3_t { + double pdu_lidar_current; + double pdu_drs_current; + double pdu_epsc_current; + double pdu_acu_current; +pdu_current_3_t() { + this->pdu_lidar_current = 0.0; + this->pdu_drs_current = 0.0; + this->pdu_epsc_current = 0.0; + this->pdu_acu_current = 0.0; +} + +pdu_current_3_t( + double pdu_lidar_current, + double pdu_drs_current, + double pdu_epsc_current, + double pdu_acu_current) { + this->pdu_lidar_current = pdu_lidar_current; + this->pdu_drs_current = pdu_drs_current; + this->pdu_epsc_current = pdu_epsc_current; + this->pdu_acu_current = pdu_acu_current; +} + +}; +struct pdu_current_4_t { + double pdu_ebs_a_current; + double pdu_ebs_b_current; +pdu_current_4_t() { + this->pdu_ebs_a_current = 0.0; + this->pdu_ebs_b_current = 0.0; +} + +pdu_current_4_t( + double pdu_ebs_a_current, + double pdu_ebs_b_current) { + this->pdu_ebs_a_current = pdu_ebs_a_current; + this->pdu_ebs_b_current = pdu_ebs_b_current; +} + +}; +struct epsc_config_in_t { + double epsc_config_p_gain; + double epsc_config_i_gain; + double epsc_config_d_gain; +epsc_config_in_t() { + this->epsc_config_p_gain = 0.0; + this->epsc_config_i_gain = 0.0; + this->epsc_config_d_gain = 0.0; +} + +epsc_config_in_t( + double epsc_config_p_gain, + double epsc_config_i_gain, + double epsc_config_d_gain) { + this->epsc_config_p_gain = epsc_config_p_gain; + this->epsc_config_i_gain = epsc_config_i_gain; + this->epsc_config_d_gain = epsc_config_d_gain; +} + +}; + +} +} +} + +// encode functions +namespace encode { +namespace can1 { +inline can1_inverter_velocity_t inverter_velocity(const frame::decoded::can1::inverter_velocity_t frame_decoded) { + can1_inverter_velocity_t frame_encoded; + frame_encoded.inverter_1_velocity = can1_inverter_velocity_inverter_1_velocity_encode(frame_decoded.inverter_1_velocity); + frame_encoded.inverter_2_velocity = can1_inverter_velocity_inverter_2_velocity_encode(frame_decoded.inverter_2_velocity); + return frame_encoded; +} + +inline can1_inverter_errors_warnings_t inverter_errors_warnings(const frame::decoded::can1::inverter_errors_warnings_t frame_decoded) { + can1_inverter_errors_warnings_t frame_encoded; + frame_encoded.inverter_1_errors = can1_inverter_errors_warnings_inverter_1_errors_encode(frame_decoded.inverter_1_errors); + frame_encoded.inverter_1_warnings = can1_inverter_errors_warnings_inverter_1_warnings_encode(frame_decoded.inverter_1_warnings); + frame_encoded.inverter_2_errors = can1_inverter_errors_warnings_inverter_2_errors_encode(frame_decoded.inverter_2_errors); + frame_encoded.inverter_2_warnings = can1_inverter_errors_warnings_inverter_2_warnings_encode(frame_decoded.inverter_2_warnings); + return frame_encoded; +} + +inline can1_inverter_torque_actual_cw_t inverter_torque_actual_cw(const frame::decoded::can1::inverter_torque_actual_cw_t frame_decoded) { + can1_inverter_torque_actual_cw_t frame_encoded; + frame_encoded.inverter_1_control_word = can1_inverter_torque_actual_cw_inverter_1_control_word_encode(frame_decoded.inverter_1_control_word); + frame_encoded.inverter_1_torque_actual = can1_inverter_torque_actual_cw_inverter_1_torque_actual_encode(frame_decoded.inverter_1_torque_actual); + frame_encoded.inverter_2_control_word = can1_inverter_torque_actual_cw_inverter_2_control_word_encode(frame_decoded.inverter_2_control_word); + frame_encoded.inverter_2_torque_actual = can1_inverter_torque_actual_cw_inverter_2_torque_actual_encode(frame_decoded.inverter_2_torque_actual); + return frame_encoded; +} + +inline can1_inverter_temperatur_t inverter_temperatur(const frame::decoded::can1::inverter_temperatur_t frame_decoded) { + can1_inverter_temperatur_t frame_encoded; + frame_encoded.inverter_1_temp_inv = can1_inverter_temperatur_inverter_1_temp_inv_encode(frame_decoded.inverter_1_temp_inv); + frame_encoded.inverter_1_temp_mot = can1_inverter_temperatur_inverter_1_temp_mot_encode(frame_decoded.inverter_1_temp_mot); + frame_encoded.inverter_2_temp_inv = can1_inverter_temperatur_inverter_2_temp_inv_encode(frame_decoded.inverter_2_temp_inv); + frame_encoded.inverter_2_temp_mot = can1_inverter_temperatur_inverter_2_temp_mot_encode(frame_decoded.inverter_2_temp_mot); + return frame_encoded; +} + +inline can1_inverter_torque_wanted_t inverter_torque_wanted(const frame::decoded::can1::inverter_torque_wanted_t frame_decoded) { + can1_inverter_torque_wanted_t frame_encoded; + frame_encoded.inverter_1_torque_demanded = can1_inverter_torque_wanted_inverter_1_torque_demanded_encode(frame_decoded.inverter_1_torque_demanded); + frame_encoded.inverter_2_torque_demanded = can1_inverter_torque_wanted_inverter_2_torque_demanded_encode(frame_decoded.inverter_2_torque_demanded); + frame_encoded.inverter_1_torque_desired = can1_inverter_torque_wanted_inverter_1_torque_desired_encode(frame_decoded.inverter_1_torque_desired); + frame_encoded.inverter_2_torque_desired = can1_inverter_torque_wanted_inverter_2_torque_desired_encode(frame_decoded.inverter_2_torque_desired); + return frame_encoded; +} + +inline can1_sdo_telemetrie_rx_node1_t sdo_telemetrie_rx_node1(const frame::decoded::can1::sdo_telemetrie_rx_node1_t frame_decoded) { + can1_sdo_telemetrie_rx_node1_t frame_encoded; + frame_encoded.sdo_command_byte = can1_sdo_telemetrie_rx_node1_sdo_command_byte_encode(frame_decoded.sdo_command_byte); + frame_encoded.sdo_od_index = can1_sdo_telemetrie_rx_node1_sdo_od_index_encode(frame_decoded.sdo_od_index); + frame_encoded.sdo_od_subindex = can1_sdo_telemetrie_rx_node1_sdo_od_subindex_encode(frame_decoded.sdo_od_subindex); + frame_encoded.sdo_data = can1_sdo_telemetrie_rx_node1_sdo_data_encode(frame_decoded.sdo_data); + return frame_encoded; +} + +inline can1_sdo_telemetrie_rx_node2_t sdo_telemetrie_rx_node2(const frame::decoded::can1::sdo_telemetrie_rx_node2_t frame_decoded) { + can1_sdo_telemetrie_rx_node2_t frame_encoded; + frame_encoded.sdo_command_byte = can1_sdo_telemetrie_rx_node2_sdo_command_byte_encode(frame_decoded.sdo_command_byte); + frame_encoded.sdo_od_index = can1_sdo_telemetrie_rx_node2_sdo_od_index_encode(frame_decoded.sdo_od_index); + frame_encoded.sdo_od_subindex = can1_sdo_telemetrie_rx_node2_sdo_od_subindex_encode(frame_decoded.sdo_od_subindex); + frame_encoded.sdo_data = can1_sdo_telemetrie_rx_node2_sdo_data_encode(frame_decoded.sdo_data); + return frame_encoded; +} + +inline can1_sdo_telemetrie_tx_t sdo_telemetrie_tx(const frame::decoded::can1::sdo_telemetrie_tx_t frame_decoded) { + can1_sdo_telemetrie_tx_t frame_encoded; + frame_encoded.sdo_command_byte = can1_sdo_telemetrie_tx_sdo_command_byte_encode(frame_decoded.sdo_command_byte); + frame_encoded.sdo_od_index = can1_sdo_telemetrie_tx_sdo_od_index_encode(frame_decoded.sdo_od_index); + frame_encoded.sdo_od_subindex = can1_sdo_telemetrie_tx_sdo_od_subindex_encode(frame_decoded.sdo_od_subindex); + frame_encoded.sdo_data = can1_sdo_telemetrie_tx_sdo_data_encode(frame_decoded.sdo_data); + return frame_encoded; +} + +inline can1_laptop_sdo_node_t laptop_sdo_node(const frame::decoded::can1::laptop_sdo_node_t frame_decoded) { + can1_laptop_sdo_node_t frame_encoded; + frame_encoded.node_id_sdo = can1_laptop_sdo_node_node_id_sdo_encode(frame_decoded.node_id_sdo); + return frame_encoded; +} + +inline can1_x_sens_long_lat_t x_sens_long_lat(const frame::decoded::can1::x_sens_long_lat_t frame_decoded) { + can1_x_sens_long_lat_t frame_encoded; + frame_encoded.x_sens_latitude = can1_x_sens_long_lat_x_sens_latitude_encode(frame_decoded.x_sens_latitude); + frame_encoded.x_sens_longitude = can1_x_sens_long_lat_x_sens_longitude_encode(frame_decoded.x_sens_longitude); + return frame_encoded; +} + +inline can1_x_sens_rateofturn_t x_sens_rateofturn(const frame::decoded::can1::x_sens_rateofturn_t frame_decoded) { + can1_x_sens_rateofturn_t frame_encoded; + frame_encoded.x_sens_gyr_x = can1_x_sens_rateofturn_x_sens_gyr_x_encode(frame_decoded.x_sens_gyr_x); + frame_encoded.x_sens_gy_y = can1_x_sens_rateofturn_x_sens_gy_y_encode(frame_decoded.x_sens_gy_y); + frame_encoded.x_sens_gy_z = can1_x_sens_rateofturn_x_sens_gy_z_encode(frame_decoded.x_sens_gy_z); + return frame_encoded; +} + +inline can1_x_sens_acceleration_t x_sens_acceleration(const frame::decoded::can1::x_sens_acceleration_t frame_decoded) { + can1_x_sens_acceleration_t frame_encoded; + frame_encoded.x_sens_acc_x = can1_x_sens_acceleration_x_sens_acc_x_encode(frame_decoded.x_sens_acc_x); + frame_encoded.x_sens_acc_y = can1_x_sens_acceleration_x_sens_acc_y_encode(frame_decoded.x_sens_acc_y); + frame_encoded.x_sens_acc_z = can1_x_sens_acceleration_x_sens_acc_z_encode(frame_decoded.x_sens_acc_z); + return frame_encoded; +} + +inline can1_x_sens_velocity_t x_sens_velocity(const frame::decoded::can1::x_sens_velocity_t frame_decoded) { + can1_x_sens_velocity_t frame_encoded; + frame_encoded.x_sens_vel_x = can1_x_sens_velocity_x_sens_vel_x_encode(frame_decoded.x_sens_vel_x); + frame_encoded.x_sens_vel_y = can1_x_sens_velocity_x_sens_vel_y_encode(frame_decoded.x_sens_vel_y); + frame_encoded.x_sens_vel_z = can1_x_sens_velocity_x_sens_vel_z_encode(frame_decoded.x_sens_vel_z); + return frame_encoded; +} + +inline can1_telemetrie_t telemetrie(const frame::decoded::can1::telemetrie_t frame_decoded) { + can1_telemetrie_t frame_encoded; + frame_encoded.ini_check_error_state = can1_telemetrie_ini_check_error_state_encode(frame_decoded.ini_check_error_state); + frame_encoded.powermap = can1_telemetrie_powermap_encode(frame_decoded.powermap); + frame_encoded.apps_ok = can1_telemetrie_apps_ok_encode(frame_decoded.apps_ok); + frame_encoded.brake_ok = can1_telemetrie_brake_ok_encode(frame_decoded.brake_ok); + frame_encoded.allow_torque = can1_telemetrie_allow_torque_encode(frame_decoded.allow_torque); + frame_encoded.asp_ok = can1_telemetrie_asp_ok_encode(frame_decoded.asp_ok); + frame_encoded.pressure_sensor_ok = can1_telemetrie_pressure_sensor_ok_encode(frame_decoded.pressure_sensor_ok); + frame_encoded.torque_vectoring_on = can1_telemetrie_torque_vectoring_on_encode(frame_decoded.torque_vectoring_on); + frame_encoded.reku_on = can1_telemetrie_reku_on_encode(frame_decoded.reku_on); + frame_encoded.traction_control_on = can1_telemetrie_traction_control_on_encode(frame_decoded.traction_control_on); + frame_encoded.ts_deactivate = can1_telemetrie_ts_deactivate_encode(frame_decoded.ts_deactivate); + frame_encoded.torque_limit = can1_telemetrie_torque_limit_encode(frame_decoded.torque_limit); + frame_encoded.power_limit = can1_telemetrie_power_limit_encode(frame_decoded.power_limit); + frame_encoded.torque_limit_dynamisch = can1_telemetrie_torque_limit_dynamisch_encode(frame_decoded.torque_limit_dynamisch); + frame_encoded.torque_ohne_limit_l = can1_telemetrie_torque_ohne_limit_l_encode(frame_decoded.torque_ohne_limit_l); + frame_encoded.torque_ohne_limit_r = can1_telemetrie_torque_ohne_limit_r_encode(frame_decoded.torque_ohne_limit_r); + return frame_encoded; +} + +inline can1_override_powermap_t override_powermap(const frame::decoded::can1::override_powermap_t frame_decoded) { + can1_override_powermap_t frame_encoded; + frame_encoded.laptopp_power_map = can1_override_powermap_laptopp_power_map_encode(frame_decoded.laptopp_power_map); + frame_encoded.laptop_reku = can1_override_powermap_laptop_reku_encode(frame_decoded.laptop_reku); + frame_encoded.laptop_tc = can1_override_powermap_laptop_tc_encode(frame_decoded.laptop_tc); + frame_encoded.laptop_tv = can1_override_powermap_laptop_tv_encode(frame_decoded.laptop_tv); + frame_encoded.laptop_slipref = can1_override_powermap_laptop_slipref_encode(frame_decoded.laptop_slipref); + frame_encoded.laptop_tc_i = can1_override_powermap_laptop_tc_i_encode(frame_decoded.laptop_tc_i); + frame_encoded.laptop_tc_p = can1_override_powermap_laptop_tc_p_encode(frame_decoded.laptop_tc_p); + frame_encoded.laptop_tc_mumax = can1_override_powermap_laptop_tc_mumax_encode(frame_decoded.laptop_tc_mumax); + return frame_encoded; +} + +inline can1_override_laptop_2_t override_laptop_2(const frame::decoded::can1::override_laptop_2_t frame_decoded) { + can1_override_laptop_2_t frame_encoded; + frame_encoded.as_mission = can1_override_laptop_2_as_mission_encode(frame_decoded.as_mission); + frame_encoded.as_state = can1_override_laptop_2_as_state_encode(frame_decoded.as_state); + frame_encoded.manual_input_torque = can1_override_laptop_2_manual_input_torque_encode(frame_decoded.manual_input_torque); + frame_encoded.laptop_powerlimit = can1_override_laptop_2_laptop_powerlimit_encode(frame_decoded.laptop_powerlimit); + frame_encoded.laptop_torque_lim = can1_override_laptop_2_laptop_torque_lim_encode(frame_decoded.laptop_torque_lim); + return frame_encoded; +} + +inline can1_override_epsc_cooling_t override_epsc_cooling(const frame::decoded::can1::override_epsc_cooling_t frame_decoded) { + can1_override_epsc_cooling_t frame_encoded; + frame_encoded.epsc_manual_angle = can1_override_epsc_cooling_epsc_manual_angle_encode(frame_decoded.epsc_manual_angle); + frame_encoded.epsc_mode = can1_override_epsc_cooling_epsc_mode_encode(frame_decoded.epsc_mode); + frame_encoded.ac_cooling_enable = can1_override_epsc_cooling_ac_cooling_enable_encode(frame_decoded.ac_cooling_enable); + frame_encoded.ts_cooling_enable = can1_override_epsc_cooling_ts_cooling_enable_encode(frame_decoded.ts_cooling_enable); + frame_encoded.ac_cooling_pwm = can1_override_epsc_cooling_ac_cooling_pwm_encode(frame_decoded.ac_cooling_pwm); + frame_encoded.ts_cooling_pwm = can1_override_epsc_cooling_ts_cooling_pwm_encode(frame_decoded.ts_cooling_pwm); + return frame_encoded; +} + +inline can1_override_laptop_t override_laptop(const frame::decoded::can1::override_laptop_t frame_decoded) { + can1_override_laptop_t frame_encoded; + frame_encoded.fake_r2_d = can1_override_laptop_fake_r2_d_encode(frame_decoded.fake_r2_d); + frame_encoded.fake_soundbox_emergency = can1_override_laptop_fake_soundbox_emergency_encode(frame_decoded.fake_soundbox_emergency); + frame_encoded.fake_soundbox_r2_d = can1_override_laptop_fake_soundbox_r2_d_encode(frame_decoded.fake_soundbox_r2_d); + frame_encoded.fake_ts_active = can1_override_laptop_fake_ts_active_encode(frame_decoded.fake_ts_active); + frame_encoded.override_apps = can1_override_laptop_override_apps_encode(frame_decoded.override_apps); + frame_encoded.override_as_mission = can1_override_laptop_override_as_mission_encode(frame_decoded.override_as_mission); + frame_encoded.override_as_state = can1_override_laptop_override_as_state_encode(frame_decoded.override_as_state); + frame_encoded.override_epsc_mode = can1_override_laptop_override_epsc_mode_encode(frame_decoded.override_epsc_mode); + frame_encoded.override_pdu_ac_cooling_enable = can1_override_laptop_override_pdu_ac_cooling_enable_encode(frame_decoded.override_pdu_ac_cooling_enable); + frame_encoded.override_pdu_acu_enable = can1_override_laptop_override_pdu_acu_enable_encode(frame_decoded.override_pdu_acu_enable); + frame_encoded.override_pdu_drs_enable = can1_override_laptop_override_pdu_drs_enable_encode(frame_decoded.override_pdu_drs_enable); + frame_encoded.override_pdu_epsc_enable = can1_override_laptop_override_pdu_epsc_enable_encode(frame_decoded.override_pdu_epsc_enable); + frame_encoded.override_pdu_heartbeat = can1_override_laptop_override_pdu_heartbeat_encode(frame_decoded.override_pdu_heartbeat); + frame_encoded.override_pdu_lidar_enable = can1_override_laptop_override_pdu_lidar_enable_encode(frame_decoded.override_pdu_lidar_enable); + frame_encoded.override_pdu_pn_v1_enable = can1_override_laptop_override_pdu_pn_v1_enable_encode(frame_decoded.override_pdu_pn_v1_enable); + frame_encoded.override_pdu_pn_v2_enable = can1_override_laptop_override_pdu_pn_v2_enable_encode(frame_decoded.override_pdu_pn_v2_enable); + frame_encoded.override_pdu_ts_cooling_enable = can1_override_laptop_override_pdu_ts_cooling_enable_encode(frame_decoded.override_pdu_ts_cooling_enable); + frame_encoded.override_power_map = can1_override_laptop_override_power_map_encode(frame_decoded.override_power_map); + frame_encoded.override_tc_parameter = can1_override_laptop_override_tc_parameter_encode(frame_decoded.override_tc_parameter); + frame_encoded.override_torque_input = can1_override_laptop_override_torque_input_encode(frame_decoded.override_torque_input); + return frame_encoded; +} + +inline can1_apps_override_t apps_override(const frame::decoded::can1::apps_override_t frame_decoded) { + can1_apps_override_t frame_encoded; + frame_encoded.apps_0_max = can1_apps_override_apps_0_max_encode(frame_decoded.apps_0_max); + frame_encoded.apps_0_min = can1_apps_override_apps_0_min_encode(frame_decoded.apps_0_min); + frame_encoded.apps_1_max = can1_apps_override_apps_1_max_encode(frame_decoded.apps_1_max); + frame_encoded.apps_1_min = can1_apps_override_apps_1_min_encode(frame_decoded.apps_1_min); + return frame_encoded; +} + +inline can1_ftcu_damper_t ftcu_damper(const frame::decoded::can1::ftcu_damper_t frame_decoded) { + can1_ftcu_damper_t frame_encoded; + frame_encoded.ftcu_damper_fl = can1_ftcu_damper_ftcu_damper_fl_encode(frame_decoded.ftcu_damper_fl); + frame_encoded.ftcu_damper_fr = can1_ftcu_damper_ftcu_damper_fr_encode(frame_decoded.ftcu_damper_fr); + frame_encoded.ftcu_damper_rl = can1_ftcu_damper_ftcu_damper_rl_encode(frame_decoded.ftcu_damper_rl); + frame_encoded.ftcu_damper_rr = can1_ftcu_damper_ftcu_damper_rr_encode(frame_decoded.ftcu_damper_rr); + return frame_encoded; +} + +inline can1_ftcu_param_confirm_t ftcu_param_confirm(const frame::decoded::can1::ftcu_param_confirm_t frame_decoded) { + can1_ftcu_param_confirm_t frame_encoded; + frame_encoded.ftcu_param_confirm = can1_ftcu_param_confirm_ftcu_param_confirm_encode(frame_decoded.ftcu_param_confirm); + return frame_encoded; +} + +inline can1_sensornode_f_10_hz_t sensornode_f_10_hz(const frame::decoded::can1::sensornode_f_10_hz_t frame_decoded) { + can1_sensornode_f_10_hz_t frame_encoded; + frame_encoded.ls_l = can1_sensornode_f_10_hz_ls_l_encode(frame_decoded.ls_l); + frame_encoded.ls_r = can1_sensornode_f_10_hz_ls_r_encode(frame_decoded.ls_r); + frame_encoded.sdc_m_pre_bots = can1_sensornode_f_10_hz_sdc_m_pre_bots_encode(frame_decoded.sdc_m_pre_bots); + frame_encoded.sdc_m_post_ins = can1_sensornode_f_10_hz_sdc_m_post_ins_encode(frame_decoded.sdc_m_post_ins); + frame_encoded.sdc_m_post_bspd = can1_sensornode_f_10_hz_sdc_m_post_bspd_encode(frame_decoded.sdc_m_post_bspd); + frame_encoded.bdts_fl = can1_sensornode_f_10_hz_bdts_fl_encode(frame_decoded.bdts_fl); + frame_encoded.bdts_fr = can1_sensornode_f_10_hz_bdts_fr_encode(frame_decoded.bdts_fr); + return frame_encoded; +} + +inline can1_sensornode_f_100_hz_1_t sensornode_f_100_hz_1(const frame::decoded::can1::sensornode_f_100_hz_1_t frame_decoded) { + can1_sensornode_f_100_hz_1_t frame_encoded; + frame_encoded.apps_1 = can1_sensornode_f_100_hz_1_apps_1_encode(frame_decoded.apps_1); + frame_encoded.apps_2 = can1_sensornode_f_100_hz_1_apps_2_encode(frame_decoded.apps_2); + frame_encoded.bp_f = can1_sensornode_f_100_hz_1_bp_f_encode(frame_decoded.bp_f); + frame_encoded.sas = can1_sensornode_f_100_hz_1_sas_encode(frame_decoded.sas); + frame_encoded.wss_fl = can1_sensornode_f_100_hz_1_wss_fl_encode(frame_decoded.wss_fl); + frame_encoded.wss_fr = can1_sensornode_f_100_hz_1_wss_fr_encode(frame_decoded.wss_fr); + return frame_encoded; +} + +inline can1_sensornode_f_100_hz_2_t sensornode_f_100_hz_2(const frame::decoded::can1::sensornode_f_100_hz_2_t frame_decoded) { + can1_sensornode_f_100_hz_2_t frame_encoded; + frame_encoded.ds_fl = can1_sensornode_f_100_hz_2_ds_fl_encode(frame_decoded.ds_fl); + frame_encoded.ds_fr = can1_sensornode_f_100_hz_2_ds_fr_encode(frame_decoded.ds_fr); + return frame_encoded; +} + +inline can1_sensornode_f_1k_hz_t sensornode_f_1k_hz(const frame::decoded::can1::sensornode_f_1k_hz_t frame_decoded) { + can1_sensornode_f_1k_hz_t frame_encoded; + frame_encoded.sls_fl = can1_sensornode_f_1k_hz_sls_fl_encode(frame_decoded.sls_fl); + frame_encoded.sls_fr = can1_sensornode_f_1k_hz_sls_fr_encode(frame_decoded.sls_fr); + return frame_encoded; +} + +inline can1_sensornode_r_10_hz_t sensornode_r_10_hz(const frame::decoded::can1::sensornode_r_10_hz_t frame_decoded) { + can1_sensornode_r_10_hz_t frame_encoded; + frame_encoded.ext_ts_on = can1_sensornode_r_10_hz_ext_ts_on_encode(frame_decoded.ext_ts_on); + frame_encoded.sdc_m_pre_tsms = can1_sensornode_r_10_hz_sdc_m_pre_tsms_encode(frame_decoded.sdc_m_pre_tsms); + frame_encoded.sdc_m_post_tsms = can1_sensornode_r_10_hz_sdc_m_post_tsms_encode(frame_decoded.sdc_m_post_tsms); + frame_encoded.bdts_rl = can1_sensornode_r_10_hz_bdts_rl_encode(frame_decoded.bdts_rl); + frame_encoded.bdts_rr = can1_sensornode_r_10_hz_bdts_rr_encode(frame_decoded.bdts_rr); + frame_encoded.wt_bat = can1_sensornode_r_10_hz_wt_bat_encode(frame_decoded.wt_bat); + frame_encoded.wt_dt = can1_sensornode_r_10_hz_wt_dt_encode(frame_decoded.wt_dt); + frame_encoded.wp_bat = can1_sensornode_r_10_hz_wp_bat_encode(frame_decoded.wp_bat); + frame_encoded.wp_dt = can1_sensornode_r_10_hz_wp_dt_encode(frame_decoded.wp_dt); + return frame_encoded; +} + +inline can1_sensornode_r_100_hz_t sensornode_r_100_hz(const frame::decoded::can1::sensornode_r_100_hz_t frame_decoded) { + can1_sensornode_r_100_hz_t frame_encoded; + frame_encoded.ebs_aps_1 = can1_sensornode_r_100_hz_ebs_aps_1_encode(frame_decoded.ebs_aps_1); + frame_encoded.ebs_aps_2 = can1_sensornode_r_100_hz_ebs_aps_2_encode(frame_decoded.ebs_aps_2); + frame_encoded.bp_r = can1_sensornode_r_100_hz_bp_r_encode(frame_decoded.bp_r); + frame_encoded.wss_rl = can1_sensornode_r_100_hz_wss_rl_encode(frame_decoded.wss_rl); + frame_encoded.wss_rr = can1_sensornode_r_100_hz_wss_rr_encode(frame_decoded.wss_rr); + frame_encoded.ds_rl = can1_sensornode_r_100_hz_ds_rl_encode(frame_decoded.ds_rl); + frame_encoded.ds_rr = can1_sensornode_r_100_hz_ds_rr_encode(frame_decoded.ds_rr); + return frame_encoded; +} + +inline can1_sensornode_r_1k_hz_t sensornode_r_1k_hz(const frame::decoded::can1::sensornode_r_1k_hz_t frame_decoded) { + can1_sensornode_r_1k_hz_t frame_encoded; + frame_encoded.sls_rl = can1_sensornode_r_1k_hz_sls_rl_encode(frame_decoded.sls_rl); + frame_encoded.sls_rr = can1_sensornode_r_1k_hz_sls_rr_encode(frame_decoded.sls_rr); + return frame_encoded; +} + +inline can1_pwm_duty_cycle_t pwm_duty_cycle(const frame::decoded::can1::pwm_duty_cycle_t frame_decoded) { + can1_pwm_duty_cycle_t frame_encoded; + frame_encoded.dc_drs = can1_pwm_duty_cycle_dc_drs_encode(frame_decoded.dc_drs); + frame_encoded.dc_assi_y = can1_pwm_duty_cycle_dc_assi_y_encode(frame_decoded.dc_assi_y); + frame_encoded.dc_assi_b = can1_pwm_duty_cycle_dc_assi_b_encode(frame_decoded.dc_assi_b); + frame_encoded.dc_bl = can1_pwm_duty_cycle_dc_bl_encode(frame_decoded.dc_bl); + frame_encoded.dc_fans_dt = can1_pwm_duty_cycle_dc_fans_dt_encode(frame_decoded.dc_fans_dt); + frame_encoded.dc_fans_bat = can1_pwm_duty_cycle_dc_fans_bat_encode(frame_decoded.dc_fans_bat); + frame_encoded.dc_sbx = can1_pwm_duty_cycle_dc_sbx_encode(frame_decoded.dc_sbx); + return frame_encoded; +} + +inline can1_pwm_config_t pwm_config(const frame::decoded::can1::pwm_config_t frame_decoded) { + can1_pwm_config_t frame_encoded; + frame_encoded.freq_pwm1_drs_lighting = can1_pwm_config_freq_pwm1_drs_lighting_encode(frame_decoded.freq_pwm1_drs_lighting); + frame_encoded.freq_pwm3_fans = can1_pwm_config_freq_pwm3_fans_encode(frame_decoded.freq_pwm3_fans); + frame_encoded.freq_pwm2_sbx = can1_pwm_config_freq_pwm2_sbx_encode(frame_decoded.freq_pwm2_sbx); + return frame_encoded; +} + +inline can1_dashboard_in_t dashboard_in(const frame::decoded::can1::dashboard_in_t frame_decoded) { + can1_dashboard_in_t frame_encoded; + frame_encoded.dashboard_r2_d_button = can1_dashboard_in_dashboard_r2_d_button_encode(frame_decoded.dashboard_r2_d_button); + frame_encoded.dashboard_ts_activate_button = can1_dashboard_in_dashboard_ts_activate_button_encode(frame_decoded.dashboard_ts_activate_button); + frame_encoded.dashboard_race_key = can1_dashboard_in_dashboard_race_key_encode(frame_decoded.dashboard_race_key); + frame_encoded.dashboard_sdc_in = can1_dashboard_in_dashboard_sdc_in_encode(frame_decoded.dashboard_sdc_in); + frame_encoded.dashboard_sdc_out = can1_dashboard_in_dashboard_sdc_out_encode(frame_decoded.dashboard_sdc_out); + return frame_encoded; +} + +inline can1_ams_slave1_status_t ams_slave1_status(const frame::decoded::can1::ams_slave1_status_t frame_decoded) { + can1_ams_slave1_status_t frame_encoded; + frame_encoded.ams_slave_status_error = can1_ams_slave1_status_ams_slave_status_error_encode(frame_decoded.ams_slave_status_error); + frame_encoded.ams_slave_status_id = can1_ams_slave1_status_ams_slave_status_id_encode(frame_decoded.ams_slave_status_id); + frame_encoded.ams_slave_status_temp_sensor = can1_ams_slave1_status_ams_slave_status_temp_sensor_encode(frame_decoded.ams_slave_status_temp_sensor); + frame_encoded.ams_slave_status_min_cell_volt = can1_ams_slave1_status_ams_slave_status_min_cell_volt_encode(frame_decoded.ams_slave_status_min_cell_volt); + frame_encoded.ams_slave_status_max_cell_volt = can1_ams_slave1_status_ams_slave_status_max_cell_volt_encode(frame_decoded.ams_slave_status_max_cell_volt); + frame_encoded.ams_slave_status_max_temp = can1_ams_slave1_status_ams_slave_status_max_temp_encode(frame_decoded.ams_slave_status_max_temp); + return frame_encoded; +} + +inline can1_ams_slave2_log0_t ams_slave2_log0(const frame::decoded::can1::ams_slave2_log0_t frame_decoded) { + can1_ams_slave2_log0_t frame_encoded; + frame_encoded.ams_slave_id_v0 = can1_ams_slave2_log0_ams_slave_id_v0_encode(frame_decoded.ams_slave_id_v0); + frame_encoded.ams_slave_id_v1 = can1_ams_slave2_log0_ams_slave_id_v1_encode(frame_decoded.ams_slave_id_v1); + frame_encoded.ams_slave_id_v2 = can1_ams_slave2_log0_ams_slave_id_v2_encode(frame_decoded.ams_slave_id_v2); + frame_encoded.ams_slave_id_v3 = can1_ams_slave2_log0_ams_slave_id_v3_encode(frame_decoded.ams_slave_id_v3); + return frame_encoded; +} + +inline can1_ams_slave2_log1_t ams_slave2_log1(const frame::decoded::can1::ams_slave2_log1_t frame_decoded) { + can1_ams_slave2_log1_t frame_encoded; + frame_encoded.ams_slave_id_v4 = can1_ams_slave2_log1_ams_slave_id_v4_encode(frame_decoded.ams_slave_id_v4); + frame_encoded.ams_slave_id_v5 = can1_ams_slave2_log1_ams_slave_id_v5_encode(frame_decoded.ams_slave_id_v5); + frame_encoded.ams_slave_id_v6 = can1_ams_slave2_log1_ams_slave_id_v6_encode(frame_decoded.ams_slave_id_v6); + frame_encoded.ams_slave_id_v7 = can1_ams_slave2_log1_ams_slave_id_v7_encode(frame_decoded.ams_slave_id_v7); + return frame_encoded; +} + +inline can1_ams_slave2_log2_t ams_slave2_log2(const frame::decoded::can1::ams_slave2_log2_t frame_decoded) { + can1_ams_slave2_log2_t frame_encoded; + frame_encoded.ams_slave_id_v8 = can1_ams_slave2_log2_ams_slave_id_v8_encode(frame_decoded.ams_slave_id_v8); + frame_encoded.ams_slave_id_v9 = can1_ams_slave2_log2_ams_slave_id_v9_encode(frame_decoded.ams_slave_id_v9); + frame_encoded.ams_slave_id_v10 = can1_ams_slave2_log2_ams_slave_id_v10_encode(frame_decoded.ams_slave_id_v10); + frame_encoded.ams_slave_id_v11 = can1_ams_slave2_log2_ams_slave_id_v11_encode(frame_decoded.ams_slave_id_v11); + return frame_encoded; +} + +inline can1_ams_slave2_log3_t ams_slave2_log3(const frame::decoded::can1::ams_slave2_log3_t frame_decoded) { + can1_ams_slave2_log3_t frame_encoded; + frame_encoded.ams_slave_id_v12 = can1_ams_slave2_log3_ams_slave_id_v12_encode(frame_decoded.ams_slave_id_v12); + frame_encoded.ams_slave_id_v13 = can1_ams_slave2_log3_ams_slave_id_v13_encode(frame_decoded.ams_slave_id_v13); + frame_encoded.ams_slave_id_v14 = can1_ams_slave2_log3_ams_slave_id_v14_encode(frame_decoded.ams_slave_id_v14); + frame_encoded.ams_slave_id_v15 = can1_ams_slave2_log3_ams_slave_id_v15_encode(frame_decoded.ams_slave_id_v15); + return frame_encoded; +} + +inline can1_ams_slave2_log4_t ams_slave2_log4(const frame::decoded::can1::ams_slave2_log4_t frame_decoded) { + can1_ams_slave2_log4_t frame_encoded; + frame_encoded.ams_slave_id_failed_sensors = can1_ams_slave2_log4_ams_slave_id_failed_sensors_encode(frame_decoded.ams_slave_id_failed_sensors); + return frame_encoded; +} + +inline can1_ams_slave2_log5_t ams_slave2_log5(const frame::decoded::can1::ams_slave2_log5_t frame_decoded) { + can1_ams_slave2_log5_t frame_encoded; + frame_encoded.ams_slave_id_t0 = can1_ams_slave2_log5_ams_slave_id_t0_encode(frame_decoded.ams_slave_id_t0); + frame_encoded.ams_slave_id_t1 = can1_ams_slave2_log5_ams_slave_id_t1_encode(frame_decoded.ams_slave_id_t1); + frame_encoded.ams_slave_id_t2 = can1_ams_slave2_log5_ams_slave_id_t2_encode(frame_decoded.ams_slave_id_t2); + frame_encoded.ams_slave_id_t3 = can1_ams_slave2_log5_ams_slave_id_t3_encode(frame_decoded.ams_slave_id_t3); + frame_encoded.ams_slave_id_t4 = can1_ams_slave2_log5_ams_slave_id_t4_encode(frame_decoded.ams_slave_id_t4); + frame_encoded.ams_slave_id_t5 = can1_ams_slave2_log5_ams_slave_id_t5_encode(frame_decoded.ams_slave_id_t5); + frame_encoded.ams_slave_id_t6 = can1_ams_slave2_log5_ams_slave_id_t6_encode(frame_decoded.ams_slave_id_t6); + frame_encoded.ams_slave_id_t7 = can1_ams_slave2_log5_ams_slave_id_t7_encode(frame_decoded.ams_slave_id_t7); + return frame_encoded; +} + +inline can1_ams_slave5_log6_t ams_slave5_log6(const frame::decoded::can1::ams_slave5_log6_t frame_decoded) { + can1_ams_slave5_log6_t frame_encoded; + frame_encoded.ams_slave_id_t8 = can1_ams_slave5_log6_ams_slave_id_t8_encode(frame_decoded.ams_slave_id_t8); + frame_encoded.ams_slave_id_t9 = can1_ams_slave5_log6_ams_slave_id_t9_encode(frame_decoded.ams_slave_id_t9); + return frame_encoded; +} + +inline can1_ams_slave4_log6_t ams_slave4_log6(const frame::decoded::can1::ams_slave4_log6_t frame_decoded) { + can1_ams_slave4_log6_t frame_encoded; + frame_encoded.ams_slave_id_t8 = can1_ams_slave4_log6_ams_slave_id_t8_encode(frame_decoded.ams_slave_id_t8); + frame_encoded.ams_slave_id_t9 = can1_ams_slave4_log6_ams_slave_id_t9_encode(frame_decoded.ams_slave_id_t9); + return frame_encoded; +} + +inline can1_ams_slave3_log6_t ams_slave3_log6(const frame::decoded::can1::ams_slave3_log6_t frame_decoded) { + can1_ams_slave3_log6_t frame_encoded; + frame_encoded.ams_slave_id_t8 = can1_ams_slave3_log6_ams_slave_id_t8_encode(frame_decoded.ams_slave_id_t8); + frame_encoded.ams_slave_id_t9 = can1_ams_slave3_log6_ams_slave_id_t9_encode(frame_decoded.ams_slave_id_t9); + return frame_encoded; +} + +inline can1_ams_slave2_log6_t ams_slave2_log6(const frame::decoded::can1::ams_slave2_log6_t frame_decoded) { + can1_ams_slave2_log6_t frame_encoded; + frame_encoded.ams_slave_id_t8 = can1_ams_slave2_log6_ams_slave_id_t8_encode(frame_decoded.ams_slave_id_t8); + frame_encoded.ams_slave_id_t9 = can1_ams_slave2_log6_ams_slave_id_t9_encode(frame_decoded.ams_slave_id_t9); + return frame_encoded; +} + +inline can1_ams_slave1_log6_t ams_slave1_log6(const frame::decoded::can1::ams_slave1_log6_t frame_decoded) { + can1_ams_slave1_log6_t frame_encoded; + frame_encoded.ams_slave_id_t8 = can1_ams_slave1_log6_ams_slave_id_t8_encode(frame_decoded.ams_slave_id_t8); + frame_encoded.ams_slave_id_t9 = can1_ams_slave1_log6_ams_slave_id_t9_encode(frame_decoded.ams_slave_id_t9); + return frame_encoded; +} + +inline can1_ams_slave5_log5_t ams_slave5_log5(const frame::decoded::can1::ams_slave5_log5_t frame_decoded) { + can1_ams_slave5_log5_t frame_encoded; + frame_encoded.ams_slave_id_t0 = can1_ams_slave5_log5_ams_slave_id_t0_encode(frame_decoded.ams_slave_id_t0); + frame_encoded.ams_slave_id_t1 = can1_ams_slave5_log5_ams_slave_id_t1_encode(frame_decoded.ams_slave_id_t1); + frame_encoded.ams_slave_id_t2 = can1_ams_slave5_log5_ams_slave_id_t2_encode(frame_decoded.ams_slave_id_t2); + frame_encoded.ams_slave_id_t3 = can1_ams_slave5_log5_ams_slave_id_t3_encode(frame_decoded.ams_slave_id_t3); + frame_encoded.ams_slave_id_t4 = can1_ams_slave5_log5_ams_slave_id_t4_encode(frame_decoded.ams_slave_id_t4); + frame_encoded.ams_slave_id_t5 = can1_ams_slave5_log5_ams_slave_id_t5_encode(frame_decoded.ams_slave_id_t5); + frame_encoded.ams_slave_id_t6 = can1_ams_slave5_log5_ams_slave_id_t6_encode(frame_decoded.ams_slave_id_t6); + frame_encoded.ams_slave_id_t7 = can1_ams_slave5_log5_ams_slave_id_t7_encode(frame_decoded.ams_slave_id_t7); + return frame_encoded; +} + +inline can1_ams_slave4_log5_t ams_slave4_log5(const frame::decoded::can1::ams_slave4_log5_t frame_decoded) { + can1_ams_slave4_log5_t frame_encoded; + frame_encoded.ams_slave_id_t0 = can1_ams_slave4_log5_ams_slave_id_t0_encode(frame_decoded.ams_slave_id_t0); + frame_encoded.ams_slave_id_t1 = can1_ams_slave4_log5_ams_slave_id_t1_encode(frame_decoded.ams_slave_id_t1); + frame_encoded.ams_slave_id_t2 = can1_ams_slave4_log5_ams_slave_id_t2_encode(frame_decoded.ams_slave_id_t2); + frame_encoded.ams_slave_id_t3 = can1_ams_slave4_log5_ams_slave_id_t3_encode(frame_decoded.ams_slave_id_t3); + frame_encoded.ams_slave_id_t4 = can1_ams_slave4_log5_ams_slave_id_t4_encode(frame_decoded.ams_slave_id_t4); + frame_encoded.ams_slave_id_t5 = can1_ams_slave4_log5_ams_slave_id_t5_encode(frame_decoded.ams_slave_id_t5); + frame_encoded.ams_slave_id_t6 = can1_ams_slave4_log5_ams_slave_id_t6_encode(frame_decoded.ams_slave_id_t6); + frame_encoded.ams_slave_id_t7 = can1_ams_slave4_log5_ams_slave_id_t7_encode(frame_decoded.ams_slave_id_t7); + return frame_encoded; +} + +inline can1_ams_slave3_log5_t ams_slave3_log5(const frame::decoded::can1::ams_slave3_log5_t frame_decoded) { + can1_ams_slave3_log5_t frame_encoded; + frame_encoded.ams_slave_id_t0 = can1_ams_slave3_log5_ams_slave_id_t0_encode(frame_decoded.ams_slave_id_t0); + frame_encoded.ams_slave_id_t1 = can1_ams_slave3_log5_ams_slave_id_t1_encode(frame_decoded.ams_slave_id_t1); + frame_encoded.ams_slave_id_t2 = can1_ams_slave3_log5_ams_slave_id_t2_encode(frame_decoded.ams_slave_id_t2); + frame_encoded.ams_slave_id_t3 = can1_ams_slave3_log5_ams_slave_id_t3_encode(frame_decoded.ams_slave_id_t3); + frame_encoded.ams_slave_id_t4 = can1_ams_slave3_log5_ams_slave_id_t4_encode(frame_decoded.ams_slave_id_t4); + frame_encoded.ams_slave_id_t5 = can1_ams_slave3_log5_ams_slave_id_t5_encode(frame_decoded.ams_slave_id_t5); + frame_encoded.ams_slave_id_t6 = can1_ams_slave3_log5_ams_slave_id_t6_encode(frame_decoded.ams_slave_id_t6); + frame_encoded.ams_slave_id_t7 = can1_ams_slave3_log5_ams_slave_id_t7_encode(frame_decoded.ams_slave_id_t7); + return frame_encoded; +} + +inline can1_ams_slave1_log5_t ams_slave1_log5(const frame::decoded::can1::ams_slave1_log5_t frame_decoded) { + can1_ams_slave1_log5_t frame_encoded; + frame_encoded.ams_slave_id_t0 = can1_ams_slave1_log5_ams_slave_id_t0_encode(frame_decoded.ams_slave_id_t0); + frame_encoded.ams_slave_id_t1 = can1_ams_slave1_log5_ams_slave_id_t1_encode(frame_decoded.ams_slave_id_t1); + frame_encoded.ams_slave_id_t2 = can1_ams_slave1_log5_ams_slave_id_t2_encode(frame_decoded.ams_slave_id_t2); + frame_encoded.ams_slave_id_t3 = can1_ams_slave1_log5_ams_slave_id_t3_encode(frame_decoded.ams_slave_id_t3); + frame_encoded.ams_slave_id_t4 = can1_ams_slave1_log5_ams_slave_id_t4_encode(frame_decoded.ams_slave_id_t4); + frame_encoded.ams_slave_id_t5 = can1_ams_slave1_log5_ams_slave_id_t5_encode(frame_decoded.ams_slave_id_t5); + frame_encoded.ams_slave_id_t6 = can1_ams_slave1_log5_ams_slave_id_t6_encode(frame_decoded.ams_slave_id_t6); + frame_encoded.ams_slave_id_t7 = can1_ams_slave1_log5_ams_slave_id_t7_encode(frame_decoded.ams_slave_id_t7); + return frame_encoded; +} + +inline can1_ams_slave5_log4_t ams_slave5_log4(const frame::decoded::can1::ams_slave5_log4_t frame_decoded) { + can1_ams_slave5_log4_t frame_encoded; + frame_encoded.ams_slave_id_failed_sensors = can1_ams_slave5_log4_ams_slave_id_failed_sensors_encode(frame_decoded.ams_slave_id_failed_sensors); + return frame_encoded; +} + +inline can1_ams_slave4_log4_t ams_slave4_log4(const frame::decoded::can1::ams_slave4_log4_t frame_decoded) { + can1_ams_slave4_log4_t frame_encoded; + frame_encoded.ams_slave_id_failed_sensors = can1_ams_slave4_log4_ams_slave_id_failed_sensors_encode(frame_decoded.ams_slave_id_failed_sensors); + return frame_encoded; +} + +inline can1_ams_slave3_log4_t ams_slave3_log4(const frame::decoded::can1::ams_slave3_log4_t frame_decoded) { + can1_ams_slave3_log4_t frame_encoded; + frame_encoded.ams_slave_id_failed_sensors = can1_ams_slave3_log4_ams_slave_id_failed_sensors_encode(frame_decoded.ams_slave_id_failed_sensors); + return frame_encoded; +} + +inline can1_ams_slave1_log4_t ams_slave1_log4(const frame::decoded::can1::ams_slave1_log4_t frame_decoded) { + can1_ams_slave1_log4_t frame_encoded; + frame_encoded.ams_slave_id_failed_sensors = can1_ams_slave1_log4_ams_slave_id_failed_sensors_encode(frame_decoded.ams_slave_id_failed_sensors); + return frame_encoded; +} + +inline can1_ams_slave5_log3_t ams_slave5_log3(const frame::decoded::can1::ams_slave5_log3_t frame_decoded) { + can1_ams_slave5_log3_t frame_encoded; + frame_encoded.ams_slave_id_v12 = can1_ams_slave5_log3_ams_slave_id_v12_encode(frame_decoded.ams_slave_id_v12); + frame_encoded.ams_slave_id_v13 = can1_ams_slave5_log3_ams_slave_id_v13_encode(frame_decoded.ams_slave_id_v13); + frame_encoded.ams_slave_id_v14 = can1_ams_slave5_log3_ams_slave_id_v14_encode(frame_decoded.ams_slave_id_v14); + frame_encoded.ams_slave_id_v15 = can1_ams_slave5_log3_ams_slave_id_v15_encode(frame_decoded.ams_slave_id_v15); + return frame_encoded; +} + +inline can1_ams_slave4_log3_t ams_slave4_log3(const frame::decoded::can1::ams_slave4_log3_t frame_decoded) { + can1_ams_slave4_log3_t frame_encoded; + frame_encoded.ams_slave_id_v12 = can1_ams_slave4_log3_ams_slave_id_v12_encode(frame_decoded.ams_slave_id_v12); + frame_encoded.ams_slave_id_v13 = can1_ams_slave4_log3_ams_slave_id_v13_encode(frame_decoded.ams_slave_id_v13); + frame_encoded.ams_slave_id_v14 = can1_ams_slave4_log3_ams_slave_id_v14_encode(frame_decoded.ams_slave_id_v14); + frame_encoded.ams_slave_id_v15 = can1_ams_slave4_log3_ams_slave_id_v15_encode(frame_decoded.ams_slave_id_v15); + return frame_encoded; +} + +inline can1_ams_slave3_log3_t ams_slave3_log3(const frame::decoded::can1::ams_slave3_log3_t frame_decoded) { + can1_ams_slave3_log3_t frame_encoded; + frame_encoded.ams_slave_id_v12 = can1_ams_slave3_log3_ams_slave_id_v12_encode(frame_decoded.ams_slave_id_v12); + frame_encoded.ams_slave_id_v13 = can1_ams_slave3_log3_ams_slave_id_v13_encode(frame_decoded.ams_slave_id_v13); + frame_encoded.ams_slave_id_v14 = can1_ams_slave3_log3_ams_slave_id_v14_encode(frame_decoded.ams_slave_id_v14); + frame_encoded.ams_slave_id_v15 = can1_ams_slave3_log3_ams_slave_id_v15_encode(frame_decoded.ams_slave_id_v15); + return frame_encoded; +} + +inline can1_ams_slave1_log3_t ams_slave1_log3(const frame::decoded::can1::ams_slave1_log3_t frame_decoded) { + can1_ams_slave1_log3_t frame_encoded; + frame_encoded.ams_slave_id_v12 = can1_ams_slave1_log3_ams_slave_id_v12_encode(frame_decoded.ams_slave_id_v12); + frame_encoded.ams_slave_id_v13 = can1_ams_slave1_log3_ams_slave_id_v13_encode(frame_decoded.ams_slave_id_v13); + frame_encoded.ams_slave_id_v14 = can1_ams_slave1_log3_ams_slave_id_v14_encode(frame_decoded.ams_slave_id_v14); + frame_encoded.ams_slave_id_v15 = can1_ams_slave1_log3_ams_slave_id_v15_encode(frame_decoded.ams_slave_id_v15); + return frame_encoded; +} + +inline can1_ams_slave5_log2_t ams_slave5_log2(const frame::decoded::can1::ams_slave5_log2_t frame_decoded) { + can1_ams_slave5_log2_t frame_encoded; + frame_encoded.ams_slave_id_v8 = can1_ams_slave5_log2_ams_slave_id_v8_encode(frame_decoded.ams_slave_id_v8); + frame_encoded.ams_slave_id_v9 = can1_ams_slave5_log2_ams_slave_id_v9_encode(frame_decoded.ams_slave_id_v9); + frame_encoded.ams_slave_id_v10 = can1_ams_slave5_log2_ams_slave_id_v10_encode(frame_decoded.ams_slave_id_v10); + frame_encoded.ams_slave_id_v11 = can1_ams_slave5_log2_ams_slave_id_v11_encode(frame_decoded.ams_slave_id_v11); + return frame_encoded; +} + +inline can1_ams_slave4_log2_t ams_slave4_log2(const frame::decoded::can1::ams_slave4_log2_t frame_decoded) { + can1_ams_slave4_log2_t frame_encoded; + frame_encoded.ams_slave_id_v8 = can1_ams_slave4_log2_ams_slave_id_v8_encode(frame_decoded.ams_slave_id_v8); + frame_encoded.ams_slave_id_v9 = can1_ams_slave4_log2_ams_slave_id_v9_encode(frame_decoded.ams_slave_id_v9); + frame_encoded.ams_slave_id_v10 = can1_ams_slave4_log2_ams_slave_id_v10_encode(frame_decoded.ams_slave_id_v10); + frame_encoded.ams_slave_id_v11 = can1_ams_slave4_log2_ams_slave_id_v11_encode(frame_decoded.ams_slave_id_v11); + return frame_encoded; +} + +inline can1_ams_slave3_log2_t ams_slave3_log2(const frame::decoded::can1::ams_slave3_log2_t frame_decoded) { + can1_ams_slave3_log2_t frame_encoded; + frame_encoded.ams_slave_id_v8 = can1_ams_slave3_log2_ams_slave_id_v8_encode(frame_decoded.ams_slave_id_v8); + frame_encoded.ams_slave_id_v9 = can1_ams_slave3_log2_ams_slave_id_v9_encode(frame_decoded.ams_slave_id_v9); + frame_encoded.ams_slave_id_v10 = can1_ams_slave3_log2_ams_slave_id_v10_encode(frame_decoded.ams_slave_id_v10); + frame_encoded.ams_slave_id_v11 = can1_ams_slave3_log2_ams_slave_id_v11_encode(frame_decoded.ams_slave_id_v11); + return frame_encoded; +} + +inline can1_ams_slave1_log2_t ams_slave1_log2(const frame::decoded::can1::ams_slave1_log2_t frame_decoded) { + can1_ams_slave1_log2_t frame_encoded; + frame_encoded.ams_slave_id_v8 = can1_ams_slave1_log2_ams_slave_id_v8_encode(frame_decoded.ams_slave_id_v8); + frame_encoded.ams_slave_id_v9 = can1_ams_slave1_log2_ams_slave_id_v9_encode(frame_decoded.ams_slave_id_v9); + frame_encoded.ams_slave_id_v10 = can1_ams_slave1_log2_ams_slave_id_v10_encode(frame_decoded.ams_slave_id_v10); + frame_encoded.ams_slave_id_v11 = can1_ams_slave1_log2_ams_slave_id_v11_encode(frame_decoded.ams_slave_id_v11); + return frame_encoded; +} + +inline can1_ams_slave5_log1_t ams_slave5_log1(const frame::decoded::can1::ams_slave5_log1_t frame_decoded) { + can1_ams_slave5_log1_t frame_encoded; + frame_encoded.ams_slave_id_v4 = can1_ams_slave5_log1_ams_slave_id_v4_encode(frame_decoded.ams_slave_id_v4); + frame_encoded.ams_slave_id_v5 = can1_ams_slave5_log1_ams_slave_id_v5_encode(frame_decoded.ams_slave_id_v5); + frame_encoded.ams_slave_id_v6 = can1_ams_slave5_log1_ams_slave_id_v6_encode(frame_decoded.ams_slave_id_v6); + frame_encoded.ams_slave_id_v7 = can1_ams_slave5_log1_ams_slave_id_v7_encode(frame_decoded.ams_slave_id_v7); + return frame_encoded; +} + +inline can1_ams_slave4_log1_t ams_slave4_log1(const frame::decoded::can1::ams_slave4_log1_t frame_decoded) { + can1_ams_slave4_log1_t frame_encoded; + frame_encoded.ams_slave_id_v4 = can1_ams_slave4_log1_ams_slave_id_v4_encode(frame_decoded.ams_slave_id_v4); + frame_encoded.ams_slave_id_v5 = can1_ams_slave4_log1_ams_slave_id_v5_encode(frame_decoded.ams_slave_id_v5); + frame_encoded.ams_slave_id_v6 = can1_ams_slave4_log1_ams_slave_id_v6_encode(frame_decoded.ams_slave_id_v6); + frame_encoded.ams_slave_id_v7 = can1_ams_slave4_log1_ams_slave_id_v7_encode(frame_decoded.ams_slave_id_v7); + return frame_encoded; +} + +inline can1_ams_slave3_log1_t ams_slave3_log1(const frame::decoded::can1::ams_slave3_log1_t frame_decoded) { + can1_ams_slave3_log1_t frame_encoded; + frame_encoded.ams_slave_id_v4 = can1_ams_slave3_log1_ams_slave_id_v4_encode(frame_decoded.ams_slave_id_v4); + frame_encoded.ams_slave_id_v5 = can1_ams_slave3_log1_ams_slave_id_v5_encode(frame_decoded.ams_slave_id_v5); + frame_encoded.ams_slave_id_v6 = can1_ams_slave3_log1_ams_slave_id_v6_encode(frame_decoded.ams_slave_id_v6); + frame_encoded.ams_slave_id_v7 = can1_ams_slave3_log1_ams_slave_id_v7_encode(frame_decoded.ams_slave_id_v7); + return frame_encoded; +} + +inline can1_ams_slave1_log1_t ams_slave1_log1(const frame::decoded::can1::ams_slave1_log1_t frame_decoded) { + can1_ams_slave1_log1_t frame_encoded; + frame_encoded.ams_slave_id_v4 = can1_ams_slave1_log1_ams_slave_id_v4_encode(frame_decoded.ams_slave_id_v4); + frame_encoded.ams_slave_id_v5 = can1_ams_slave1_log1_ams_slave_id_v5_encode(frame_decoded.ams_slave_id_v5); + frame_encoded.ams_slave_id_v6 = can1_ams_slave1_log1_ams_slave_id_v6_encode(frame_decoded.ams_slave_id_v6); + frame_encoded.ams_slave_id_v7 = can1_ams_slave1_log1_ams_slave_id_v7_encode(frame_decoded.ams_slave_id_v7); + return frame_encoded; +} + +inline can1_ams_slave5_log0_t ams_slave5_log0(const frame::decoded::can1::ams_slave5_log0_t frame_decoded) { + can1_ams_slave5_log0_t frame_encoded; + frame_encoded.ams_slave_id_v0 = can1_ams_slave5_log0_ams_slave_id_v0_encode(frame_decoded.ams_slave_id_v0); + frame_encoded.ams_slave_id_v1 = can1_ams_slave5_log0_ams_slave_id_v1_encode(frame_decoded.ams_slave_id_v1); + frame_encoded.ams_slave_id_v2 = can1_ams_slave5_log0_ams_slave_id_v2_encode(frame_decoded.ams_slave_id_v2); + frame_encoded.ams_slave_id_v3 = can1_ams_slave5_log0_ams_slave_id_v3_encode(frame_decoded.ams_slave_id_v3); + return frame_encoded; +} + +inline can1_ams_slave4_log0_t ams_slave4_log0(const frame::decoded::can1::ams_slave4_log0_t frame_decoded) { + can1_ams_slave4_log0_t frame_encoded; + frame_encoded.ams_slave_id_v0 = can1_ams_slave4_log0_ams_slave_id_v0_encode(frame_decoded.ams_slave_id_v0); + frame_encoded.ams_slave_id_v1 = can1_ams_slave4_log0_ams_slave_id_v1_encode(frame_decoded.ams_slave_id_v1); + frame_encoded.ams_slave_id_v2 = can1_ams_slave4_log0_ams_slave_id_v2_encode(frame_decoded.ams_slave_id_v2); + frame_encoded.ams_slave_id_v3 = can1_ams_slave4_log0_ams_slave_id_v3_encode(frame_decoded.ams_slave_id_v3); + return frame_encoded; +} + +inline can1_ams_slave3_log0_t ams_slave3_log0(const frame::decoded::can1::ams_slave3_log0_t frame_decoded) { + can1_ams_slave3_log0_t frame_encoded; + frame_encoded.ams_slave_id_v0 = can1_ams_slave3_log0_ams_slave_id_v0_encode(frame_decoded.ams_slave_id_v0); + frame_encoded.ams_slave_id_v1 = can1_ams_slave3_log0_ams_slave_id_v1_encode(frame_decoded.ams_slave_id_v1); + frame_encoded.ams_slave_id_v2 = can1_ams_slave3_log0_ams_slave_id_v2_encode(frame_decoded.ams_slave_id_v2); + frame_encoded.ams_slave_id_v3 = can1_ams_slave3_log0_ams_slave_id_v3_encode(frame_decoded.ams_slave_id_v3); + return frame_encoded; +} + +inline can1_ams_slave1_log0_t ams_slave1_log0(const frame::decoded::can1::ams_slave1_log0_t frame_decoded) { + can1_ams_slave1_log0_t frame_encoded; + frame_encoded.ams_slave_id_v0 = can1_ams_slave1_log0_ams_slave_id_v0_encode(frame_decoded.ams_slave_id_v0); + frame_encoded.ams_slave_id_v1 = can1_ams_slave1_log0_ams_slave_id_v1_encode(frame_decoded.ams_slave_id_v1); + frame_encoded.ams_slave_id_v2 = can1_ams_slave1_log0_ams_slave_id_v2_encode(frame_decoded.ams_slave_id_v2); + frame_encoded.ams_slave_id_v3 = can1_ams_slave1_log0_ams_slave_id_v3_encode(frame_decoded.ams_slave_id_v3); + return frame_encoded; +} + +inline can1_pdu_heartbeat_t pdu_heartbeat(const frame::decoded::can1::pdu_heartbeat_t frame_decoded) { + can1_pdu_heartbeat_t frame_encoded; + frame_encoded.pdu_heartbeat = can1_pdu_heartbeat_pdu_heartbeat_encode(frame_decoded.pdu_heartbeat); + return frame_encoded; +} + +inline can1_ftcu_pneumatik_t ftcu_pneumatik(const frame::decoded::can1::ftcu_pneumatik_t frame_decoded) { + can1_ftcu_pneumatik_t frame_encoded; + frame_encoded.ftcu_tank_pressure_1 = can1_ftcu_pneumatik_ftcu_tank_pressure_1_encode(frame_decoded.ftcu_tank_pressure_1); + frame_encoded.ftcu_tank_pressure_2 = can1_ftcu_pneumatik_ftcu_tank_pressure_2_encode(frame_decoded.ftcu_tank_pressure_2); + return frame_encoded; +} + +inline can1_acu_tx_commands_t acu_tx_commands(const frame::decoded::can1::acu_tx_commands_t frame_decoded) { + can1_acu_tx_commands_t frame_encoded; + frame_encoded.abx_speed_fl = can1_acu_tx_commands_abx_speed_fl_encode(frame_decoded.abx_speed_fl); + frame_encoded.abx_speed_fr = can1_acu_tx_commands_abx_speed_fr_encode(frame_decoded.abx_speed_fr); + frame_encoded.abx_speed_rl = can1_acu_tx_commands_abx_speed_rl_encode(frame_decoded.abx_speed_rl); + frame_encoded.abx_speed_rr = can1_acu_tx_commands_abx_speed_rr_encode(frame_decoded.abx_speed_rr); + frame_encoded.abx_steering_angle_left = can1_acu_tx_commands_abx_steering_angle_left_encode(frame_decoded.abx_steering_angle_left); + frame_encoded.abx_steering_angle_right = can1_acu_tx_commands_abx_steering_angle_right_encode(frame_decoded.abx_steering_angle_right); + return frame_encoded; +} + +inline can1_acu_rx_commands_t acu_rx_commands(const frame::decoded::can1::acu_rx_commands_t frame_decoded) { + can1_acu_rx_commands_t frame_encoded; + frame_encoded.acu_speed_target_left = can1_acu_rx_commands_acu_speed_target_left_encode(frame_decoded.acu_speed_target_left); + frame_encoded.acu_speed_target_right = can1_acu_rx_commands_acu_speed_target_right_encode(frame_decoded.acu_speed_target_right); + frame_encoded.acu_steering_angle_right = can1_acu_rx_commands_acu_steering_angle_right_encode(frame_decoded.acu_steering_angle_right); + frame_encoded.acu_steering_angle_left = can1_acu_rx_commands_acu_steering_angle_left_encode(frame_decoded.acu_steering_angle_left); + return frame_encoded; +} + +inline can1_acu_rx_t acu_rx(const frame::decoded::can1::acu_rx_t frame_decoded) { + can1_acu_rx_t frame_encoded; + frame_encoded.acu_as_mission_complete = can1_acu_rx_acu_as_mission_complete_encode(frame_decoded.acu_as_mission_complete); + frame_encoded.acu_as_ok = can1_acu_rx_acu_as_ok_encode(frame_decoded.acu_as_ok); + frame_encoded.acu_drs = can1_acu_rx_acu_drs_encode(frame_decoded.acu_drs); + frame_encoded.acu_lap_count = can1_acu_rx_acu_lap_count_encode(frame_decoded.acu_lap_count); + frame_encoded.acu_cones_all = can1_acu_rx_acu_cones_all_encode(frame_decoded.acu_cones_all); + frame_encoded.acu_cones_actual = can1_acu_rx_acu_cones_actual_encode(frame_decoded.acu_cones_actual); + return frame_encoded; +} + +inline can1_ams_slave0_log0_t ams_slave0_log0(const frame::decoded::can1::ams_slave0_log0_t frame_decoded) { + can1_ams_slave0_log0_t frame_encoded; + frame_encoded.ams_slave_id_v0 = can1_ams_slave0_log0_ams_slave_id_v0_encode(frame_decoded.ams_slave_id_v0); + frame_encoded.ams_slave_id_v1 = can1_ams_slave0_log0_ams_slave_id_v1_encode(frame_decoded.ams_slave_id_v1); + frame_encoded.ams_slave_id_v2 = can1_ams_slave0_log0_ams_slave_id_v2_encode(frame_decoded.ams_slave_id_v2); + frame_encoded.ams_slave_id_v3 = can1_ams_slave0_log0_ams_slave_id_v3_encode(frame_decoded.ams_slave_id_v3); + return frame_encoded; +} + +inline can1_ams_slave0_log1_t ams_slave0_log1(const frame::decoded::can1::ams_slave0_log1_t frame_decoded) { + can1_ams_slave0_log1_t frame_encoded; + frame_encoded.ams_slave_id_v4 = can1_ams_slave0_log1_ams_slave_id_v4_encode(frame_decoded.ams_slave_id_v4); + frame_encoded.ams_slave_id_v5 = can1_ams_slave0_log1_ams_slave_id_v5_encode(frame_decoded.ams_slave_id_v5); + frame_encoded.ams_slave_id_v6 = can1_ams_slave0_log1_ams_slave_id_v6_encode(frame_decoded.ams_slave_id_v6); + frame_encoded.ams_slave_id_v7 = can1_ams_slave0_log1_ams_slave_id_v7_encode(frame_decoded.ams_slave_id_v7); + return frame_encoded; +} + +inline can1_ams_slave0_log3_t ams_slave0_log3(const frame::decoded::can1::ams_slave0_log3_t frame_decoded) { + can1_ams_slave0_log3_t frame_encoded; + frame_encoded.ams_slave_id_v12 = can1_ams_slave0_log3_ams_slave_id_v12_encode(frame_decoded.ams_slave_id_v12); + frame_encoded.ams_slave_id_v13 = can1_ams_slave0_log3_ams_slave_id_v13_encode(frame_decoded.ams_slave_id_v13); + frame_encoded.ams_slave_id_v14 = can1_ams_slave0_log3_ams_slave_id_v14_encode(frame_decoded.ams_slave_id_v14); + frame_encoded.ams_slave_id_v15 = can1_ams_slave0_log3_ams_slave_id_v15_encode(frame_decoded.ams_slave_id_v15); + return frame_encoded; +} + +inline can1_ams_slave0_log4_t ams_slave0_log4(const frame::decoded::can1::ams_slave0_log4_t frame_decoded) { + can1_ams_slave0_log4_t frame_encoded; + frame_encoded.ams_slave_id_failed_sensors = can1_ams_slave0_log4_ams_slave_id_failed_sensors_encode(frame_decoded.ams_slave_id_failed_sensors); + return frame_encoded; +} + +inline can1_ams_slave0_log5_t ams_slave0_log5(const frame::decoded::can1::ams_slave0_log5_t frame_decoded) { + can1_ams_slave0_log5_t frame_encoded; + frame_encoded.ams_slave_id_t0 = can1_ams_slave0_log5_ams_slave_id_t0_encode(frame_decoded.ams_slave_id_t0); + frame_encoded.ams_slave_id_t1 = can1_ams_slave0_log5_ams_slave_id_t1_encode(frame_decoded.ams_slave_id_t1); + frame_encoded.ams_slave_id_t2 = can1_ams_slave0_log5_ams_slave_id_t2_encode(frame_decoded.ams_slave_id_t2); + frame_encoded.ams_slave_id_t3 = can1_ams_slave0_log5_ams_slave_id_t3_encode(frame_decoded.ams_slave_id_t3); + frame_encoded.ams_slave_id_t4 = can1_ams_slave0_log5_ams_slave_id_t4_encode(frame_decoded.ams_slave_id_t4); + frame_encoded.ams_slave_id_t5 = can1_ams_slave0_log5_ams_slave_id_t5_encode(frame_decoded.ams_slave_id_t5); + frame_encoded.ams_slave_id_t6 = can1_ams_slave0_log5_ams_slave_id_t6_encode(frame_decoded.ams_slave_id_t6); + frame_encoded.ams_slave_id_t7 = can1_ams_slave0_log5_ams_slave_id_t7_encode(frame_decoded.ams_slave_id_t7); + return frame_encoded; +} + +inline can1_ams_slave0_log6_t ams_slave0_log6(const frame::decoded::can1::ams_slave0_log6_t frame_decoded) { + can1_ams_slave0_log6_t frame_encoded; + frame_encoded.ams_slave_id_t8 = can1_ams_slave0_log6_ams_slave_id_t8_encode(frame_decoded.ams_slave_id_t8); + frame_encoded.ams_slave_id_t9 = can1_ams_slave0_log6_ams_slave_id_t9_encode(frame_decoded.ams_slave_id_t9); + return frame_encoded; +} + +inline can1_acu_tx_t acu_tx(const frame::decoded::can1::acu_tx_t frame_decoded) { + can1_acu_tx_t frame_encoded; + frame_encoded.acu_as_mission = can1_acu_tx_acu_as_mission_encode(frame_decoded.acu_as_mission); + frame_encoded.acu_as_state = can1_acu_tx_acu_as_state_encode(frame_decoded.acu_as_state); + frame_encoded.acu_power_off = can1_acu_tx_acu_power_off_encode(frame_decoded.acu_power_off); + frame_encoded.acu_reset = can1_acu_tx_acu_reset_encode(frame_decoded.acu_reset); + frame_encoded.acu_allow_torque = can1_acu_tx_acu_allow_torque_encode(frame_decoded.acu_allow_torque); + frame_encoded.abx_con_mon_error = can1_acu_tx_abx_con_mon_error_encode(frame_decoded.abx_con_mon_error); + return frame_encoded; +} + +inline can1_ams_slave5_status_t ams_slave5_status(const frame::decoded::can1::ams_slave5_status_t frame_decoded) { + can1_ams_slave5_status_t frame_encoded; + frame_encoded.ams_slave_status_error = can1_ams_slave5_status_ams_slave_status_error_encode(frame_decoded.ams_slave_status_error); + frame_encoded.ams_slave_status_id = can1_ams_slave5_status_ams_slave_status_id_encode(frame_decoded.ams_slave_status_id); + frame_encoded.ams_slave_status_temp_sensor = can1_ams_slave5_status_ams_slave_status_temp_sensor_encode(frame_decoded.ams_slave_status_temp_sensor); + frame_encoded.ams_slave_status_min_cell_volt = can1_ams_slave5_status_ams_slave_status_min_cell_volt_encode(frame_decoded.ams_slave_status_min_cell_volt); + frame_encoded.ams_slave_status_max_cell_volt = can1_ams_slave5_status_ams_slave_status_max_cell_volt_encode(frame_decoded.ams_slave_status_max_cell_volt); + frame_encoded.ams_slave_status_max_temp = can1_ams_slave5_status_ams_slave_status_max_temp_encode(frame_decoded.ams_slave_status_max_temp); + return frame_encoded; +} + +inline can1_ams_slave4_status_t ams_slave4_status(const frame::decoded::can1::ams_slave4_status_t frame_decoded) { + can1_ams_slave4_status_t frame_encoded; + frame_encoded.ams_slave_status_error = can1_ams_slave4_status_ams_slave_status_error_encode(frame_decoded.ams_slave_status_error); + frame_encoded.ams_slave_status_id = can1_ams_slave4_status_ams_slave_status_id_encode(frame_decoded.ams_slave_status_id); + frame_encoded.ams_slave_status_temp_sensor = can1_ams_slave4_status_ams_slave_status_temp_sensor_encode(frame_decoded.ams_slave_status_temp_sensor); + frame_encoded.ams_slave_status_min_cell_volt = can1_ams_slave4_status_ams_slave_status_min_cell_volt_encode(frame_decoded.ams_slave_status_min_cell_volt); + frame_encoded.ams_slave_status_max_cell_volt = can1_ams_slave4_status_ams_slave_status_max_cell_volt_encode(frame_decoded.ams_slave_status_max_cell_volt); + frame_encoded.ams_slave_status_max_temp = can1_ams_slave4_status_ams_slave_status_max_temp_encode(frame_decoded.ams_slave_status_max_temp); + return frame_encoded; +} + +inline can1_ams_slave3_status_t ams_slave3_status(const frame::decoded::can1::ams_slave3_status_t frame_decoded) { + can1_ams_slave3_status_t frame_encoded; + frame_encoded.ams_slave_status_error = can1_ams_slave3_status_ams_slave_status_error_encode(frame_decoded.ams_slave_status_error); + frame_encoded.ams_slave_status_id = can1_ams_slave3_status_ams_slave_status_id_encode(frame_decoded.ams_slave_status_id); + frame_encoded.ams_slave_status_temp_sensor = can1_ams_slave3_status_ams_slave_status_temp_sensor_encode(frame_decoded.ams_slave_status_temp_sensor); + frame_encoded.ams_slave_status_min_cell_volt = can1_ams_slave3_status_ams_slave_status_min_cell_volt_encode(frame_decoded.ams_slave_status_min_cell_volt); + frame_encoded.ams_slave_status_max_cell_volt = can1_ams_slave3_status_ams_slave_status_max_cell_volt_encode(frame_decoded.ams_slave_status_max_cell_volt); + frame_encoded.ams_slave_status_max_temp = can1_ams_slave3_status_ams_slave_status_max_temp_encode(frame_decoded.ams_slave_status_max_temp); + return frame_encoded; +} + +inline can1_ams_slave2_status_t ams_slave2_status(const frame::decoded::can1::ams_slave2_status_t frame_decoded) { + can1_ams_slave2_status_t frame_encoded; + frame_encoded.ams_slave_status_error = can1_ams_slave2_status_ams_slave_status_error_encode(frame_decoded.ams_slave_status_error); + frame_encoded.ams_slave_status_id = can1_ams_slave2_status_ams_slave_status_id_encode(frame_decoded.ams_slave_status_id); + frame_encoded.ams_slave_status_temp_sensor = can1_ams_slave2_status_ams_slave_status_temp_sensor_encode(frame_decoded.ams_slave_status_temp_sensor); + frame_encoded.ams_slave_status_min_cell_volt = can1_ams_slave2_status_ams_slave_status_min_cell_volt_encode(frame_decoded.ams_slave_status_min_cell_volt); + frame_encoded.ams_slave_status_max_cell_volt = can1_ams_slave2_status_ams_slave_status_max_cell_volt_encode(frame_decoded.ams_slave_status_max_cell_volt); + frame_encoded.ams_slave_status_max_temp = can1_ams_slave2_status_ams_slave_status_max_temp_encode(frame_decoded.ams_slave_status_max_temp); + return frame_encoded; +} + +inline can1_ams_error_t ams_error(const frame::decoded::can1::ams_error_t frame_decoded) { + can1_ams_error_t frame_encoded; + frame_encoded.ams_error_kind = can1_ams_error_ams_error_kind_encode(frame_decoded.ams_error_kind); + frame_encoded.ams_error_arg = can1_ams_error_ams_error_arg_encode(frame_decoded.ams_error_arg); + return frame_encoded; +} + +inline can1_ftcu_cooling_t ftcu_cooling(const frame::decoded::can1::ftcu_cooling_t frame_decoded) { + can1_ftcu_cooling_t frame_encoded; + frame_encoded.ftcu_water_pressure_2 = can1_ftcu_cooling_ftcu_water_pressure_2_encode(frame_decoded.ftcu_water_pressure_2); + frame_encoded.ftcu_water_pressure_1 = can1_ftcu_cooling_ftcu_water_pressure_1_encode(frame_decoded.ftcu_water_pressure_1); + frame_encoded.ftcu_water_temperature_1 = can1_ftcu_cooling_ftcu_water_temperature_1_encode(frame_decoded.ftcu_water_temperature_1); + frame_encoded.ftcu_water_temperature_2 = can1_ftcu_cooling_ftcu_water_temperature_2_encode(frame_decoded.ftcu_water_temperature_2); + frame_encoded.ftcu_flow_rate = can1_ftcu_cooling_ftcu_flow_rate_encode(frame_decoded.ftcu_flow_rate); + return frame_encoded; +} + +inline can1_ftcu_brake_t_t ftcu_brake_t(const frame::decoded::can1::ftcu_brake_t_t frame_decoded) { + can1_ftcu_brake_t_t frame_encoded; + frame_encoded.ftcu_brake_t_fl = can1_ftcu_brake_t_ftcu_brake_t_fl_encode(frame_decoded.ftcu_brake_t_fl); + frame_encoded.ftcu_brake_t_fr = can1_ftcu_brake_t_ftcu_brake_t_fr_encode(frame_decoded.ftcu_brake_t_fr); + frame_encoded.ftcu_brake_t_rl = can1_ftcu_brake_t_ftcu_brake_t_rl_encode(frame_decoded.ftcu_brake_t_rl); + frame_encoded.ftcu_brake_t_rr = can1_ftcu_brake_t_ftcu_brake_t_rr_encode(frame_decoded.ftcu_brake_t_rr); + return frame_encoded; +} + +inline can1_ftcu_wheelspeed_t ftcu_wheelspeed(const frame::decoded::can1::ftcu_wheelspeed_t frame_decoded) { + can1_ftcu_wheelspeed_t frame_encoded; + frame_encoded.ftcu_wheelspeed_fl = can1_ftcu_wheelspeed_ftcu_wheelspeed_fl_encode(frame_decoded.ftcu_wheelspeed_fl); + frame_encoded.ftcu_wheelspeed_fr = can1_ftcu_wheelspeed_ftcu_wheelspeed_fr_encode(frame_decoded.ftcu_wheelspeed_fr); + frame_encoded.ftcu_wheelspeed_rl = can1_ftcu_wheelspeed_ftcu_wheelspeed_rl_encode(frame_decoded.ftcu_wheelspeed_rl); + frame_encoded.ftcu_wheelspeed_rr = can1_ftcu_wheelspeed_ftcu_wheelspeed_rr_encode(frame_decoded.ftcu_wheelspeed_rr); + frame_encoded.ftcu_distance_session = can1_ftcu_wheelspeed_ftcu_distance_session_encode(frame_decoded.ftcu_distance_session); + return frame_encoded; +} + +inline can1_ftcu_timings_t ftcu_timings(const frame::decoded::can1::ftcu_timings_t frame_decoded) { + can1_ftcu_timings_t frame_encoded; + frame_encoded.ftcu_laptime_best = can1_ftcu_timings_ftcu_laptime_best_encode(frame_decoded.ftcu_laptime_best); + frame_encoded.ftcu_laptime_last = can1_ftcu_timings_ftcu_laptime_last_encode(frame_decoded.ftcu_laptime_last); + frame_encoded.ftcu_sectortime_best = can1_ftcu_timings_ftcu_sectortime_best_encode(frame_decoded.ftcu_sectortime_best); + frame_encoded.ftcu_sectortime_last = can1_ftcu_timings_ftcu_sectortime_last_encode(frame_decoded.ftcu_sectortime_last); + return frame_encoded; +} + +inline can1_ftcu_driver_t ftcu_driver(const frame::decoded::can1::ftcu_driver_t frame_decoded) { + can1_ftcu_driver_t frame_encoded; + frame_encoded.ftcu_apps_percent = can1_ftcu_driver_ftcu_apps_percent_encode(frame_decoded.ftcu_apps_percent); + frame_encoded.ftcu_brake_pressure_f = can1_ftcu_driver_ftcu_brake_pressure_f_encode(frame_decoded.ftcu_brake_pressure_f); + frame_encoded.ftcu_brake_pressure_r = can1_ftcu_driver_ftcu_brake_pressure_r_encode(frame_decoded.ftcu_brake_pressure_r); + frame_encoded.ftcu_steering_angle = can1_ftcu_driver_ftcu_steering_angle_encode(frame_decoded.ftcu_steering_angle); + frame_encoded.ftcu_speed = can1_ftcu_driver_ftcu_speed_encode(frame_decoded.ftcu_speed); + frame_encoded.ftcu_lapcounter = can1_ftcu_driver_ftcu_lapcounter_encode(frame_decoded.ftcu_lapcounter); + frame_encoded.ftcu_sectorcounter = can1_ftcu_driver_ftcu_sectorcounter_encode(frame_decoded.ftcu_sectorcounter); + return frame_encoded; +} + +inline can1_tts_rr_t tts_rr(const frame::decoded::can1::tts_rr_t frame_decoded) { + can1_tts_rr_t frame_encoded; + frame_encoded.tts_outer_left = can1_tts_rr_tts_outer_left_encode(frame_decoded.tts_outer_left); + frame_encoded.tts_center_left = can1_tts_rr_tts_center_left_encode(frame_decoded.tts_center_left); + frame_encoded.tts_center = can1_tts_rr_tts_center_encode(frame_decoded.tts_center); + frame_encoded.tts_center_right = can1_tts_rr_tts_center_right_encode(frame_decoded.tts_center_right); + frame_encoded.tts_outet_right = can1_tts_rr_tts_outet_right_encode(frame_decoded.tts_outet_right); + frame_encoded.tts_status = can1_tts_rr_tts_status_encode(frame_decoded.tts_status); + return frame_encoded; +} + +inline can1_tts_rl_t tts_rl(const frame::decoded::can1::tts_rl_t frame_decoded) { + can1_tts_rl_t frame_encoded; + frame_encoded.tts_outer_left = can1_tts_rl_tts_outer_left_encode(frame_decoded.tts_outer_left); + frame_encoded.tts_center_left = can1_tts_rl_tts_center_left_encode(frame_decoded.tts_center_left); + frame_encoded.tts_center = can1_tts_rl_tts_center_encode(frame_decoded.tts_center); + frame_encoded.tts_center_right = can1_tts_rl_tts_center_right_encode(frame_decoded.tts_center_right); + frame_encoded.tts_outer_right = can1_tts_rl_tts_outer_right_encode(frame_decoded.tts_outer_right); + frame_encoded.tts_status = can1_tts_rl_tts_status_encode(frame_decoded.tts_status); + return frame_encoded; +} + +inline can1_tts_fr_t tts_fr(const frame::decoded::can1::tts_fr_t frame_decoded) { + can1_tts_fr_t frame_encoded; + frame_encoded.tts_outer_left = can1_tts_fr_tts_outer_left_encode(frame_decoded.tts_outer_left); + frame_encoded.tts_center_left = can1_tts_fr_tts_center_left_encode(frame_decoded.tts_center_left); + frame_encoded.tts_center = can1_tts_fr_tts_center_encode(frame_decoded.tts_center); + frame_encoded.tts_center_right = can1_tts_fr_tts_center_right_encode(frame_decoded.tts_center_right); + frame_encoded.tts_outer_right = can1_tts_fr_tts_outer_right_encode(frame_decoded.tts_outer_right); + frame_encoded.tts_status = can1_tts_fr_tts_status_encode(frame_decoded.tts_status); + return frame_encoded; +} + +inline can1_tts_fl_t tts_fl(const frame::decoded::can1::tts_fl_t frame_decoded) { + can1_tts_fl_t frame_encoded; + frame_encoded.tts_outer_left = can1_tts_fl_tts_outer_left_encode(frame_decoded.tts_outer_left); + frame_encoded.tts_center_left = can1_tts_fl_tts_center_left_encode(frame_decoded.tts_center_left); + frame_encoded.tts_center = can1_tts_fl_tts_center_encode(frame_decoded.tts_center); + frame_encoded.tts_center_right = can1_tts_fl_tts_center_right_encode(frame_decoded.tts_center_right); + frame_encoded.tts_outer_right = can1_tts_fl_tts_outer_right_encode(frame_decoded.tts_outer_right); + frame_encoded.tts_status = can1_tts_fl_tts_status_encode(frame_decoded.tts_status); + return frame_encoded; +} + +inline can1_stw_param_set_t stw_param_set(const frame::decoded::can1::stw_param_set_t frame_decoded) { + can1_stw_param_set_t frame_encoded; + frame_encoded.stw_param_set = can1_stw_param_set_stw_param_set_encode(frame_decoded.stw_param_set); + frame_encoded.stw_param_tc_slipref = can1_stw_param_set_stw_param_tc_slipref_encode(frame_decoded.stw_param_tc_slipref); + frame_encoded.stw_param_tc_mumax = can1_stw_param_set_stw_param_tc_mumax_encode(frame_decoded.stw_param_tc_mumax); + frame_encoded.stw_param_tc_i = can1_stw_param_set_stw_param_tc_i_encode(frame_decoded.stw_param_tc_i); + frame_encoded.stw_param_plim = can1_stw_param_set_stw_param_plim_encode(frame_decoded.stw_param_plim); + frame_encoded.stw_param_tlim = can1_stw_param_set_stw_param_tlim_encode(frame_decoded.stw_param_tlim); + frame_encoded.stw_param_tc_p = can1_stw_param_set_stw_param_tc_p_encode(frame_decoded.stw_param_tc_p); + frame_encoded.stw_param_reku = can1_stw_param_set_stw_param_reku_encode(frame_decoded.stw_param_reku); + frame_encoded.stw_param_tc_on = can1_stw_param_set_stw_param_tc_on_encode(frame_decoded.stw_param_tc_on); + frame_encoded.stw_param_tv_on = can1_stw_param_set_stw_param_tv_on_encode(frame_decoded.stw_param_tv_on); + frame_encoded.stw_param_discipline = can1_stw_param_set_stw_param_discipline_encode(frame_decoded.stw_param_discipline); + frame_encoded.stw_param_slim = can1_stw_param_set_stw_param_slim_encode(frame_decoded.stw_param_slim); + return frame_encoded; +} + +inline can1_ams_slave0_status_t ams_slave0_status(const frame::decoded::can1::ams_slave0_status_t frame_decoded) { + can1_ams_slave0_status_t frame_encoded; + frame_encoded.ams_slave_status_error = can1_ams_slave0_status_ams_slave_status_error_encode(frame_decoded.ams_slave_status_error); + frame_encoded.ams_slave_status_id = can1_ams_slave0_status_ams_slave_status_id_encode(frame_decoded.ams_slave_status_id); + frame_encoded.ams_slave_status_temp_sensor = can1_ams_slave0_status_ams_slave_status_temp_sensor_encode(frame_decoded.ams_slave_status_temp_sensor); + frame_encoded.ams_slave_status_min_cell_volt = can1_ams_slave0_status_ams_slave_status_min_cell_volt_encode(frame_decoded.ams_slave_status_min_cell_volt); + frame_encoded.ams_slave_status_max_cell_volt = can1_ams_slave0_status_ams_slave_status_max_cell_volt_encode(frame_decoded.ams_slave_status_max_cell_volt); + frame_encoded.ams_slave_status_max_temp = can1_ams_slave0_status_ams_slave_status_max_temp_encode(frame_decoded.ams_slave_status_max_temp); + return frame_encoded; +} + +inline can1_ssu_message_t ssu_message(const frame::decoded::can1::ssu_message_t frame_decoded) { + can1_ssu_message_t frame_encoded; + frame_encoded.ssu_pressure = can1_ssu_message_ssu_pressure_encode(frame_decoded.ssu_pressure); + frame_encoded.ssu_air_temp = can1_ssu_message_ssu_air_temp_encode(frame_decoded.ssu_air_temp); + return frame_encoded; +} + +inline can1_ams_status_t ams_status(const frame::decoded::can1::ams_status_t frame_decoded) { + can1_ams_status_t frame_encoded; + frame_encoded.ams_state = can1_ams_status_ams_state_encode(frame_decoded.ams_state); + frame_encoded.sdc_closed = can1_ams_status_sdc_closed_encode(frame_decoded.sdc_closed); + frame_encoded.soc = can1_ams_status_soc_encode(frame_decoded.soc); + frame_encoded.min_cell_volt = can1_ams_status_min_cell_volt_encode(frame_decoded.min_cell_volt); + frame_encoded.max_cell_temp = can1_ams_status_max_cell_temp_encode(frame_decoded.max_cell_temp); + frame_encoded.ams_imd_state = can1_ams_status_ams_imd_state_encode(frame_decoded.ams_imd_state); + frame_encoded.ams_imd_ok = can1_ams_status_ams_imd_ok_encode(frame_decoded.ams_imd_ok); + return frame_encoded; +} + +inline can1_ams_slave_panic_t ams_slave_panic(const frame::decoded::can1::ams_slave_panic_t frame_decoded) { + can1_ams_slave_panic_t frame_encoded; + frame_encoded.ams_slave_panic_slave_id = can1_ams_slave_panic_ams_slave_panic_slave_id_encode(frame_decoded.ams_slave_panic_slave_id); + frame_encoded.ams_slave_panic_kind = can1_ams_slave_panic_ams_slave_panic_kind_encode(frame_decoded.ams_slave_panic_kind); + frame_encoded.ams_slave_panic_arg = can1_ams_slave_panic_ams_slave_panic_arg_encode(frame_decoded.ams_slave_panic_arg); + return frame_encoded; +} + +inline can1_ams_in_t ams_in(const frame::decoded::can1::ams_in_t frame_decoded) { + can1_ams_in_t frame_encoded; + frame_encoded.ts_activate = can1_ams_in_ts_activate_encode(frame_decoded.ts_activate); + frame_encoded.inverters_discharged = can1_ams_in_inverters_discharged_encode(frame_decoded.inverters_discharged); + frame_encoded.lap_number = can1_ams_in_lap_number_encode(frame_decoded.lap_number); + return frame_encoded; +} + +inline can1_shunt_current_t shunt_current(const frame::decoded::can1::shunt_current_t frame_decoded) { + can1_shunt_current_t frame_encoded; + frame_encoded.shunt_current = can1_shunt_current_shunt_current_encode(frame_decoded.shunt_current); + return frame_encoded; +} + +inline can1_shunt_voltage1_t shunt_voltage1(const frame::decoded::can1::shunt_voltage1_t frame_decoded) { + can1_shunt_voltage1_t frame_encoded; + frame_encoded.shunt_voltage1 = can1_shunt_voltage1_shunt_voltage1_encode(frame_decoded.shunt_voltage1); + return frame_encoded; +} + +inline can1_shunt_voltage2_t shunt_voltage2(const frame::decoded::can1::shunt_voltage2_t frame_decoded) { + can1_shunt_voltage2_t frame_encoded; + frame_encoded.shunt_voltage2 = can1_shunt_voltage2_shunt_voltage2_encode(frame_decoded.shunt_voltage2); + return frame_encoded; +} + +inline can1_shunt_voltage3_t shunt_voltage3(const frame::decoded::can1::shunt_voltage3_t frame_decoded) { + can1_shunt_voltage3_t frame_encoded; + frame_encoded.shunt_voltage3 = can1_shunt_voltage3_shunt_voltage3_encode(frame_decoded.shunt_voltage3); + return frame_encoded; +} + +inline can1_shunt_temperature_t shunt_temperature(const frame::decoded::can1::shunt_temperature_t frame_decoded) { + can1_shunt_temperature_t frame_encoded; + frame_encoded.shunt_temperature = can1_shunt_temperature_shunt_temperature_encode(frame_decoded.shunt_temperature); + return frame_encoded; +} + +inline can1_pdu_command_t pdu_command(const frame::decoded::can1::pdu_command_t frame_decoded) { + can1_pdu_command_t frame_encoded; + frame_encoded.pdu_enable_misc = can1_pdu_command_pdu_enable_misc_encode(frame_decoded.pdu_enable_misc); + frame_encoded.pdu_enable_sdc = can1_pdu_command_pdu_enable_sdc_encode(frame_decoded.pdu_enable_sdc); + frame_encoded.pdu_enable_inverter = can1_pdu_command_pdu_enable_inverter_encode(frame_decoded.pdu_enable_inverter); + frame_encoded.pdu_enable_ts_cooling = can1_pdu_command_pdu_enable_ts_cooling_encode(frame_decoded.pdu_enable_ts_cooling); + frame_encoded.pdu_enable_acc_cooling = can1_pdu_command_pdu_enable_acc_cooling_encode(frame_decoded.pdu_enable_acc_cooling); + frame_encoded.pdu_enable_lldar = can1_pdu_command_pdu_enable_lldar_encode(frame_decoded.pdu_enable_lldar); + frame_encoded.pdu_enable_drs = can1_pdu_command_pdu_enable_drs_encode(frame_decoded.pdu_enable_drs); + frame_encoded.pdu_enable_epsc = can1_pdu_command_pdu_enable_epsc_encode(frame_decoded.pdu_enable_epsc); + frame_encoded.pdu_enable_acu = can1_pdu_command_pdu_enable_acu_encode(frame_decoded.pdu_enable_acu); + frame_encoded.pdu_enable_ebs_a = can1_pdu_command_pdu_enable_ebs_a_encode(frame_decoded.pdu_enable_ebs_a); + frame_encoded.pdu_enable_ebs_b = can1_pdu_command_pdu_enable_ebs_b_encode(frame_decoded.pdu_enable_ebs_b); + frame_encoded.pdu_enable_ebs_c = can1_pdu_command_pdu_enable_ebs_c_encode(frame_decoded.pdu_enable_ebs_c); + return frame_encoded; +} + +inline can1_pdu_response_t pdu_response(const frame::decoded::can1::pdu_response_t frame_decoded) { + can1_pdu_response_t frame_encoded; + frame_encoded.pdu_alwayson_tx = can1_pdu_response_pdu_alwayson_tx_encode(frame_decoded.pdu_alwayson_tx); + frame_encoded.pdu_shutdown_circuit_tx = can1_pdu_response_pdu_shutdown_circuit_tx_encode(frame_decoded.pdu_shutdown_circuit_tx); + frame_encoded.pdu_lidar_tx = can1_pdu_response_pdu_lidar_tx_encode(frame_decoded.pdu_lidar_tx); + frame_encoded.pdu_acu_tx = can1_pdu_response_pdu_acu_tx_encode(frame_decoded.pdu_acu_tx); + frame_encoded.pdu_servos_regler_tx = can1_pdu_response_pdu_servos_regler_tx_encode(frame_decoded.pdu_servos_regler_tx); + frame_encoded.pdu_inverter_tx = can1_pdu_response_pdu_inverter_tx_encode(frame_decoded.pdu_inverter_tx); + frame_encoded.pdu_misc_tx = can1_pdu_response_pdu_misc_tx_encode(frame_decoded.pdu_misc_tx); + frame_encoded.pdu_servo_tx = can1_pdu_response_pdu_servo_tx_encode(frame_decoded.pdu_servo_tx); + frame_encoded.pdu_ebs_valve_1_tx = can1_pdu_response_pdu_ebs_valve_1_tx_encode(frame_decoded.pdu_ebs_valve_1_tx); + frame_encoded.pdu_ebs_valve_2_tx = can1_pdu_response_pdu_ebs_valve_2_tx_encode(frame_decoded.pdu_ebs_valve_2_tx); + frame_encoded.pdu_cs_valve_tx = can1_pdu_response_pdu_cs_valve_tx_encode(frame_decoded.pdu_cs_valve_tx); + frame_encoded.pdu_aggregat_tx = can1_pdu_response_pdu_aggregat_tx_encode(frame_decoded.pdu_aggregat_tx); + frame_encoded.pdu_steering_tx = can1_pdu_response_pdu_steering_tx_encode(frame_decoded.pdu_steering_tx); + frame_encoded.pdu_pwm_tsac_fans = can1_pdu_response_pdu_pwm_tsac_fans_encode(frame_decoded.pdu_pwm_tsac_fans); + frame_encoded.pdu_pwm_radiatot_fans_tx = can1_pdu_response_pdu_pwm_radiatot_fans_tx_encode(frame_decoded.pdu_pwm_radiatot_fans_tx); + frame_encoded.pdu_pwm_aggregat = can1_pdu_response_pdu_pwm_aggregat_encode(frame_decoded.pdu_pwm_aggregat); + frame_encoded.pdu_pwm_pump = can1_pdu_response_pdu_pwm_pump_encode(frame_decoded.pdu_pwm_pump); + frame_encoded.pdu_heartbeat_ok_tx = can1_pdu_response_pdu_heartbeat_ok_tx_encode(frame_decoded.pdu_heartbeat_ok_tx); + return frame_encoded; +} + +inline can1_as_mission_fb_t as_mission_fb(const frame::decoded::can1::as_mission_fb_t frame_decoded) { + can1_as_mission_fb_t frame_encoded; + frame_encoded.mission_selection = can1_as_mission_fb_mission_selection_encode(frame_decoded.mission_selection); + return frame_encoded; +} + +inline can1_stw_mission_selected_t stw_mission_selected(const frame::decoded::can1::stw_mission_selected_t frame_decoded) { + can1_stw_mission_selected_t frame_encoded; + frame_encoded.mission_selection = can1_stw_mission_selected_mission_selection_encode(frame_decoded.mission_selection); + return frame_encoded; +} + +inline can1_epsc_out_t epsc_out(const frame::decoded::can1::epsc_out_t frame_decoded) { + can1_epsc_out_t frame_encoded; + frame_encoded.epsc_measured_rpm = can1_epsc_out_epsc_measured_rpm_encode(frame_decoded.epsc_measured_rpm); + frame_encoded.epsc_measured_steering_angle = can1_epsc_out_epsc_measured_steering_angle_encode(frame_decoded.epsc_measured_steering_angle); + frame_encoded.epsc_measured_mosfet_temperature = can1_epsc_out_epsc_measured_mosfet_temperature_encode(frame_decoded.epsc_measured_mosfet_temperature); + frame_encoded.epsc_measured_voltage = can1_epsc_out_epsc_measured_voltage_encode(frame_decoded.epsc_measured_voltage); + frame_encoded.epsc_measured_current = can1_epsc_out_epsc_measured_current_encode(frame_decoded.epsc_measured_current); + return frame_encoded; +} + +inline can1_epsc_steering_in_t epsc_steering_in(const frame::decoded::can1::epsc_steering_in_t frame_decoded) { + can1_epsc_steering_in_t frame_encoded; + frame_encoded.epsc_desired_steering_angle = can1_epsc_steering_in_epsc_desired_steering_angle_encode(frame_decoded.epsc_desired_steering_angle); + return frame_encoded; +} + +inline can1_stw_buttons_t stw_buttons(const frame::decoded::can1::stw_buttons_t frame_decoded) { + can1_stw_buttons_t frame_encoded; + frame_encoded.stw_button_drs = can1_stw_buttons_stw_button_drs_encode(frame_decoded.stw_button_drs); + frame_encoded.stw_button_1 = can1_stw_buttons_stw_button_1_encode(frame_decoded.stw_button_1); + frame_encoded.stw_button_2 = can1_stw_buttons_stw_button_2_encode(frame_decoded.stw_button_2); + frame_encoded.stw_button_3 = can1_stw_buttons_stw_button_3_encode(frame_decoded.stw_button_3); + frame_encoded.stw_button_4 = can1_stw_buttons_stw_button_4_encode(frame_decoded.stw_button_4); + return frame_encoded; +} + +inline can1_stw_status_t stw_status(const frame::decoded::can1::stw_status_t frame_decoded) { + can1_stw_status_t frame_encoded; + frame_encoded.lap_count = can1_stw_status_lap_count_encode(frame_decoded.lap_count); + frame_encoded.err_pdu = can1_stw_status_err_pdu_encode(frame_decoded.err_pdu); + frame_encoded.err_res = can1_stw_status_err_res_encode(frame_decoded.err_res); + frame_encoded.r2_d_progress = can1_stw_status_r2_d_progress_encode(frame_decoded.r2_d_progress); + frame_encoded.as_state_stw = can1_stw_status_as_state_stw_encode(frame_decoded.as_state_stw); + frame_encoded.err_as = can1_stw_status_err_as_encode(frame_decoded.err_as); + frame_encoded.err_app_sp = can1_stw_status_err_app_sp_encode(frame_decoded.err_app_sp); + frame_encoded.err_s_bspd = can1_stw_status_err_s_bspd_encode(frame_decoded.err_s_bspd); + frame_encoded.err_scs = can1_stw_status_err_scs_encode(frame_decoded.err_scs); + frame_encoded.err_con_mon = can1_stw_status_err_con_mon_encode(frame_decoded.err_con_mon); + frame_encoded.err_ini_chk = can1_stw_status_err_ini_chk_encode(frame_decoded.err_ini_chk); + frame_encoded.err_inv2 = can1_stw_status_err_inv2_encode(frame_decoded.err_inv2); + frame_encoded.err_inv1 = can1_stw_status_err_inv1_encode(frame_decoded.err_inv1); + frame_encoded.err_ams = can1_stw_status_err_ams_encode(frame_decoded.err_ams); + frame_encoded.err_sdc = can1_stw_status_err_sdc_encode(frame_decoded.err_sdc); + frame_encoded.sdc_status = can1_stw_status_sdc_status_encode(frame_decoded.sdc_status); + frame_encoded.inv2_ready = can1_stw_status_inv2_ready_encode(frame_decoded.inv2_ready); + frame_encoded.inv1_ready = can1_stw_status_inv1_ready_encode(frame_decoded.inv1_ready); + frame_encoded.energy_per_lap = can1_stw_status_energy_per_lap_encode(frame_decoded.energy_per_lap); + frame_encoded.ini_chk_state = can1_stw_status_ini_chk_state_encode(frame_decoded.ini_chk_state); + return frame_encoded; +} + +inline can1_pdu_current_1_t pdu_current_1(const frame::decoded::can1::pdu_current_1_t frame_decoded) { + can1_pdu_current_1_t frame_encoded; + frame_encoded.pdu_always_on_current = can1_pdu_current_1_pdu_always_on_current_encode(frame_decoded.pdu_always_on_current); + frame_encoded.pdu_lvms_current = can1_pdu_current_1_pdu_lvms_current_encode(frame_decoded.pdu_lvms_current); + frame_encoded.pdu_asms_current = can1_pdu_current_1_pdu_asms_current_encode(frame_decoded.pdu_asms_current); + frame_encoded.pdu_misc_current = can1_pdu_current_1_pdu_misc_current_encode(frame_decoded.pdu_misc_current); + return frame_encoded; +} + +inline can1_pdu_current_2_t pdu_current_2(const frame::decoded::can1::pdu_current_2_t frame_decoded) { + can1_pdu_current_2_t frame_encoded; + frame_encoded.pdu_sdc_current = can1_pdu_current_2_pdu_sdc_current_encode(frame_decoded.pdu_sdc_current); + frame_encoded.pdu_inverter_current = can1_pdu_current_2_pdu_inverter_current_encode(frame_decoded.pdu_inverter_current); + frame_encoded.pdu_ts_cooling_current = can1_pdu_current_2_pdu_ts_cooling_current_encode(frame_decoded.pdu_ts_cooling_current); + frame_encoded.pdu_acc_cooling_current = can1_pdu_current_2_pdu_acc_cooling_current_encode(frame_decoded.pdu_acc_cooling_current); + return frame_encoded; +} + +inline can1_pdu_current_3_t pdu_current_3(const frame::decoded::can1::pdu_current_3_t frame_decoded) { + can1_pdu_current_3_t frame_encoded; + frame_encoded.pdu_lidar_current = can1_pdu_current_3_pdu_lidar_current_encode(frame_decoded.pdu_lidar_current); + frame_encoded.pdu_drs_current = can1_pdu_current_3_pdu_drs_current_encode(frame_decoded.pdu_drs_current); + frame_encoded.pdu_epsc_current = can1_pdu_current_3_pdu_epsc_current_encode(frame_decoded.pdu_epsc_current); + frame_encoded.pdu_acu_current = can1_pdu_current_3_pdu_acu_current_encode(frame_decoded.pdu_acu_current); + return frame_encoded; +} + +inline can1_pdu_current_4_t pdu_current_4(const frame::decoded::can1::pdu_current_4_t frame_decoded) { + can1_pdu_current_4_t frame_encoded; + frame_encoded.pdu_ebs_a_current = can1_pdu_current_4_pdu_ebs_a_current_encode(frame_decoded.pdu_ebs_a_current); + frame_encoded.pdu_ebs_b_current = can1_pdu_current_4_pdu_ebs_b_current_encode(frame_decoded.pdu_ebs_b_current); + return frame_encoded; +} + +inline can1_epsc_config_in_t epsc_config_in(const frame::decoded::can1::epsc_config_in_t frame_decoded) { + can1_epsc_config_in_t frame_encoded; + frame_encoded.epsc_config_p_gain = can1_epsc_config_in_epsc_config_p_gain_encode(frame_decoded.epsc_config_p_gain); + frame_encoded.epsc_config_i_gain = can1_epsc_config_in_epsc_config_i_gain_encode(frame_decoded.epsc_config_i_gain); + frame_encoded.epsc_config_d_gain = can1_epsc_config_in_epsc_config_d_gain_encode(frame_decoded.epsc_config_d_gain); + return frame_encoded; +} + +} +} + +// decode functions +namespace decode { +namespace can1 { +inline frame::decoded::can1::inverter_velocity_t inverter_velocity(const can1_inverter_velocity_t frame_encoded) { + frame::decoded::can1::inverter_velocity_t frame_decoded; + frame_decoded.inverter_1_velocity = can1_inverter_velocity_inverter_1_velocity_decode(frame_encoded.inverter_1_velocity); + frame_decoded.inverter_2_velocity = can1_inverter_velocity_inverter_2_velocity_decode(frame_encoded.inverter_2_velocity); + return frame_decoded; +} + +inline frame::decoded::can1::inverter_errors_warnings_t inverter_errors_warnings(const can1_inverter_errors_warnings_t frame_encoded) { + frame::decoded::can1::inverter_errors_warnings_t frame_decoded; + frame_decoded.inverter_1_errors = can1_inverter_errors_warnings_inverter_1_errors_decode(frame_encoded.inverter_1_errors); + frame_decoded.inverter_1_warnings = can1_inverter_errors_warnings_inverter_1_warnings_decode(frame_encoded.inverter_1_warnings); + frame_decoded.inverter_2_errors = can1_inverter_errors_warnings_inverter_2_errors_decode(frame_encoded.inverter_2_errors); + frame_decoded.inverter_2_warnings = can1_inverter_errors_warnings_inverter_2_warnings_decode(frame_encoded.inverter_2_warnings); + return frame_decoded; +} + +inline frame::decoded::can1::inverter_torque_actual_cw_t inverter_torque_actual_cw(const can1_inverter_torque_actual_cw_t frame_encoded) { + frame::decoded::can1::inverter_torque_actual_cw_t frame_decoded; + frame_decoded.inverter_1_control_word = can1_inverter_torque_actual_cw_inverter_1_control_word_decode(frame_encoded.inverter_1_control_word); + frame_decoded.inverter_1_torque_actual = can1_inverter_torque_actual_cw_inverter_1_torque_actual_decode(frame_encoded.inverter_1_torque_actual); + frame_decoded.inverter_2_control_word = can1_inverter_torque_actual_cw_inverter_2_control_word_decode(frame_encoded.inverter_2_control_word); + frame_decoded.inverter_2_torque_actual = can1_inverter_torque_actual_cw_inverter_2_torque_actual_decode(frame_encoded.inverter_2_torque_actual); + return frame_decoded; +} + +inline frame::decoded::can1::inverter_temperatur_t inverter_temperatur(const can1_inverter_temperatur_t frame_encoded) { + frame::decoded::can1::inverter_temperatur_t frame_decoded; + frame_decoded.inverter_1_temp_inv = can1_inverter_temperatur_inverter_1_temp_inv_decode(frame_encoded.inverter_1_temp_inv); + frame_decoded.inverter_1_temp_mot = can1_inverter_temperatur_inverter_1_temp_mot_decode(frame_encoded.inverter_1_temp_mot); + frame_decoded.inverter_2_temp_inv = can1_inverter_temperatur_inverter_2_temp_inv_decode(frame_encoded.inverter_2_temp_inv); + frame_decoded.inverter_2_temp_mot = can1_inverter_temperatur_inverter_2_temp_mot_decode(frame_encoded.inverter_2_temp_mot); + return frame_decoded; +} + +inline frame::decoded::can1::inverter_torque_wanted_t inverter_torque_wanted(const can1_inverter_torque_wanted_t frame_encoded) { + frame::decoded::can1::inverter_torque_wanted_t frame_decoded; + frame_decoded.inverter_1_torque_demanded = can1_inverter_torque_wanted_inverter_1_torque_demanded_decode(frame_encoded.inverter_1_torque_demanded); + frame_decoded.inverter_2_torque_demanded = can1_inverter_torque_wanted_inverter_2_torque_demanded_decode(frame_encoded.inverter_2_torque_demanded); + frame_decoded.inverter_1_torque_desired = can1_inverter_torque_wanted_inverter_1_torque_desired_decode(frame_encoded.inverter_1_torque_desired); + frame_decoded.inverter_2_torque_desired = can1_inverter_torque_wanted_inverter_2_torque_desired_decode(frame_encoded.inverter_2_torque_desired); + return frame_decoded; +} + +inline frame::decoded::can1::sdo_telemetrie_rx_node1_t sdo_telemetrie_rx_node1(const can1_sdo_telemetrie_rx_node1_t frame_encoded) { + frame::decoded::can1::sdo_telemetrie_rx_node1_t frame_decoded; + frame_decoded.sdo_command_byte = can1_sdo_telemetrie_rx_node1_sdo_command_byte_decode(frame_encoded.sdo_command_byte); + frame_decoded.sdo_od_index = can1_sdo_telemetrie_rx_node1_sdo_od_index_decode(frame_encoded.sdo_od_index); + frame_decoded.sdo_od_subindex = can1_sdo_telemetrie_rx_node1_sdo_od_subindex_decode(frame_encoded.sdo_od_subindex); + frame_decoded.sdo_data = can1_sdo_telemetrie_rx_node1_sdo_data_decode(frame_encoded.sdo_data); + return frame_decoded; +} + +inline frame::decoded::can1::sdo_telemetrie_rx_node2_t sdo_telemetrie_rx_node2(const can1_sdo_telemetrie_rx_node2_t frame_encoded) { + frame::decoded::can1::sdo_telemetrie_rx_node2_t frame_decoded; + frame_decoded.sdo_command_byte = can1_sdo_telemetrie_rx_node2_sdo_command_byte_decode(frame_encoded.sdo_command_byte); + frame_decoded.sdo_od_index = can1_sdo_telemetrie_rx_node2_sdo_od_index_decode(frame_encoded.sdo_od_index); + frame_decoded.sdo_od_subindex = can1_sdo_telemetrie_rx_node2_sdo_od_subindex_decode(frame_encoded.sdo_od_subindex); + frame_decoded.sdo_data = can1_sdo_telemetrie_rx_node2_sdo_data_decode(frame_encoded.sdo_data); + return frame_decoded; +} + +inline frame::decoded::can1::sdo_telemetrie_tx_t sdo_telemetrie_tx(const can1_sdo_telemetrie_tx_t frame_encoded) { + frame::decoded::can1::sdo_telemetrie_tx_t frame_decoded; + frame_decoded.sdo_command_byte = can1_sdo_telemetrie_tx_sdo_command_byte_decode(frame_encoded.sdo_command_byte); + frame_decoded.sdo_od_index = can1_sdo_telemetrie_tx_sdo_od_index_decode(frame_encoded.sdo_od_index); + frame_decoded.sdo_od_subindex = can1_sdo_telemetrie_tx_sdo_od_subindex_decode(frame_encoded.sdo_od_subindex); + frame_decoded.sdo_data = can1_sdo_telemetrie_tx_sdo_data_decode(frame_encoded.sdo_data); + return frame_decoded; +} + +inline frame::decoded::can1::laptop_sdo_node_t laptop_sdo_node(const can1_laptop_sdo_node_t frame_encoded) { + frame::decoded::can1::laptop_sdo_node_t frame_decoded; + frame_decoded.node_id_sdo = can1_laptop_sdo_node_node_id_sdo_decode(frame_encoded.node_id_sdo); + return frame_decoded; +} + +inline frame::decoded::can1::x_sens_long_lat_t x_sens_long_lat(const can1_x_sens_long_lat_t frame_encoded) { + frame::decoded::can1::x_sens_long_lat_t frame_decoded; + frame_decoded.x_sens_latitude = can1_x_sens_long_lat_x_sens_latitude_decode(frame_encoded.x_sens_latitude); + frame_decoded.x_sens_longitude = can1_x_sens_long_lat_x_sens_longitude_decode(frame_encoded.x_sens_longitude); + return frame_decoded; +} + +inline frame::decoded::can1::x_sens_rateofturn_t x_sens_rateofturn(const can1_x_sens_rateofturn_t frame_encoded) { + frame::decoded::can1::x_sens_rateofturn_t frame_decoded; + frame_decoded.x_sens_gyr_x = can1_x_sens_rateofturn_x_sens_gyr_x_decode(frame_encoded.x_sens_gyr_x); + frame_decoded.x_sens_gy_y = can1_x_sens_rateofturn_x_sens_gy_y_decode(frame_encoded.x_sens_gy_y); + frame_decoded.x_sens_gy_z = can1_x_sens_rateofturn_x_sens_gy_z_decode(frame_encoded.x_sens_gy_z); + return frame_decoded; +} + +inline frame::decoded::can1::x_sens_acceleration_t x_sens_acceleration(const can1_x_sens_acceleration_t frame_encoded) { + frame::decoded::can1::x_sens_acceleration_t frame_decoded; + frame_decoded.x_sens_acc_x = can1_x_sens_acceleration_x_sens_acc_x_decode(frame_encoded.x_sens_acc_x); + frame_decoded.x_sens_acc_y = can1_x_sens_acceleration_x_sens_acc_y_decode(frame_encoded.x_sens_acc_y); + frame_decoded.x_sens_acc_z = can1_x_sens_acceleration_x_sens_acc_z_decode(frame_encoded.x_sens_acc_z); + return frame_decoded; +} + +inline frame::decoded::can1::x_sens_velocity_t x_sens_velocity(const can1_x_sens_velocity_t frame_encoded) { + frame::decoded::can1::x_sens_velocity_t frame_decoded; + frame_decoded.x_sens_vel_x = can1_x_sens_velocity_x_sens_vel_x_decode(frame_encoded.x_sens_vel_x); + frame_decoded.x_sens_vel_y = can1_x_sens_velocity_x_sens_vel_y_decode(frame_encoded.x_sens_vel_y); + frame_decoded.x_sens_vel_z = can1_x_sens_velocity_x_sens_vel_z_decode(frame_encoded.x_sens_vel_z); + return frame_decoded; +} + +inline frame::decoded::can1::telemetrie_t telemetrie(const can1_telemetrie_t frame_encoded) { + frame::decoded::can1::telemetrie_t frame_decoded; + frame_decoded.ini_check_error_state = can1_telemetrie_ini_check_error_state_decode(frame_encoded.ini_check_error_state); + frame_decoded.powermap = can1_telemetrie_powermap_decode(frame_encoded.powermap); + frame_decoded.apps_ok = can1_telemetrie_apps_ok_decode(frame_encoded.apps_ok); + frame_decoded.brake_ok = can1_telemetrie_brake_ok_decode(frame_encoded.brake_ok); + frame_decoded.allow_torque = can1_telemetrie_allow_torque_decode(frame_encoded.allow_torque); + frame_decoded.asp_ok = can1_telemetrie_asp_ok_decode(frame_encoded.asp_ok); + frame_decoded.pressure_sensor_ok = can1_telemetrie_pressure_sensor_ok_decode(frame_encoded.pressure_sensor_ok); + frame_decoded.torque_vectoring_on = can1_telemetrie_torque_vectoring_on_decode(frame_encoded.torque_vectoring_on); + frame_decoded.reku_on = can1_telemetrie_reku_on_decode(frame_encoded.reku_on); + frame_decoded.traction_control_on = can1_telemetrie_traction_control_on_decode(frame_encoded.traction_control_on); + frame_decoded.ts_deactivate = can1_telemetrie_ts_deactivate_decode(frame_encoded.ts_deactivate); + frame_decoded.torque_limit = can1_telemetrie_torque_limit_decode(frame_encoded.torque_limit); + frame_decoded.power_limit = can1_telemetrie_power_limit_decode(frame_encoded.power_limit); + frame_decoded.torque_limit_dynamisch = can1_telemetrie_torque_limit_dynamisch_decode(frame_encoded.torque_limit_dynamisch); + frame_decoded.torque_ohne_limit_l = can1_telemetrie_torque_ohne_limit_l_decode(frame_encoded.torque_ohne_limit_l); + frame_decoded.torque_ohne_limit_r = can1_telemetrie_torque_ohne_limit_r_decode(frame_encoded.torque_ohne_limit_r); + return frame_decoded; +} + +inline frame::decoded::can1::override_powermap_t override_powermap(const can1_override_powermap_t frame_encoded) { + frame::decoded::can1::override_powermap_t frame_decoded; + frame_decoded.laptopp_power_map = can1_override_powermap_laptopp_power_map_decode(frame_encoded.laptopp_power_map); + frame_decoded.laptop_reku = can1_override_powermap_laptop_reku_decode(frame_encoded.laptop_reku); + frame_decoded.laptop_tc = can1_override_powermap_laptop_tc_decode(frame_encoded.laptop_tc); + frame_decoded.laptop_tv = can1_override_powermap_laptop_tv_decode(frame_encoded.laptop_tv); + frame_decoded.laptop_slipref = can1_override_powermap_laptop_slipref_decode(frame_encoded.laptop_slipref); + frame_decoded.laptop_tc_i = can1_override_powermap_laptop_tc_i_decode(frame_encoded.laptop_tc_i); + frame_decoded.laptop_tc_p = can1_override_powermap_laptop_tc_p_decode(frame_encoded.laptop_tc_p); + frame_decoded.laptop_tc_mumax = can1_override_powermap_laptop_tc_mumax_decode(frame_encoded.laptop_tc_mumax); + return frame_decoded; +} + +inline frame::decoded::can1::override_laptop_2_t override_laptop_2(const can1_override_laptop_2_t frame_encoded) { + frame::decoded::can1::override_laptop_2_t frame_decoded; + frame_decoded.as_mission = can1_override_laptop_2_as_mission_decode(frame_encoded.as_mission); + frame_decoded.as_state = can1_override_laptop_2_as_state_decode(frame_encoded.as_state); + frame_decoded.manual_input_torque = can1_override_laptop_2_manual_input_torque_decode(frame_encoded.manual_input_torque); + frame_decoded.laptop_powerlimit = can1_override_laptop_2_laptop_powerlimit_decode(frame_encoded.laptop_powerlimit); + frame_decoded.laptop_torque_lim = can1_override_laptop_2_laptop_torque_lim_decode(frame_encoded.laptop_torque_lim); + return frame_decoded; +} + +inline frame::decoded::can1::override_epsc_cooling_t override_epsc_cooling(const can1_override_epsc_cooling_t frame_encoded) { + frame::decoded::can1::override_epsc_cooling_t frame_decoded; + frame_decoded.epsc_manual_angle = can1_override_epsc_cooling_epsc_manual_angle_decode(frame_encoded.epsc_manual_angle); + frame_decoded.epsc_mode = can1_override_epsc_cooling_epsc_mode_decode(frame_encoded.epsc_mode); + frame_decoded.ac_cooling_enable = can1_override_epsc_cooling_ac_cooling_enable_decode(frame_encoded.ac_cooling_enable); + frame_decoded.ts_cooling_enable = can1_override_epsc_cooling_ts_cooling_enable_decode(frame_encoded.ts_cooling_enable); + frame_decoded.ac_cooling_pwm = can1_override_epsc_cooling_ac_cooling_pwm_decode(frame_encoded.ac_cooling_pwm); + frame_decoded.ts_cooling_pwm = can1_override_epsc_cooling_ts_cooling_pwm_decode(frame_encoded.ts_cooling_pwm); + return frame_decoded; +} + +inline frame::decoded::can1::override_laptop_t override_laptop(const can1_override_laptop_t frame_encoded) { + frame::decoded::can1::override_laptop_t frame_decoded; + frame_decoded.fake_r2_d = can1_override_laptop_fake_r2_d_decode(frame_encoded.fake_r2_d); + frame_decoded.fake_soundbox_emergency = can1_override_laptop_fake_soundbox_emergency_decode(frame_encoded.fake_soundbox_emergency); + frame_decoded.fake_soundbox_r2_d = can1_override_laptop_fake_soundbox_r2_d_decode(frame_encoded.fake_soundbox_r2_d); + frame_decoded.fake_ts_active = can1_override_laptop_fake_ts_active_decode(frame_encoded.fake_ts_active); + frame_decoded.override_apps = can1_override_laptop_override_apps_decode(frame_encoded.override_apps); + frame_decoded.override_as_mission = can1_override_laptop_override_as_mission_decode(frame_encoded.override_as_mission); + frame_decoded.override_as_state = can1_override_laptop_override_as_state_decode(frame_encoded.override_as_state); + frame_decoded.override_epsc_mode = can1_override_laptop_override_epsc_mode_decode(frame_encoded.override_epsc_mode); + frame_decoded.override_pdu_ac_cooling_enable = can1_override_laptop_override_pdu_ac_cooling_enable_decode(frame_encoded.override_pdu_ac_cooling_enable); + frame_decoded.override_pdu_acu_enable = can1_override_laptop_override_pdu_acu_enable_decode(frame_encoded.override_pdu_acu_enable); + frame_decoded.override_pdu_drs_enable = can1_override_laptop_override_pdu_drs_enable_decode(frame_encoded.override_pdu_drs_enable); + frame_decoded.override_pdu_epsc_enable = can1_override_laptop_override_pdu_epsc_enable_decode(frame_encoded.override_pdu_epsc_enable); + frame_decoded.override_pdu_heartbeat = can1_override_laptop_override_pdu_heartbeat_decode(frame_encoded.override_pdu_heartbeat); + frame_decoded.override_pdu_lidar_enable = can1_override_laptop_override_pdu_lidar_enable_decode(frame_encoded.override_pdu_lidar_enable); + frame_decoded.override_pdu_pn_v1_enable = can1_override_laptop_override_pdu_pn_v1_enable_decode(frame_encoded.override_pdu_pn_v1_enable); + frame_decoded.override_pdu_pn_v2_enable = can1_override_laptop_override_pdu_pn_v2_enable_decode(frame_encoded.override_pdu_pn_v2_enable); + frame_decoded.override_pdu_ts_cooling_enable = can1_override_laptop_override_pdu_ts_cooling_enable_decode(frame_encoded.override_pdu_ts_cooling_enable); + frame_decoded.override_power_map = can1_override_laptop_override_power_map_decode(frame_encoded.override_power_map); + frame_decoded.override_tc_parameter = can1_override_laptop_override_tc_parameter_decode(frame_encoded.override_tc_parameter); + frame_decoded.override_torque_input = can1_override_laptop_override_torque_input_decode(frame_encoded.override_torque_input); + return frame_decoded; +} + +inline frame::decoded::can1::apps_override_t apps_override(const can1_apps_override_t frame_encoded) { + frame::decoded::can1::apps_override_t frame_decoded; + frame_decoded.apps_0_max = can1_apps_override_apps_0_max_decode(frame_encoded.apps_0_max); + frame_decoded.apps_0_min = can1_apps_override_apps_0_min_decode(frame_encoded.apps_0_min); + frame_decoded.apps_1_max = can1_apps_override_apps_1_max_decode(frame_encoded.apps_1_max); + frame_decoded.apps_1_min = can1_apps_override_apps_1_min_decode(frame_encoded.apps_1_min); + return frame_decoded; +} + +inline frame::decoded::can1::ftcu_damper_t ftcu_damper(const can1_ftcu_damper_t frame_encoded) { + frame::decoded::can1::ftcu_damper_t frame_decoded; + frame_decoded.ftcu_damper_fl = can1_ftcu_damper_ftcu_damper_fl_decode(frame_encoded.ftcu_damper_fl); + frame_decoded.ftcu_damper_fr = can1_ftcu_damper_ftcu_damper_fr_decode(frame_encoded.ftcu_damper_fr); + frame_decoded.ftcu_damper_rl = can1_ftcu_damper_ftcu_damper_rl_decode(frame_encoded.ftcu_damper_rl); + frame_decoded.ftcu_damper_rr = can1_ftcu_damper_ftcu_damper_rr_decode(frame_encoded.ftcu_damper_rr); + return frame_decoded; +} + +inline frame::decoded::can1::ftcu_param_confirm_t ftcu_param_confirm(const can1_ftcu_param_confirm_t frame_encoded) { + frame::decoded::can1::ftcu_param_confirm_t frame_decoded; + frame_decoded.ftcu_param_confirm = can1_ftcu_param_confirm_ftcu_param_confirm_decode(frame_encoded.ftcu_param_confirm); + return frame_decoded; +} + +inline frame::decoded::can1::sensornode_f_10_hz_t sensornode_f_10_hz(const can1_sensornode_f_10_hz_t frame_encoded) { + frame::decoded::can1::sensornode_f_10_hz_t frame_decoded; + frame_decoded.ls_l = can1_sensornode_f_10_hz_ls_l_decode(frame_encoded.ls_l); + frame_decoded.ls_r = can1_sensornode_f_10_hz_ls_r_decode(frame_encoded.ls_r); + frame_decoded.sdc_m_pre_bots = can1_sensornode_f_10_hz_sdc_m_pre_bots_decode(frame_encoded.sdc_m_pre_bots); + frame_decoded.sdc_m_post_ins = can1_sensornode_f_10_hz_sdc_m_post_ins_decode(frame_encoded.sdc_m_post_ins); + frame_decoded.sdc_m_post_bspd = can1_sensornode_f_10_hz_sdc_m_post_bspd_decode(frame_encoded.sdc_m_post_bspd); + frame_decoded.bdts_fl = can1_sensornode_f_10_hz_bdts_fl_decode(frame_encoded.bdts_fl); + frame_decoded.bdts_fr = can1_sensornode_f_10_hz_bdts_fr_decode(frame_encoded.bdts_fr); + return frame_decoded; +} + +inline frame::decoded::can1::sensornode_f_100_hz_1_t sensornode_f_100_hz_1(const can1_sensornode_f_100_hz_1_t frame_encoded) { + frame::decoded::can1::sensornode_f_100_hz_1_t frame_decoded; + frame_decoded.apps_1 = can1_sensornode_f_100_hz_1_apps_1_decode(frame_encoded.apps_1); + frame_decoded.apps_2 = can1_sensornode_f_100_hz_1_apps_2_decode(frame_encoded.apps_2); + frame_decoded.bp_f = can1_sensornode_f_100_hz_1_bp_f_decode(frame_encoded.bp_f); + frame_decoded.sas = can1_sensornode_f_100_hz_1_sas_decode(frame_encoded.sas); + frame_decoded.wss_fl = can1_sensornode_f_100_hz_1_wss_fl_decode(frame_encoded.wss_fl); + frame_decoded.wss_fr = can1_sensornode_f_100_hz_1_wss_fr_decode(frame_encoded.wss_fr); + return frame_decoded; +} + +inline frame::decoded::can1::sensornode_f_100_hz_2_t sensornode_f_100_hz_2(const can1_sensornode_f_100_hz_2_t frame_encoded) { + frame::decoded::can1::sensornode_f_100_hz_2_t frame_decoded; + frame_decoded.ds_fl = can1_sensornode_f_100_hz_2_ds_fl_decode(frame_encoded.ds_fl); + frame_decoded.ds_fr = can1_sensornode_f_100_hz_2_ds_fr_decode(frame_encoded.ds_fr); + return frame_decoded; +} + +inline frame::decoded::can1::sensornode_f_1k_hz_t sensornode_f_1k_hz(const can1_sensornode_f_1k_hz_t frame_encoded) { + frame::decoded::can1::sensornode_f_1k_hz_t frame_decoded; + frame_decoded.sls_fl = can1_sensornode_f_1k_hz_sls_fl_decode(frame_encoded.sls_fl); + frame_decoded.sls_fr = can1_sensornode_f_1k_hz_sls_fr_decode(frame_encoded.sls_fr); + return frame_decoded; +} + +inline frame::decoded::can1::sensornode_r_10_hz_t sensornode_r_10_hz(const can1_sensornode_r_10_hz_t frame_encoded) { + frame::decoded::can1::sensornode_r_10_hz_t frame_decoded; + frame_decoded.ext_ts_on = can1_sensornode_r_10_hz_ext_ts_on_decode(frame_encoded.ext_ts_on); + frame_decoded.sdc_m_pre_tsms = can1_sensornode_r_10_hz_sdc_m_pre_tsms_decode(frame_encoded.sdc_m_pre_tsms); + frame_decoded.sdc_m_post_tsms = can1_sensornode_r_10_hz_sdc_m_post_tsms_decode(frame_encoded.sdc_m_post_tsms); + frame_decoded.bdts_rl = can1_sensornode_r_10_hz_bdts_rl_decode(frame_encoded.bdts_rl); + frame_decoded.bdts_rr = can1_sensornode_r_10_hz_bdts_rr_decode(frame_encoded.bdts_rr); + frame_decoded.wt_bat = can1_sensornode_r_10_hz_wt_bat_decode(frame_encoded.wt_bat); + frame_decoded.wt_dt = can1_sensornode_r_10_hz_wt_dt_decode(frame_encoded.wt_dt); + frame_decoded.wp_bat = can1_sensornode_r_10_hz_wp_bat_decode(frame_encoded.wp_bat); + frame_decoded.wp_dt = can1_sensornode_r_10_hz_wp_dt_decode(frame_encoded.wp_dt); + return frame_decoded; +} + +inline frame::decoded::can1::sensornode_r_100_hz_t sensornode_r_100_hz(const can1_sensornode_r_100_hz_t frame_encoded) { + frame::decoded::can1::sensornode_r_100_hz_t frame_decoded; + frame_decoded.ebs_aps_1 = can1_sensornode_r_100_hz_ebs_aps_1_decode(frame_encoded.ebs_aps_1); + frame_decoded.ebs_aps_2 = can1_sensornode_r_100_hz_ebs_aps_2_decode(frame_encoded.ebs_aps_2); + frame_decoded.bp_r = can1_sensornode_r_100_hz_bp_r_decode(frame_encoded.bp_r); + frame_decoded.wss_rl = can1_sensornode_r_100_hz_wss_rl_decode(frame_encoded.wss_rl); + frame_decoded.wss_rr = can1_sensornode_r_100_hz_wss_rr_decode(frame_encoded.wss_rr); + frame_decoded.ds_rl = can1_sensornode_r_100_hz_ds_rl_decode(frame_encoded.ds_rl); + frame_decoded.ds_rr = can1_sensornode_r_100_hz_ds_rr_decode(frame_encoded.ds_rr); + return frame_decoded; +} + +inline frame::decoded::can1::sensornode_r_1k_hz_t sensornode_r_1k_hz(const can1_sensornode_r_1k_hz_t frame_encoded) { + frame::decoded::can1::sensornode_r_1k_hz_t frame_decoded; + frame_decoded.sls_rl = can1_sensornode_r_1k_hz_sls_rl_decode(frame_encoded.sls_rl); + frame_decoded.sls_rr = can1_sensornode_r_1k_hz_sls_rr_decode(frame_encoded.sls_rr); + return frame_decoded; +} + +inline frame::decoded::can1::pwm_duty_cycle_t pwm_duty_cycle(const can1_pwm_duty_cycle_t frame_encoded) { + frame::decoded::can1::pwm_duty_cycle_t frame_decoded; + frame_decoded.dc_drs = can1_pwm_duty_cycle_dc_drs_decode(frame_encoded.dc_drs); + frame_decoded.dc_assi_y = can1_pwm_duty_cycle_dc_assi_y_decode(frame_encoded.dc_assi_y); + frame_decoded.dc_assi_b = can1_pwm_duty_cycle_dc_assi_b_decode(frame_encoded.dc_assi_b); + frame_decoded.dc_bl = can1_pwm_duty_cycle_dc_bl_decode(frame_encoded.dc_bl); + frame_decoded.dc_fans_dt = can1_pwm_duty_cycle_dc_fans_dt_decode(frame_encoded.dc_fans_dt); + frame_decoded.dc_fans_bat = can1_pwm_duty_cycle_dc_fans_bat_decode(frame_encoded.dc_fans_bat); + frame_decoded.dc_sbx = can1_pwm_duty_cycle_dc_sbx_decode(frame_encoded.dc_sbx); + return frame_decoded; +} + +inline frame::decoded::can1::pwm_config_t pwm_config(const can1_pwm_config_t frame_encoded) { + frame::decoded::can1::pwm_config_t frame_decoded; + frame_decoded.freq_pwm1_drs_lighting = can1_pwm_config_freq_pwm1_drs_lighting_decode(frame_encoded.freq_pwm1_drs_lighting); + frame_decoded.freq_pwm3_fans = can1_pwm_config_freq_pwm3_fans_decode(frame_encoded.freq_pwm3_fans); + frame_decoded.freq_pwm2_sbx = can1_pwm_config_freq_pwm2_sbx_decode(frame_encoded.freq_pwm2_sbx); + return frame_decoded; +} + +inline frame::decoded::can1::dashboard_in_t dashboard_in(const can1_dashboard_in_t frame_encoded) { + frame::decoded::can1::dashboard_in_t frame_decoded; + frame_decoded.dashboard_r2_d_button = can1_dashboard_in_dashboard_r2_d_button_decode(frame_encoded.dashboard_r2_d_button); + frame_decoded.dashboard_ts_activate_button = can1_dashboard_in_dashboard_ts_activate_button_decode(frame_encoded.dashboard_ts_activate_button); + frame_decoded.dashboard_race_key = can1_dashboard_in_dashboard_race_key_decode(frame_encoded.dashboard_race_key); + frame_decoded.dashboard_sdc_in = can1_dashboard_in_dashboard_sdc_in_decode(frame_encoded.dashboard_sdc_in); + frame_decoded.dashboard_sdc_out = can1_dashboard_in_dashboard_sdc_out_decode(frame_encoded.dashboard_sdc_out); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave1_status_t ams_slave1_status(const can1_ams_slave1_status_t frame_encoded) { + frame::decoded::can1::ams_slave1_status_t frame_decoded; + frame_decoded.ams_slave_status_error = can1_ams_slave1_status_ams_slave_status_error_decode(frame_encoded.ams_slave_status_error); + frame_decoded.ams_slave_status_id = can1_ams_slave1_status_ams_slave_status_id_decode(frame_encoded.ams_slave_status_id); + frame_decoded.ams_slave_status_temp_sensor = can1_ams_slave1_status_ams_slave_status_temp_sensor_decode(frame_encoded.ams_slave_status_temp_sensor); + frame_decoded.ams_slave_status_min_cell_volt = can1_ams_slave1_status_ams_slave_status_min_cell_volt_decode(frame_encoded.ams_slave_status_min_cell_volt); + frame_decoded.ams_slave_status_max_cell_volt = can1_ams_slave1_status_ams_slave_status_max_cell_volt_decode(frame_encoded.ams_slave_status_max_cell_volt); + frame_decoded.ams_slave_status_max_temp = can1_ams_slave1_status_ams_slave_status_max_temp_decode(frame_encoded.ams_slave_status_max_temp); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave2_log0_t ams_slave2_log0(const can1_ams_slave2_log0_t frame_encoded) { + frame::decoded::can1::ams_slave2_log0_t frame_decoded; + frame_decoded.ams_slave_id_v0 = can1_ams_slave2_log0_ams_slave_id_v0_decode(frame_encoded.ams_slave_id_v0); + frame_decoded.ams_slave_id_v1 = can1_ams_slave2_log0_ams_slave_id_v1_decode(frame_encoded.ams_slave_id_v1); + frame_decoded.ams_slave_id_v2 = can1_ams_slave2_log0_ams_slave_id_v2_decode(frame_encoded.ams_slave_id_v2); + frame_decoded.ams_slave_id_v3 = can1_ams_slave2_log0_ams_slave_id_v3_decode(frame_encoded.ams_slave_id_v3); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave2_log1_t ams_slave2_log1(const can1_ams_slave2_log1_t frame_encoded) { + frame::decoded::can1::ams_slave2_log1_t frame_decoded; + frame_decoded.ams_slave_id_v4 = can1_ams_slave2_log1_ams_slave_id_v4_decode(frame_encoded.ams_slave_id_v4); + frame_decoded.ams_slave_id_v5 = can1_ams_slave2_log1_ams_slave_id_v5_decode(frame_encoded.ams_slave_id_v5); + frame_decoded.ams_slave_id_v6 = can1_ams_slave2_log1_ams_slave_id_v6_decode(frame_encoded.ams_slave_id_v6); + frame_decoded.ams_slave_id_v7 = can1_ams_slave2_log1_ams_slave_id_v7_decode(frame_encoded.ams_slave_id_v7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave2_log2_t ams_slave2_log2(const can1_ams_slave2_log2_t frame_encoded) { + frame::decoded::can1::ams_slave2_log2_t frame_decoded; + frame_decoded.ams_slave_id_v8 = can1_ams_slave2_log2_ams_slave_id_v8_decode(frame_encoded.ams_slave_id_v8); + frame_decoded.ams_slave_id_v9 = can1_ams_slave2_log2_ams_slave_id_v9_decode(frame_encoded.ams_slave_id_v9); + frame_decoded.ams_slave_id_v10 = can1_ams_slave2_log2_ams_slave_id_v10_decode(frame_encoded.ams_slave_id_v10); + frame_decoded.ams_slave_id_v11 = can1_ams_slave2_log2_ams_slave_id_v11_decode(frame_encoded.ams_slave_id_v11); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave2_log3_t ams_slave2_log3(const can1_ams_slave2_log3_t frame_encoded) { + frame::decoded::can1::ams_slave2_log3_t frame_decoded; + frame_decoded.ams_slave_id_v12 = can1_ams_slave2_log3_ams_slave_id_v12_decode(frame_encoded.ams_slave_id_v12); + frame_decoded.ams_slave_id_v13 = can1_ams_slave2_log3_ams_slave_id_v13_decode(frame_encoded.ams_slave_id_v13); + frame_decoded.ams_slave_id_v14 = can1_ams_slave2_log3_ams_slave_id_v14_decode(frame_encoded.ams_slave_id_v14); + frame_decoded.ams_slave_id_v15 = can1_ams_slave2_log3_ams_slave_id_v15_decode(frame_encoded.ams_slave_id_v15); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave2_log4_t ams_slave2_log4(const can1_ams_slave2_log4_t frame_encoded) { + frame::decoded::can1::ams_slave2_log4_t frame_decoded; + frame_decoded.ams_slave_id_failed_sensors = can1_ams_slave2_log4_ams_slave_id_failed_sensors_decode(frame_encoded.ams_slave_id_failed_sensors); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave2_log5_t ams_slave2_log5(const can1_ams_slave2_log5_t frame_encoded) { + frame::decoded::can1::ams_slave2_log5_t frame_decoded; + frame_decoded.ams_slave_id_t0 = can1_ams_slave2_log5_ams_slave_id_t0_decode(frame_encoded.ams_slave_id_t0); + frame_decoded.ams_slave_id_t1 = can1_ams_slave2_log5_ams_slave_id_t1_decode(frame_encoded.ams_slave_id_t1); + frame_decoded.ams_slave_id_t2 = can1_ams_slave2_log5_ams_slave_id_t2_decode(frame_encoded.ams_slave_id_t2); + frame_decoded.ams_slave_id_t3 = can1_ams_slave2_log5_ams_slave_id_t3_decode(frame_encoded.ams_slave_id_t3); + frame_decoded.ams_slave_id_t4 = can1_ams_slave2_log5_ams_slave_id_t4_decode(frame_encoded.ams_slave_id_t4); + frame_decoded.ams_slave_id_t5 = can1_ams_slave2_log5_ams_slave_id_t5_decode(frame_encoded.ams_slave_id_t5); + frame_decoded.ams_slave_id_t6 = can1_ams_slave2_log5_ams_slave_id_t6_decode(frame_encoded.ams_slave_id_t6); + frame_decoded.ams_slave_id_t7 = can1_ams_slave2_log5_ams_slave_id_t7_decode(frame_encoded.ams_slave_id_t7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave5_log6_t ams_slave5_log6(const can1_ams_slave5_log6_t frame_encoded) { + frame::decoded::can1::ams_slave5_log6_t frame_decoded; + frame_decoded.ams_slave_id_t8 = can1_ams_slave5_log6_ams_slave_id_t8_decode(frame_encoded.ams_slave_id_t8); + frame_decoded.ams_slave_id_t9 = can1_ams_slave5_log6_ams_slave_id_t9_decode(frame_encoded.ams_slave_id_t9); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave4_log6_t ams_slave4_log6(const can1_ams_slave4_log6_t frame_encoded) { + frame::decoded::can1::ams_slave4_log6_t frame_decoded; + frame_decoded.ams_slave_id_t8 = can1_ams_slave4_log6_ams_slave_id_t8_decode(frame_encoded.ams_slave_id_t8); + frame_decoded.ams_slave_id_t9 = can1_ams_slave4_log6_ams_slave_id_t9_decode(frame_encoded.ams_slave_id_t9); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave3_log6_t ams_slave3_log6(const can1_ams_slave3_log6_t frame_encoded) { + frame::decoded::can1::ams_slave3_log6_t frame_decoded; + frame_decoded.ams_slave_id_t8 = can1_ams_slave3_log6_ams_slave_id_t8_decode(frame_encoded.ams_slave_id_t8); + frame_decoded.ams_slave_id_t9 = can1_ams_slave3_log6_ams_slave_id_t9_decode(frame_encoded.ams_slave_id_t9); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave2_log6_t ams_slave2_log6(const can1_ams_slave2_log6_t frame_encoded) { + frame::decoded::can1::ams_slave2_log6_t frame_decoded; + frame_decoded.ams_slave_id_t8 = can1_ams_slave2_log6_ams_slave_id_t8_decode(frame_encoded.ams_slave_id_t8); + frame_decoded.ams_slave_id_t9 = can1_ams_slave2_log6_ams_slave_id_t9_decode(frame_encoded.ams_slave_id_t9); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave1_log6_t ams_slave1_log6(const can1_ams_slave1_log6_t frame_encoded) { + frame::decoded::can1::ams_slave1_log6_t frame_decoded; + frame_decoded.ams_slave_id_t8 = can1_ams_slave1_log6_ams_slave_id_t8_decode(frame_encoded.ams_slave_id_t8); + frame_decoded.ams_slave_id_t9 = can1_ams_slave1_log6_ams_slave_id_t9_decode(frame_encoded.ams_slave_id_t9); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave5_log5_t ams_slave5_log5(const can1_ams_slave5_log5_t frame_encoded) { + frame::decoded::can1::ams_slave5_log5_t frame_decoded; + frame_decoded.ams_slave_id_t0 = can1_ams_slave5_log5_ams_slave_id_t0_decode(frame_encoded.ams_slave_id_t0); + frame_decoded.ams_slave_id_t1 = can1_ams_slave5_log5_ams_slave_id_t1_decode(frame_encoded.ams_slave_id_t1); + frame_decoded.ams_slave_id_t2 = can1_ams_slave5_log5_ams_slave_id_t2_decode(frame_encoded.ams_slave_id_t2); + frame_decoded.ams_slave_id_t3 = can1_ams_slave5_log5_ams_slave_id_t3_decode(frame_encoded.ams_slave_id_t3); + frame_decoded.ams_slave_id_t4 = can1_ams_slave5_log5_ams_slave_id_t4_decode(frame_encoded.ams_slave_id_t4); + frame_decoded.ams_slave_id_t5 = can1_ams_slave5_log5_ams_slave_id_t5_decode(frame_encoded.ams_slave_id_t5); + frame_decoded.ams_slave_id_t6 = can1_ams_slave5_log5_ams_slave_id_t6_decode(frame_encoded.ams_slave_id_t6); + frame_decoded.ams_slave_id_t7 = can1_ams_slave5_log5_ams_slave_id_t7_decode(frame_encoded.ams_slave_id_t7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave4_log5_t ams_slave4_log5(const can1_ams_slave4_log5_t frame_encoded) { + frame::decoded::can1::ams_slave4_log5_t frame_decoded; + frame_decoded.ams_slave_id_t0 = can1_ams_slave4_log5_ams_slave_id_t0_decode(frame_encoded.ams_slave_id_t0); + frame_decoded.ams_slave_id_t1 = can1_ams_slave4_log5_ams_slave_id_t1_decode(frame_encoded.ams_slave_id_t1); + frame_decoded.ams_slave_id_t2 = can1_ams_slave4_log5_ams_slave_id_t2_decode(frame_encoded.ams_slave_id_t2); + frame_decoded.ams_slave_id_t3 = can1_ams_slave4_log5_ams_slave_id_t3_decode(frame_encoded.ams_slave_id_t3); + frame_decoded.ams_slave_id_t4 = can1_ams_slave4_log5_ams_slave_id_t4_decode(frame_encoded.ams_slave_id_t4); + frame_decoded.ams_slave_id_t5 = can1_ams_slave4_log5_ams_slave_id_t5_decode(frame_encoded.ams_slave_id_t5); + frame_decoded.ams_slave_id_t6 = can1_ams_slave4_log5_ams_slave_id_t6_decode(frame_encoded.ams_slave_id_t6); + frame_decoded.ams_slave_id_t7 = can1_ams_slave4_log5_ams_slave_id_t7_decode(frame_encoded.ams_slave_id_t7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave3_log5_t ams_slave3_log5(const can1_ams_slave3_log5_t frame_encoded) { + frame::decoded::can1::ams_slave3_log5_t frame_decoded; + frame_decoded.ams_slave_id_t0 = can1_ams_slave3_log5_ams_slave_id_t0_decode(frame_encoded.ams_slave_id_t0); + frame_decoded.ams_slave_id_t1 = can1_ams_slave3_log5_ams_slave_id_t1_decode(frame_encoded.ams_slave_id_t1); + frame_decoded.ams_slave_id_t2 = can1_ams_slave3_log5_ams_slave_id_t2_decode(frame_encoded.ams_slave_id_t2); + frame_decoded.ams_slave_id_t3 = can1_ams_slave3_log5_ams_slave_id_t3_decode(frame_encoded.ams_slave_id_t3); + frame_decoded.ams_slave_id_t4 = can1_ams_slave3_log5_ams_slave_id_t4_decode(frame_encoded.ams_slave_id_t4); + frame_decoded.ams_slave_id_t5 = can1_ams_slave3_log5_ams_slave_id_t5_decode(frame_encoded.ams_slave_id_t5); + frame_decoded.ams_slave_id_t6 = can1_ams_slave3_log5_ams_slave_id_t6_decode(frame_encoded.ams_slave_id_t6); + frame_decoded.ams_slave_id_t7 = can1_ams_slave3_log5_ams_slave_id_t7_decode(frame_encoded.ams_slave_id_t7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave1_log5_t ams_slave1_log5(const can1_ams_slave1_log5_t frame_encoded) { + frame::decoded::can1::ams_slave1_log5_t frame_decoded; + frame_decoded.ams_slave_id_t0 = can1_ams_slave1_log5_ams_slave_id_t0_decode(frame_encoded.ams_slave_id_t0); + frame_decoded.ams_slave_id_t1 = can1_ams_slave1_log5_ams_slave_id_t1_decode(frame_encoded.ams_slave_id_t1); + frame_decoded.ams_slave_id_t2 = can1_ams_slave1_log5_ams_slave_id_t2_decode(frame_encoded.ams_slave_id_t2); + frame_decoded.ams_slave_id_t3 = can1_ams_slave1_log5_ams_slave_id_t3_decode(frame_encoded.ams_slave_id_t3); + frame_decoded.ams_slave_id_t4 = can1_ams_slave1_log5_ams_slave_id_t4_decode(frame_encoded.ams_slave_id_t4); + frame_decoded.ams_slave_id_t5 = can1_ams_slave1_log5_ams_slave_id_t5_decode(frame_encoded.ams_slave_id_t5); + frame_decoded.ams_slave_id_t6 = can1_ams_slave1_log5_ams_slave_id_t6_decode(frame_encoded.ams_slave_id_t6); + frame_decoded.ams_slave_id_t7 = can1_ams_slave1_log5_ams_slave_id_t7_decode(frame_encoded.ams_slave_id_t7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave5_log4_t ams_slave5_log4(const can1_ams_slave5_log4_t frame_encoded) { + frame::decoded::can1::ams_slave5_log4_t frame_decoded; + frame_decoded.ams_slave_id_failed_sensors = can1_ams_slave5_log4_ams_slave_id_failed_sensors_decode(frame_encoded.ams_slave_id_failed_sensors); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave4_log4_t ams_slave4_log4(const can1_ams_slave4_log4_t frame_encoded) { + frame::decoded::can1::ams_slave4_log4_t frame_decoded; + frame_decoded.ams_slave_id_failed_sensors = can1_ams_slave4_log4_ams_slave_id_failed_sensors_decode(frame_encoded.ams_slave_id_failed_sensors); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave3_log4_t ams_slave3_log4(const can1_ams_slave3_log4_t frame_encoded) { + frame::decoded::can1::ams_slave3_log4_t frame_decoded; + frame_decoded.ams_slave_id_failed_sensors = can1_ams_slave3_log4_ams_slave_id_failed_sensors_decode(frame_encoded.ams_slave_id_failed_sensors); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave1_log4_t ams_slave1_log4(const can1_ams_slave1_log4_t frame_encoded) { + frame::decoded::can1::ams_slave1_log4_t frame_decoded; + frame_decoded.ams_slave_id_failed_sensors = can1_ams_slave1_log4_ams_slave_id_failed_sensors_decode(frame_encoded.ams_slave_id_failed_sensors); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave5_log3_t ams_slave5_log3(const can1_ams_slave5_log3_t frame_encoded) { + frame::decoded::can1::ams_slave5_log3_t frame_decoded; + frame_decoded.ams_slave_id_v12 = can1_ams_slave5_log3_ams_slave_id_v12_decode(frame_encoded.ams_slave_id_v12); + frame_decoded.ams_slave_id_v13 = can1_ams_slave5_log3_ams_slave_id_v13_decode(frame_encoded.ams_slave_id_v13); + frame_decoded.ams_slave_id_v14 = can1_ams_slave5_log3_ams_slave_id_v14_decode(frame_encoded.ams_slave_id_v14); + frame_decoded.ams_slave_id_v15 = can1_ams_slave5_log3_ams_slave_id_v15_decode(frame_encoded.ams_slave_id_v15); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave4_log3_t ams_slave4_log3(const can1_ams_slave4_log3_t frame_encoded) { + frame::decoded::can1::ams_slave4_log3_t frame_decoded; + frame_decoded.ams_slave_id_v12 = can1_ams_slave4_log3_ams_slave_id_v12_decode(frame_encoded.ams_slave_id_v12); + frame_decoded.ams_slave_id_v13 = can1_ams_slave4_log3_ams_slave_id_v13_decode(frame_encoded.ams_slave_id_v13); + frame_decoded.ams_slave_id_v14 = can1_ams_slave4_log3_ams_slave_id_v14_decode(frame_encoded.ams_slave_id_v14); + frame_decoded.ams_slave_id_v15 = can1_ams_slave4_log3_ams_slave_id_v15_decode(frame_encoded.ams_slave_id_v15); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave3_log3_t ams_slave3_log3(const can1_ams_slave3_log3_t frame_encoded) { + frame::decoded::can1::ams_slave3_log3_t frame_decoded; + frame_decoded.ams_slave_id_v12 = can1_ams_slave3_log3_ams_slave_id_v12_decode(frame_encoded.ams_slave_id_v12); + frame_decoded.ams_slave_id_v13 = can1_ams_slave3_log3_ams_slave_id_v13_decode(frame_encoded.ams_slave_id_v13); + frame_decoded.ams_slave_id_v14 = can1_ams_slave3_log3_ams_slave_id_v14_decode(frame_encoded.ams_slave_id_v14); + frame_decoded.ams_slave_id_v15 = can1_ams_slave3_log3_ams_slave_id_v15_decode(frame_encoded.ams_slave_id_v15); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave1_log3_t ams_slave1_log3(const can1_ams_slave1_log3_t frame_encoded) { + frame::decoded::can1::ams_slave1_log3_t frame_decoded; + frame_decoded.ams_slave_id_v12 = can1_ams_slave1_log3_ams_slave_id_v12_decode(frame_encoded.ams_slave_id_v12); + frame_decoded.ams_slave_id_v13 = can1_ams_slave1_log3_ams_slave_id_v13_decode(frame_encoded.ams_slave_id_v13); + frame_decoded.ams_slave_id_v14 = can1_ams_slave1_log3_ams_slave_id_v14_decode(frame_encoded.ams_slave_id_v14); + frame_decoded.ams_slave_id_v15 = can1_ams_slave1_log3_ams_slave_id_v15_decode(frame_encoded.ams_slave_id_v15); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave5_log2_t ams_slave5_log2(const can1_ams_slave5_log2_t frame_encoded) { + frame::decoded::can1::ams_slave5_log2_t frame_decoded; + frame_decoded.ams_slave_id_v8 = can1_ams_slave5_log2_ams_slave_id_v8_decode(frame_encoded.ams_slave_id_v8); + frame_decoded.ams_slave_id_v9 = can1_ams_slave5_log2_ams_slave_id_v9_decode(frame_encoded.ams_slave_id_v9); + frame_decoded.ams_slave_id_v10 = can1_ams_slave5_log2_ams_slave_id_v10_decode(frame_encoded.ams_slave_id_v10); + frame_decoded.ams_slave_id_v11 = can1_ams_slave5_log2_ams_slave_id_v11_decode(frame_encoded.ams_slave_id_v11); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave4_log2_t ams_slave4_log2(const can1_ams_slave4_log2_t frame_encoded) { + frame::decoded::can1::ams_slave4_log2_t frame_decoded; + frame_decoded.ams_slave_id_v8 = can1_ams_slave4_log2_ams_slave_id_v8_decode(frame_encoded.ams_slave_id_v8); + frame_decoded.ams_slave_id_v9 = can1_ams_slave4_log2_ams_slave_id_v9_decode(frame_encoded.ams_slave_id_v9); + frame_decoded.ams_slave_id_v10 = can1_ams_slave4_log2_ams_slave_id_v10_decode(frame_encoded.ams_slave_id_v10); + frame_decoded.ams_slave_id_v11 = can1_ams_slave4_log2_ams_slave_id_v11_decode(frame_encoded.ams_slave_id_v11); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave3_log2_t ams_slave3_log2(const can1_ams_slave3_log2_t frame_encoded) { + frame::decoded::can1::ams_slave3_log2_t frame_decoded; + frame_decoded.ams_slave_id_v8 = can1_ams_slave3_log2_ams_slave_id_v8_decode(frame_encoded.ams_slave_id_v8); + frame_decoded.ams_slave_id_v9 = can1_ams_slave3_log2_ams_slave_id_v9_decode(frame_encoded.ams_slave_id_v9); + frame_decoded.ams_slave_id_v10 = can1_ams_slave3_log2_ams_slave_id_v10_decode(frame_encoded.ams_slave_id_v10); + frame_decoded.ams_slave_id_v11 = can1_ams_slave3_log2_ams_slave_id_v11_decode(frame_encoded.ams_slave_id_v11); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave1_log2_t ams_slave1_log2(const can1_ams_slave1_log2_t frame_encoded) { + frame::decoded::can1::ams_slave1_log2_t frame_decoded; + frame_decoded.ams_slave_id_v8 = can1_ams_slave1_log2_ams_slave_id_v8_decode(frame_encoded.ams_slave_id_v8); + frame_decoded.ams_slave_id_v9 = can1_ams_slave1_log2_ams_slave_id_v9_decode(frame_encoded.ams_slave_id_v9); + frame_decoded.ams_slave_id_v10 = can1_ams_slave1_log2_ams_slave_id_v10_decode(frame_encoded.ams_slave_id_v10); + frame_decoded.ams_slave_id_v11 = can1_ams_slave1_log2_ams_slave_id_v11_decode(frame_encoded.ams_slave_id_v11); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave5_log1_t ams_slave5_log1(const can1_ams_slave5_log1_t frame_encoded) { + frame::decoded::can1::ams_slave5_log1_t frame_decoded; + frame_decoded.ams_slave_id_v4 = can1_ams_slave5_log1_ams_slave_id_v4_decode(frame_encoded.ams_slave_id_v4); + frame_decoded.ams_slave_id_v5 = can1_ams_slave5_log1_ams_slave_id_v5_decode(frame_encoded.ams_slave_id_v5); + frame_decoded.ams_slave_id_v6 = can1_ams_slave5_log1_ams_slave_id_v6_decode(frame_encoded.ams_slave_id_v6); + frame_decoded.ams_slave_id_v7 = can1_ams_slave5_log1_ams_slave_id_v7_decode(frame_encoded.ams_slave_id_v7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave4_log1_t ams_slave4_log1(const can1_ams_slave4_log1_t frame_encoded) { + frame::decoded::can1::ams_slave4_log1_t frame_decoded; + frame_decoded.ams_slave_id_v4 = can1_ams_slave4_log1_ams_slave_id_v4_decode(frame_encoded.ams_slave_id_v4); + frame_decoded.ams_slave_id_v5 = can1_ams_slave4_log1_ams_slave_id_v5_decode(frame_encoded.ams_slave_id_v5); + frame_decoded.ams_slave_id_v6 = can1_ams_slave4_log1_ams_slave_id_v6_decode(frame_encoded.ams_slave_id_v6); + frame_decoded.ams_slave_id_v7 = can1_ams_slave4_log1_ams_slave_id_v7_decode(frame_encoded.ams_slave_id_v7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave3_log1_t ams_slave3_log1(const can1_ams_slave3_log1_t frame_encoded) { + frame::decoded::can1::ams_slave3_log1_t frame_decoded; + frame_decoded.ams_slave_id_v4 = can1_ams_slave3_log1_ams_slave_id_v4_decode(frame_encoded.ams_slave_id_v4); + frame_decoded.ams_slave_id_v5 = can1_ams_slave3_log1_ams_slave_id_v5_decode(frame_encoded.ams_slave_id_v5); + frame_decoded.ams_slave_id_v6 = can1_ams_slave3_log1_ams_slave_id_v6_decode(frame_encoded.ams_slave_id_v6); + frame_decoded.ams_slave_id_v7 = can1_ams_slave3_log1_ams_slave_id_v7_decode(frame_encoded.ams_slave_id_v7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave1_log1_t ams_slave1_log1(const can1_ams_slave1_log1_t frame_encoded) { + frame::decoded::can1::ams_slave1_log1_t frame_decoded; + frame_decoded.ams_slave_id_v4 = can1_ams_slave1_log1_ams_slave_id_v4_decode(frame_encoded.ams_slave_id_v4); + frame_decoded.ams_slave_id_v5 = can1_ams_slave1_log1_ams_slave_id_v5_decode(frame_encoded.ams_slave_id_v5); + frame_decoded.ams_slave_id_v6 = can1_ams_slave1_log1_ams_slave_id_v6_decode(frame_encoded.ams_slave_id_v6); + frame_decoded.ams_slave_id_v7 = can1_ams_slave1_log1_ams_slave_id_v7_decode(frame_encoded.ams_slave_id_v7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave5_log0_t ams_slave5_log0(const can1_ams_slave5_log0_t frame_encoded) { + frame::decoded::can1::ams_slave5_log0_t frame_decoded; + frame_decoded.ams_slave_id_v0 = can1_ams_slave5_log0_ams_slave_id_v0_decode(frame_encoded.ams_slave_id_v0); + frame_decoded.ams_slave_id_v1 = can1_ams_slave5_log0_ams_slave_id_v1_decode(frame_encoded.ams_slave_id_v1); + frame_decoded.ams_slave_id_v2 = can1_ams_slave5_log0_ams_slave_id_v2_decode(frame_encoded.ams_slave_id_v2); + frame_decoded.ams_slave_id_v3 = can1_ams_slave5_log0_ams_slave_id_v3_decode(frame_encoded.ams_slave_id_v3); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave4_log0_t ams_slave4_log0(const can1_ams_slave4_log0_t frame_encoded) { + frame::decoded::can1::ams_slave4_log0_t frame_decoded; + frame_decoded.ams_slave_id_v0 = can1_ams_slave4_log0_ams_slave_id_v0_decode(frame_encoded.ams_slave_id_v0); + frame_decoded.ams_slave_id_v1 = can1_ams_slave4_log0_ams_slave_id_v1_decode(frame_encoded.ams_slave_id_v1); + frame_decoded.ams_slave_id_v2 = can1_ams_slave4_log0_ams_slave_id_v2_decode(frame_encoded.ams_slave_id_v2); + frame_decoded.ams_slave_id_v3 = can1_ams_slave4_log0_ams_slave_id_v3_decode(frame_encoded.ams_slave_id_v3); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave3_log0_t ams_slave3_log0(const can1_ams_slave3_log0_t frame_encoded) { + frame::decoded::can1::ams_slave3_log0_t frame_decoded; + frame_decoded.ams_slave_id_v0 = can1_ams_slave3_log0_ams_slave_id_v0_decode(frame_encoded.ams_slave_id_v0); + frame_decoded.ams_slave_id_v1 = can1_ams_slave3_log0_ams_slave_id_v1_decode(frame_encoded.ams_slave_id_v1); + frame_decoded.ams_slave_id_v2 = can1_ams_slave3_log0_ams_slave_id_v2_decode(frame_encoded.ams_slave_id_v2); + frame_decoded.ams_slave_id_v3 = can1_ams_slave3_log0_ams_slave_id_v3_decode(frame_encoded.ams_slave_id_v3); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave1_log0_t ams_slave1_log0(const can1_ams_slave1_log0_t frame_encoded) { + frame::decoded::can1::ams_slave1_log0_t frame_decoded; + frame_decoded.ams_slave_id_v0 = can1_ams_slave1_log0_ams_slave_id_v0_decode(frame_encoded.ams_slave_id_v0); + frame_decoded.ams_slave_id_v1 = can1_ams_slave1_log0_ams_slave_id_v1_decode(frame_encoded.ams_slave_id_v1); + frame_decoded.ams_slave_id_v2 = can1_ams_slave1_log0_ams_slave_id_v2_decode(frame_encoded.ams_slave_id_v2); + frame_decoded.ams_slave_id_v3 = can1_ams_slave1_log0_ams_slave_id_v3_decode(frame_encoded.ams_slave_id_v3); + return frame_decoded; +} + +inline frame::decoded::can1::pdu_heartbeat_t pdu_heartbeat(const can1_pdu_heartbeat_t frame_encoded) { + frame::decoded::can1::pdu_heartbeat_t frame_decoded; + frame_decoded.pdu_heartbeat = can1_pdu_heartbeat_pdu_heartbeat_decode(frame_encoded.pdu_heartbeat); + return frame_decoded; +} + +inline frame::decoded::can1::ftcu_pneumatik_t ftcu_pneumatik(const can1_ftcu_pneumatik_t frame_encoded) { + frame::decoded::can1::ftcu_pneumatik_t frame_decoded; + frame_decoded.ftcu_tank_pressure_1 = can1_ftcu_pneumatik_ftcu_tank_pressure_1_decode(frame_encoded.ftcu_tank_pressure_1); + frame_decoded.ftcu_tank_pressure_2 = can1_ftcu_pneumatik_ftcu_tank_pressure_2_decode(frame_encoded.ftcu_tank_pressure_2); + return frame_decoded; +} + +inline frame::decoded::can1::acu_tx_commands_t acu_tx_commands(const can1_acu_tx_commands_t frame_encoded) { + frame::decoded::can1::acu_tx_commands_t frame_decoded; + frame_decoded.abx_speed_fl = can1_acu_tx_commands_abx_speed_fl_decode(frame_encoded.abx_speed_fl); + frame_decoded.abx_speed_fr = can1_acu_tx_commands_abx_speed_fr_decode(frame_encoded.abx_speed_fr); + frame_decoded.abx_speed_rl = can1_acu_tx_commands_abx_speed_rl_decode(frame_encoded.abx_speed_rl); + frame_decoded.abx_speed_rr = can1_acu_tx_commands_abx_speed_rr_decode(frame_encoded.abx_speed_rr); + frame_decoded.abx_steering_angle_left = can1_acu_tx_commands_abx_steering_angle_left_decode(frame_encoded.abx_steering_angle_left); + frame_decoded.abx_steering_angle_right = can1_acu_tx_commands_abx_steering_angle_right_decode(frame_encoded.abx_steering_angle_right); + return frame_decoded; +} + +inline frame::decoded::can1::acu_rx_commands_t acu_rx_commands(const can1_acu_rx_commands_t frame_encoded) { + frame::decoded::can1::acu_rx_commands_t frame_decoded; + frame_decoded.acu_speed_target_left = can1_acu_rx_commands_acu_speed_target_left_decode(frame_encoded.acu_speed_target_left); + frame_decoded.acu_speed_target_right = can1_acu_rx_commands_acu_speed_target_right_decode(frame_encoded.acu_speed_target_right); + frame_decoded.acu_steering_angle_right = can1_acu_rx_commands_acu_steering_angle_right_decode(frame_encoded.acu_steering_angle_right); + frame_decoded.acu_steering_angle_left = can1_acu_rx_commands_acu_steering_angle_left_decode(frame_encoded.acu_steering_angle_left); + return frame_decoded; +} + +inline frame::decoded::can1::acu_rx_t acu_rx(const can1_acu_rx_t frame_encoded) { + frame::decoded::can1::acu_rx_t frame_decoded; + frame_decoded.acu_as_mission_complete = can1_acu_rx_acu_as_mission_complete_decode(frame_encoded.acu_as_mission_complete); + frame_decoded.acu_as_ok = can1_acu_rx_acu_as_ok_decode(frame_encoded.acu_as_ok); + frame_decoded.acu_drs = can1_acu_rx_acu_drs_decode(frame_encoded.acu_drs); + frame_decoded.acu_lap_count = can1_acu_rx_acu_lap_count_decode(frame_encoded.acu_lap_count); + frame_decoded.acu_cones_all = can1_acu_rx_acu_cones_all_decode(frame_encoded.acu_cones_all); + frame_decoded.acu_cones_actual = can1_acu_rx_acu_cones_actual_decode(frame_encoded.acu_cones_actual); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave0_log0_t ams_slave0_log0(const can1_ams_slave0_log0_t frame_encoded) { + frame::decoded::can1::ams_slave0_log0_t frame_decoded; + frame_decoded.ams_slave_id_v0 = can1_ams_slave0_log0_ams_slave_id_v0_decode(frame_encoded.ams_slave_id_v0); + frame_decoded.ams_slave_id_v1 = can1_ams_slave0_log0_ams_slave_id_v1_decode(frame_encoded.ams_slave_id_v1); + frame_decoded.ams_slave_id_v2 = can1_ams_slave0_log0_ams_slave_id_v2_decode(frame_encoded.ams_slave_id_v2); + frame_decoded.ams_slave_id_v3 = can1_ams_slave0_log0_ams_slave_id_v3_decode(frame_encoded.ams_slave_id_v3); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave0_log1_t ams_slave0_log1(const can1_ams_slave0_log1_t frame_encoded) { + frame::decoded::can1::ams_slave0_log1_t frame_decoded; + frame_decoded.ams_slave_id_v4 = can1_ams_slave0_log1_ams_slave_id_v4_decode(frame_encoded.ams_slave_id_v4); + frame_decoded.ams_slave_id_v5 = can1_ams_slave0_log1_ams_slave_id_v5_decode(frame_encoded.ams_slave_id_v5); + frame_decoded.ams_slave_id_v6 = can1_ams_slave0_log1_ams_slave_id_v6_decode(frame_encoded.ams_slave_id_v6); + frame_decoded.ams_slave_id_v7 = can1_ams_slave0_log1_ams_slave_id_v7_decode(frame_encoded.ams_slave_id_v7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave0_log3_t ams_slave0_log3(const can1_ams_slave0_log3_t frame_encoded) { + frame::decoded::can1::ams_slave0_log3_t frame_decoded; + frame_decoded.ams_slave_id_v12 = can1_ams_slave0_log3_ams_slave_id_v12_decode(frame_encoded.ams_slave_id_v12); + frame_decoded.ams_slave_id_v13 = can1_ams_slave0_log3_ams_slave_id_v13_decode(frame_encoded.ams_slave_id_v13); + frame_decoded.ams_slave_id_v14 = can1_ams_slave0_log3_ams_slave_id_v14_decode(frame_encoded.ams_slave_id_v14); + frame_decoded.ams_slave_id_v15 = can1_ams_slave0_log3_ams_slave_id_v15_decode(frame_encoded.ams_slave_id_v15); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave0_log4_t ams_slave0_log4(const can1_ams_slave0_log4_t frame_encoded) { + frame::decoded::can1::ams_slave0_log4_t frame_decoded; + frame_decoded.ams_slave_id_failed_sensors = can1_ams_slave0_log4_ams_slave_id_failed_sensors_decode(frame_encoded.ams_slave_id_failed_sensors); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave0_log5_t ams_slave0_log5(const can1_ams_slave0_log5_t frame_encoded) { + frame::decoded::can1::ams_slave0_log5_t frame_decoded; + frame_decoded.ams_slave_id_t0 = can1_ams_slave0_log5_ams_slave_id_t0_decode(frame_encoded.ams_slave_id_t0); + frame_decoded.ams_slave_id_t1 = can1_ams_slave0_log5_ams_slave_id_t1_decode(frame_encoded.ams_slave_id_t1); + frame_decoded.ams_slave_id_t2 = can1_ams_slave0_log5_ams_slave_id_t2_decode(frame_encoded.ams_slave_id_t2); + frame_decoded.ams_slave_id_t3 = can1_ams_slave0_log5_ams_slave_id_t3_decode(frame_encoded.ams_slave_id_t3); + frame_decoded.ams_slave_id_t4 = can1_ams_slave0_log5_ams_slave_id_t4_decode(frame_encoded.ams_slave_id_t4); + frame_decoded.ams_slave_id_t5 = can1_ams_slave0_log5_ams_slave_id_t5_decode(frame_encoded.ams_slave_id_t5); + frame_decoded.ams_slave_id_t6 = can1_ams_slave0_log5_ams_slave_id_t6_decode(frame_encoded.ams_slave_id_t6); + frame_decoded.ams_slave_id_t7 = can1_ams_slave0_log5_ams_slave_id_t7_decode(frame_encoded.ams_slave_id_t7); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave0_log6_t ams_slave0_log6(const can1_ams_slave0_log6_t frame_encoded) { + frame::decoded::can1::ams_slave0_log6_t frame_decoded; + frame_decoded.ams_slave_id_t8 = can1_ams_slave0_log6_ams_slave_id_t8_decode(frame_encoded.ams_slave_id_t8); + frame_decoded.ams_slave_id_t9 = can1_ams_slave0_log6_ams_slave_id_t9_decode(frame_encoded.ams_slave_id_t9); + return frame_decoded; +} + +inline frame::decoded::can1::acu_tx_t acu_tx(const can1_acu_tx_t frame_encoded) { + frame::decoded::can1::acu_tx_t frame_decoded; + frame_decoded.acu_as_mission = can1_acu_tx_acu_as_mission_decode(frame_encoded.acu_as_mission); + frame_decoded.acu_as_state = can1_acu_tx_acu_as_state_decode(frame_encoded.acu_as_state); + frame_decoded.acu_power_off = can1_acu_tx_acu_power_off_decode(frame_encoded.acu_power_off); + frame_decoded.acu_reset = can1_acu_tx_acu_reset_decode(frame_encoded.acu_reset); + frame_decoded.acu_allow_torque = can1_acu_tx_acu_allow_torque_decode(frame_encoded.acu_allow_torque); + frame_decoded.abx_con_mon_error = can1_acu_tx_abx_con_mon_error_decode(frame_encoded.abx_con_mon_error); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave5_status_t ams_slave5_status(const can1_ams_slave5_status_t frame_encoded) { + frame::decoded::can1::ams_slave5_status_t frame_decoded; + frame_decoded.ams_slave_status_error = can1_ams_slave5_status_ams_slave_status_error_decode(frame_encoded.ams_slave_status_error); + frame_decoded.ams_slave_status_id = can1_ams_slave5_status_ams_slave_status_id_decode(frame_encoded.ams_slave_status_id); + frame_decoded.ams_slave_status_temp_sensor = can1_ams_slave5_status_ams_slave_status_temp_sensor_decode(frame_encoded.ams_slave_status_temp_sensor); + frame_decoded.ams_slave_status_min_cell_volt = can1_ams_slave5_status_ams_slave_status_min_cell_volt_decode(frame_encoded.ams_slave_status_min_cell_volt); + frame_decoded.ams_slave_status_max_cell_volt = can1_ams_slave5_status_ams_slave_status_max_cell_volt_decode(frame_encoded.ams_slave_status_max_cell_volt); + frame_decoded.ams_slave_status_max_temp = can1_ams_slave5_status_ams_slave_status_max_temp_decode(frame_encoded.ams_slave_status_max_temp); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave4_status_t ams_slave4_status(const can1_ams_slave4_status_t frame_encoded) { + frame::decoded::can1::ams_slave4_status_t frame_decoded; + frame_decoded.ams_slave_status_error = can1_ams_slave4_status_ams_slave_status_error_decode(frame_encoded.ams_slave_status_error); + frame_decoded.ams_slave_status_id = can1_ams_slave4_status_ams_slave_status_id_decode(frame_encoded.ams_slave_status_id); + frame_decoded.ams_slave_status_temp_sensor = can1_ams_slave4_status_ams_slave_status_temp_sensor_decode(frame_encoded.ams_slave_status_temp_sensor); + frame_decoded.ams_slave_status_min_cell_volt = can1_ams_slave4_status_ams_slave_status_min_cell_volt_decode(frame_encoded.ams_slave_status_min_cell_volt); + frame_decoded.ams_slave_status_max_cell_volt = can1_ams_slave4_status_ams_slave_status_max_cell_volt_decode(frame_encoded.ams_slave_status_max_cell_volt); + frame_decoded.ams_slave_status_max_temp = can1_ams_slave4_status_ams_slave_status_max_temp_decode(frame_encoded.ams_slave_status_max_temp); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave3_status_t ams_slave3_status(const can1_ams_slave3_status_t frame_encoded) { + frame::decoded::can1::ams_slave3_status_t frame_decoded; + frame_decoded.ams_slave_status_error = can1_ams_slave3_status_ams_slave_status_error_decode(frame_encoded.ams_slave_status_error); + frame_decoded.ams_slave_status_id = can1_ams_slave3_status_ams_slave_status_id_decode(frame_encoded.ams_slave_status_id); + frame_decoded.ams_slave_status_temp_sensor = can1_ams_slave3_status_ams_slave_status_temp_sensor_decode(frame_encoded.ams_slave_status_temp_sensor); + frame_decoded.ams_slave_status_min_cell_volt = can1_ams_slave3_status_ams_slave_status_min_cell_volt_decode(frame_encoded.ams_slave_status_min_cell_volt); + frame_decoded.ams_slave_status_max_cell_volt = can1_ams_slave3_status_ams_slave_status_max_cell_volt_decode(frame_encoded.ams_slave_status_max_cell_volt); + frame_decoded.ams_slave_status_max_temp = can1_ams_slave3_status_ams_slave_status_max_temp_decode(frame_encoded.ams_slave_status_max_temp); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave2_status_t ams_slave2_status(const can1_ams_slave2_status_t frame_encoded) { + frame::decoded::can1::ams_slave2_status_t frame_decoded; + frame_decoded.ams_slave_status_error = can1_ams_slave2_status_ams_slave_status_error_decode(frame_encoded.ams_slave_status_error); + frame_decoded.ams_slave_status_id = can1_ams_slave2_status_ams_slave_status_id_decode(frame_encoded.ams_slave_status_id); + frame_decoded.ams_slave_status_temp_sensor = can1_ams_slave2_status_ams_slave_status_temp_sensor_decode(frame_encoded.ams_slave_status_temp_sensor); + frame_decoded.ams_slave_status_min_cell_volt = can1_ams_slave2_status_ams_slave_status_min_cell_volt_decode(frame_encoded.ams_slave_status_min_cell_volt); + frame_decoded.ams_slave_status_max_cell_volt = can1_ams_slave2_status_ams_slave_status_max_cell_volt_decode(frame_encoded.ams_slave_status_max_cell_volt); + frame_decoded.ams_slave_status_max_temp = can1_ams_slave2_status_ams_slave_status_max_temp_decode(frame_encoded.ams_slave_status_max_temp); + return frame_decoded; +} + +inline frame::decoded::can1::ams_error_t ams_error(const can1_ams_error_t frame_encoded) { + frame::decoded::can1::ams_error_t frame_decoded; + frame_decoded.ams_error_kind = can1_ams_error_ams_error_kind_decode(frame_encoded.ams_error_kind); + frame_decoded.ams_error_arg = can1_ams_error_ams_error_arg_decode(frame_encoded.ams_error_arg); + return frame_decoded; +} + +inline frame::decoded::can1::ftcu_cooling_t ftcu_cooling(const can1_ftcu_cooling_t frame_encoded) { + frame::decoded::can1::ftcu_cooling_t frame_decoded; + frame_decoded.ftcu_water_pressure_2 = can1_ftcu_cooling_ftcu_water_pressure_2_decode(frame_encoded.ftcu_water_pressure_2); + frame_decoded.ftcu_water_pressure_1 = can1_ftcu_cooling_ftcu_water_pressure_1_decode(frame_encoded.ftcu_water_pressure_1); + frame_decoded.ftcu_water_temperature_1 = can1_ftcu_cooling_ftcu_water_temperature_1_decode(frame_encoded.ftcu_water_temperature_1); + frame_decoded.ftcu_water_temperature_2 = can1_ftcu_cooling_ftcu_water_temperature_2_decode(frame_encoded.ftcu_water_temperature_2); + frame_decoded.ftcu_flow_rate = can1_ftcu_cooling_ftcu_flow_rate_decode(frame_encoded.ftcu_flow_rate); + return frame_decoded; +} + +inline frame::decoded::can1::ftcu_brake_t_t ftcu_brake_t(const can1_ftcu_brake_t_t frame_encoded) { + frame::decoded::can1::ftcu_brake_t_t frame_decoded; + frame_decoded.ftcu_brake_t_fl = can1_ftcu_brake_t_ftcu_brake_t_fl_decode(frame_encoded.ftcu_brake_t_fl); + frame_decoded.ftcu_brake_t_fr = can1_ftcu_brake_t_ftcu_brake_t_fr_decode(frame_encoded.ftcu_brake_t_fr); + frame_decoded.ftcu_brake_t_rl = can1_ftcu_brake_t_ftcu_brake_t_rl_decode(frame_encoded.ftcu_brake_t_rl); + frame_decoded.ftcu_brake_t_rr = can1_ftcu_brake_t_ftcu_brake_t_rr_decode(frame_encoded.ftcu_brake_t_rr); + return frame_decoded; +} + +inline frame::decoded::can1::ftcu_wheelspeed_t ftcu_wheelspeed(const can1_ftcu_wheelspeed_t frame_encoded) { + frame::decoded::can1::ftcu_wheelspeed_t frame_decoded; + frame_decoded.ftcu_wheelspeed_fl = can1_ftcu_wheelspeed_ftcu_wheelspeed_fl_decode(frame_encoded.ftcu_wheelspeed_fl); + frame_decoded.ftcu_wheelspeed_fr = can1_ftcu_wheelspeed_ftcu_wheelspeed_fr_decode(frame_encoded.ftcu_wheelspeed_fr); + frame_decoded.ftcu_wheelspeed_rl = can1_ftcu_wheelspeed_ftcu_wheelspeed_rl_decode(frame_encoded.ftcu_wheelspeed_rl); + frame_decoded.ftcu_wheelspeed_rr = can1_ftcu_wheelspeed_ftcu_wheelspeed_rr_decode(frame_encoded.ftcu_wheelspeed_rr); + frame_decoded.ftcu_distance_session = can1_ftcu_wheelspeed_ftcu_distance_session_decode(frame_encoded.ftcu_distance_session); + return frame_decoded; +} + +inline frame::decoded::can1::ftcu_timings_t ftcu_timings(const can1_ftcu_timings_t frame_encoded) { + frame::decoded::can1::ftcu_timings_t frame_decoded; + frame_decoded.ftcu_laptime_best = can1_ftcu_timings_ftcu_laptime_best_decode(frame_encoded.ftcu_laptime_best); + frame_decoded.ftcu_laptime_last = can1_ftcu_timings_ftcu_laptime_last_decode(frame_encoded.ftcu_laptime_last); + frame_decoded.ftcu_sectortime_best = can1_ftcu_timings_ftcu_sectortime_best_decode(frame_encoded.ftcu_sectortime_best); + frame_decoded.ftcu_sectortime_last = can1_ftcu_timings_ftcu_sectortime_last_decode(frame_encoded.ftcu_sectortime_last); + return frame_decoded; +} + +inline frame::decoded::can1::ftcu_driver_t ftcu_driver(const can1_ftcu_driver_t frame_encoded) { + frame::decoded::can1::ftcu_driver_t frame_decoded; + frame_decoded.ftcu_apps_percent = can1_ftcu_driver_ftcu_apps_percent_decode(frame_encoded.ftcu_apps_percent); + frame_decoded.ftcu_brake_pressure_f = can1_ftcu_driver_ftcu_brake_pressure_f_decode(frame_encoded.ftcu_brake_pressure_f); + frame_decoded.ftcu_brake_pressure_r = can1_ftcu_driver_ftcu_brake_pressure_r_decode(frame_encoded.ftcu_brake_pressure_r); + frame_decoded.ftcu_steering_angle = can1_ftcu_driver_ftcu_steering_angle_decode(frame_encoded.ftcu_steering_angle); + frame_decoded.ftcu_speed = can1_ftcu_driver_ftcu_speed_decode(frame_encoded.ftcu_speed); + frame_decoded.ftcu_lapcounter = can1_ftcu_driver_ftcu_lapcounter_decode(frame_encoded.ftcu_lapcounter); + frame_decoded.ftcu_sectorcounter = can1_ftcu_driver_ftcu_sectorcounter_decode(frame_encoded.ftcu_sectorcounter); + return frame_decoded; +} + +inline frame::decoded::can1::tts_rr_t tts_rr(const can1_tts_rr_t frame_encoded) { + frame::decoded::can1::tts_rr_t frame_decoded; + frame_decoded.tts_outer_left = can1_tts_rr_tts_outer_left_decode(frame_encoded.tts_outer_left); + frame_decoded.tts_center_left = can1_tts_rr_tts_center_left_decode(frame_encoded.tts_center_left); + frame_decoded.tts_center = can1_tts_rr_tts_center_decode(frame_encoded.tts_center); + frame_decoded.tts_center_right = can1_tts_rr_tts_center_right_decode(frame_encoded.tts_center_right); + frame_decoded.tts_outet_right = can1_tts_rr_tts_outet_right_decode(frame_encoded.tts_outet_right); + frame_decoded.tts_status = can1_tts_rr_tts_status_decode(frame_encoded.tts_status); + return frame_decoded; +} + +inline frame::decoded::can1::tts_rl_t tts_rl(const can1_tts_rl_t frame_encoded) { + frame::decoded::can1::tts_rl_t frame_decoded; + frame_decoded.tts_outer_left = can1_tts_rl_tts_outer_left_decode(frame_encoded.tts_outer_left); + frame_decoded.tts_center_left = can1_tts_rl_tts_center_left_decode(frame_encoded.tts_center_left); + frame_decoded.tts_center = can1_tts_rl_tts_center_decode(frame_encoded.tts_center); + frame_decoded.tts_center_right = can1_tts_rl_tts_center_right_decode(frame_encoded.tts_center_right); + frame_decoded.tts_outer_right = can1_tts_rl_tts_outer_right_decode(frame_encoded.tts_outer_right); + frame_decoded.tts_status = can1_tts_rl_tts_status_decode(frame_encoded.tts_status); + return frame_decoded; +} + +inline frame::decoded::can1::tts_fr_t tts_fr(const can1_tts_fr_t frame_encoded) { + frame::decoded::can1::tts_fr_t frame_decoded; + frame_decoded.tts_outer_left = can1_tts_fr_tts_outer_left_decode(frame_encoded.tts_outer_left); + frame_decoded.tts_center_left = can1_tts_fr_tts_center_left_decode(frame_encoded.tts_center_left); + frame_decoded.tts_center = can1_tts_fr_tts_center_decode(frame_encoded.tts_center); + frame_decoded.tts_center_right = can1_tts_fr_tts_center_right_decode(frame_encoded.tts_center_right); + frame_decoded.tts_outer_right = can1_tts_fr_tts_outer_right_decode(frame_encoded.tts_outer_right); + frame_decoded.tts_status = can1_tts_fr_tts_status_decode(frame_encoded.tts_status); + return frame_decoded; +} + +inline frame::decoded::can1::tts_fl_t tts_fl(const can1_tts_fl_t frame_encoded) { + frame::decoded::can1::tts_fl_t frame_decoded; + frame_decoded.tts_outer_left = can1_tts_fl_tts_outer_left_decode(frame_encoded.tts_outer_left); + frame_decoded.tts_center_left = can1_tts_fl_tts_center_left_decode(frame_encoded.tts_center_left); + frame_decoded.tts_center = can1_tts_fl_tts_center_decode(frame_encoded.tts_center); + frame_decoded.tts_center_right = can1_tts_fl_tts_center_right_decode(frame_encoded.tts_center_right); + frame_decoded.tts_outer_right = can1_tts_fl_tts_outer_right_decode(frame_encoded.tts_outer_right); + frame_decoded.tts_status = can1_tts_fl_tts_status_decode(frame_encoded.tts_status); + return frame_decoded; +} + +inline frame::decoded::can1::stw_param_set_t stw_param_set(const can1_stw_param_set_t frame_encoded) { + frame::decoded::can1::stw_param_set_t frame_decoded; + frame_decoded.stw_param_set = can1_stw_param_set_stw_param_set_decode(frame_encoded.stw_param_set); + frame_decoded.stw_param_tc_slipref = can1_stw_param_set_stw_param_tc_slipref_decode(frame_encoded.stw_param_tc_slipref); + frame_decoded.stw_param_tc_mumax = can1_stw_param_set_stw_param_tc_mumax_decode(frame_encoded.stw_param_tc_mumax); + frame_decoded.stw_param_tc_i = can1_stw_param_set_stw_param_tc_i_decode(frame_encoded.stw_param_tc_i); + frame_decoded.stw_param_plim = can1_stw_param_set_stw_param_plim_decode(frame_encoded.stw_param_plim); + frame_decoded.stw_param_tlim = can1_stw_param_set_stw_param_tlim_decode(frame_encoded.stw_param_tlim); + frame_decoded.stw_param_tc_p = can1_stw_param_set_stw_param_tc_p_decode(frame_encoded.stw_param_tc_p); + frame_decoded.stw_param_reku = can1_stw_param_set_stw_param_reku_decode(frame_encoded.stw_param_reku); + frame_decoded.stw_param_tc_on = can1_stw_param_set_stw_param_tc_on_decode(frame_encoded.stw_param_tc_on); + frame_decoded.stw_param_tv_on = can1_stw_param_set_stw_param_tv_on_decode(frame_encoded.stw_param_tv_on); + frame_decoded.stw_param_discipline = can1_stw_param_set_stw_param_discipline_decode(frame_encoded.stw_param_discipline); + frame_decoded.stw_param_slim = can1_stw_param_set_stw_param_slim_decode(frame_encoded.stw_param_slim); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave0_status_t ams_slave0_status(const can1_ams_slave0_status_t frame_encoded) { + frame::decoded::can1::ams_slave0_status_t frame_decoded; + frame_decoded.ams_slave_status_error = can1_ams_slave0_status_ams_slave_status_error_decode(frame_encoded.ams_slave_status_error); + frame_decoded.ams_slave_status_id = can1_ams_slave0_status_ams_slave_status_id_decode(frame_encoded.ams_slave_status_id); + frame_decoded.ams_slave_status_temp_sensor = can1_ams_slave0_status_ams_slave_status_temp_sensor_decode(frame_encoded.ams_slave_status_temp_sensor); + frame_decoded.ams_slave_status_min_cell_volt = can1_ams_slave0_status_ams_slave_status_min_cell_volt_decode(frame_encoded.ams_slave_status_min_cell_volt); + frame_decoded.ams_slave_status_max_cell_volt = can1_ams_slave0_status_ams_slave_status_max_cell_volt_decode(frame_encoded.ams_slave_status_max_cell_volt); + frame_decoded.ams_slave_status_max_temp = can1_ams_slave0_status_ams_slave_status_max_temp_decode(frame_encoded.ams_slave_status_max_temp); + return frame_decoded; +} + +inline frame::decoded::can1::ssu_message_t ssu_message(const can1_ssu_message_t frame_encoded) { + frame::decoded::can1::ssu_message_t frame_decoded; + frame_decoded.ssu_pressure = can1_ssu_message_ssu_pressure_decode(frame_encoded.ssu_pressure); + frame_decoded.ssu_air_temp = can1_ssu_message_ssu_air_temp_decode(frame_encoded.ssu_air_temp); + return frame_decoded; +} + +inline frame::decoded::can1::ams_status_t ams_status(const can1_ams_status_t frame_encoded) { + frame::decoded::can1::ams_status_t frame_decoded; + frame_decoded.ams_state = can1_ams_status_ams_state_decode(frame_encoded.ams_state); + frame_decoded.sdc_closed = can1_ams_status_sdc_closed_decode(frame_encoded.sdc_closed); + frame_decoded.soc = can1_ams_status_soc_decode(frame_encoded.soc); + frame_decoded.min_cell_volt = can1_ams_status_min_cell_volt_decode(frame_encoded.min_cell_volt); + frame_decoded.max_cell_temp = can1_ams_status_max_cell_temp_decode(frame_encoded.max_cell_temp); + frame_decoded.ams_imd_state = can1_ams_status_ams_imd_state_decode(frame_encoded.ams_imd_state); + frame_decoded.ams_imd_ok = can1_ams_status_ams_imd_ok_decode(frame_encoded.ams_imd_ok); + return frame_decoded; +} + +inline frame::decoded::can1::ams_slave_panic_t ams_slave_panic(const can1_ams_slave_panic_t frame_encoded) { + frame::decoded::can1::ams_slave_panic_t frame_decoded; + frame_decoded.ams_slave_panic_slave_id = can1_ams_slave_panic_ams_slave_panic_slave_id_decode(frame_encoded.ams_slave_panic_slave_id); + frame_decoded.ams_slave_panic_kind = can1_ams_slave_panic_ams_slave_panic_kind_decode(frame_encoded.ams_slave_panic_kind); + frame_decoded.ams_slave_panic_arg = can1_ams_slave_panic_ams_slave_panic_arg_decode(frame_encoded.ams_slave_panic_arg); + return frame_decoded; +} + +inline frame::decoded::can1::ams_in_t ams_in(const can1_ams_in_t frame_encoded) { + frame::decoded::can1::ams_in_t frame_decoded; + frame_decoded.ts_activate = can1_ams_in_ts_activate_decode(frame_encoded.ts_activate); + frame_decoded.inverters_discharged = can1_ams_in_inverters_discharged_decode(frame_encoded.inverters_discharged); + frame_decoded.lap_number = can1_ams_in_lap_number_decode(frame_encoded.lap_number); + return frame_decoded; +} + +inline frame::decoded::can1::shunt_current_t shunt_current(const can1_shunt_current_t frame_encoded) { + frame::decoded::can1::shunt_current_t frame_decoded; + frame_decoded.shunt_current = can1_shunt_current_shunt_current_decode(frame_encoded.shunt_current); + return frame_decoded; +} + +inline frame::decoded::can1::shunt_voltage1_t shunt_voltage1(const can1_shunt_voltage1_t frame_encoded) { + frame::decoded::can1::shunt_voltage1_t frame_decoded; + frame_decoded.shunt_voltage1 = can1_shunt_voltage1_shunt_voltage1_decode(frame_encoded.shunt_voltage1); + return frame_decoded; +} + +inline frame::decoded::can1::shunt_voltage2_t shunt_voltage2(const can1_shunt_voltage2_t frame_encoded) { + frame::decoded::can1::shunt_voltage2_t frame_decoded; + frame_decoded.shunt_voltage2 = can1_shunt_voltage2_shunt_voltage2_decode(frame_encoded.shunt_voltage2); + return frame_decoded; +} + +inline frame::decoded::can1::shunt_voltage3_t shunt_voltage3(const can1_shunt_voltage3_t frame_encoded) { + frame::decoded::can1::shunt_voltage3_t frame_decoded; + frame_decoded.shunt_voltage3 = can1_shunt_voltage3_shunt_voltage3_decode(frame_encoded.shunt_voltage3); + return frame_decoded; +} + +inline frame::decoded::can1::shunt_temperature_t shunt_temperature(const can1_shunt_temperature_t frame_encoded) { + frame::decoded::can1::shunt_temperature_t frame_decoded; + frame_decoded.shunt_temperature = can1_shunt_temperature_shunt_temperature_decode(frame_encoded.shunt_temperature); + return frame_decoded; +} + +inline frame::decoded::can1::pdu_command_t pdu_command(const can1_pdu_command_t frame_encoded) { + frame::decoded::can1::pdu_command_t frame_decoded; + frame_decoded.pdu_enable_misc = can1_pdu_command_pdu_enable_misc_decode(frame_encoded.pdu_enable_misc); + frame_decoded.pdu_enable_sdc = can1_pdu_command_pdu_enable_sdc_decode(frame_encoded.pdu_enable_sdc); + frame_decoded.pdu_enable_inverter = can1_pdu_command_pdu_enable_inverter_decode(frame_encoded.pdu_enable_inverter); + frame_decoded.pdu_enable_ts_cooling = can1_pdu_command_pdu_enable_ts_cooling_decode(frame_encoded.pdu_enable_ts_cooling); + frame_decoded.pdu_enable_acc_cooling = can1_pdu_command_pdu_enable_acc_cooling_decode(frame_encoded.pdu_enable_acc_cooling); + frame_decoded.pdu_enable_lldar = can1_pdu_command_pdu_enable_lldar_decode(frame_encoded.pdu_enable_lldar); + frame_decoded.pdu_enable_drs = can1_pdu_command_pdu_enable_drs_decode(frame_encoded.pdu_enable_drs); + frame_decoded.pdu_enable_epsc = can1_pdu_command_pdu_enable_epsc_decode(frame_encoded.pdu_enable_epsc); + frame_decoded.pdu_enable_acu = can1_pdu_command_pdu_enable_acu_decode(frame_encoded.pdu_enable_acu); + frame_decoded.pdu_enable_ebs_a = can1_pdu_command_pdu_enable_ebs_a_decode(frame_encoded.pdu_enable_ebs_a); + frame_decoded.pdu_enable_ebs_b = can1_pdu_command_pdu_enable_ebs_b_decode(frame_encoded.pdu_enable_ebs_b); + frame_decoded.pdu_enable_ebs_c = can1_pdu_command_pdu_enable_ebs_c_decode(frame_encoded.pdu_enable_ebs_c); + return frame_decoded; +} + +inline frame::decoded::can1::pdu_response_t pdu_response(const can1_pdu_response_t frame_encoded) { + frame::decoded::can1::pdu_response_t frame_decoded; + frame_decoded.pdu_alwayson_tx = can1_pdu_response_pdu_alwayson_tx_decode(frame_encoded.pdu_alwayson_tx); + frame_decoded.pdu_shutdown_circuit_tx = can1_pdu_response_pdu_shutdown_circuit_tx_decode(frame_encoded.pdu_shutdown_circuit_tx); + frame_decoded.pdu_lidar_tx = can1_pdu_response_pdu_lidar_tx_decode(frame_encoded.pdu_lidar_tx); + frame_decoded.pdu_acu_tx = can1_pdu_response_pdu_acu_tx_decode(frame_encoded.pdu_acu_tx); + frame_decoded.pdu_servos_regler_tx = can1_pdu_response_pdu_servos_regler_tx_decode(frame_encoded.pdu_servos_regler_tx); + frame_decoded.pdu_inverter_tx = can1_pdu_response_pdu_inverter_tx_decode(frame_encoded.pdu_inverter_tx); + frame_decoded.pdu_misc_tx = can1_pdu_response_pdu_misc_tx_decode(frame_encoded.pdu_misc_tx); + frame_decoded.pdu_servo_tx = can1_pdu_response_pdu_servo_tx_decode(frame_encoded.pdu_servo_tx); + frame_decoded.pdu_ebs_valve_1_tx = can1_pdu_response_pdu_ebs_valve_1_tx_decode(frame_encoded.pdu_ebs_valve_1_tx); + frame_decoded.pdu_ebs_valve_2_tx = can1_pdu_response_pdu_ebs_valve_2_tx_decode(frame_encoded.pdu_ebs_valve_2_tx); + frame_decoded.pdu_cs_valve_tx = can1_pdu_response_pdu_cs_valve_tx_decode(frame_encoded.pdu_cs_valve_tx); + frame_decoded.pdu_aggregat_tx = can1_pdu_response_pdu_aggregat_tx_decode(frame_encoded.pdu_aggregat_tx); + frame_decoded.pdu_steering_tx = can1_pdu_response_pdu_steering_tx_decode(frame_encoded.pdu_steering_tx); + frame_decoded.pdu_pwm_tsac_fans = can1_pdu_response_pdu_pwm_tsac_fans_decode(frame_encoded.pdu_pwm_tsac_fans); + frame_decoded.pdu_pwm_radiatot_fans_tx = can1_pdu_response_pdu_pwm_radiatot_fans_tx_decode(frame_encoded.pdu_pwm_radiatot_fans_tx); + frame_decoded.pdu_pwm_aggregat = can1_pdu_response_pdu_pwm_aggregat_decode(frame_encoded.pdu_pwm_aggregat); + frame_decoded.pdu_pwm_pump = can1_pdu_response_pdu_pwm_pump_decode(frame_encoded.pdu_pwm_pump); + frame_decoded.pdu_heartbeat_ok_tx = can1_pdu_response_pdu_heartbeat_ok_tx_decode(frame_encoded.pdu_heartbeat_ok_tx); + return frame_decoded; +} + +inline frame::decoded::can1::as_mission_fb_t as_mission_fb(const can1_as_mission_fb_t frame_encoded) { + frame::decoded::can1::as_mission_fb_t frame_decoded; + frame_decoded.mission_selection = can1_as_mission_fb_mission_selection_decode(frame_encoded.mission_selection); + return frame_decoded; +} + +inline frame::decoded::can1::stw_mission_selected_t stw_mission_selected(const can1_stw_mission_selected_t frame_encoded) { + frame::decoded::can1::stw_mission_selected_t frame_decoded; + frame_decoded.mission_selection = can1_stw_mission_selected_mission_selection_decode(frame_encoded.mission_selection); + return frame_decoded; +} + +inline frame::decoded::can1::epsc_out_t epsc_out(const can1_epsc_out_t frame_encoded) { + frame::decoded::can1::epsc_out_t frame_decoded; + frame_decoded.epsc_measured_rpm = can1_epsc_out_epsc_measured_rpm_decode(frame_encoded.epsc_measured_rpm); + frame_decoded.epsc_measured_steering_angle = can1_epsc_out_epsc_measured_steering_angle_decode(frame_encoded.epsc_measured_steering_angle); + frame_decoded.epsc_measured_mosfet_temperature = can1_epsc_out_epsc_measured_mosfet_temperature_decode(frame_encoded.epsc_measured_mosfet_temperature); + frame_decoded.epsc_measured_voltage = can1_epsc_out_epsc_measured_voltage_decode(frame_encoded.epsc_measured_voltage); + frame_decoded.epsc_measured_current = can1_epsc_out_epsc_measured_current_decode(frame_encoded.epsc_measured_current); + return frame_decoded; +} + +inline frame::decoded::can1::epsc_steering_in_t epsc_steering_in(const can1_epsc_steering_in_t frame_encoded) { + frame::decoded::can1::epsc_steering_in_t frame_decoded; + frame_decoded.epsc_desired_steering_angle = can1_epsc_steering_in_epsc_desired_steering_angle_decode(frame_encoded.epsc_desired_steering_angle); + return frame_decoded; +} + +inline frame::decoded::can1::stw_buttons_t stw_buttons(const can1_stw_buttons_t frame_encoded) { + frame::decoded::can1::stw_buttons_t frame_decoded; + frame_decoded.stw_button_drs = can1_stw_buttons_stw_button_drs_decode(frame_encoded.stw_button_drs); + frame_decoded.stw_button_1 = can1_stw_buttons_stw_button_1_decode(frame_encoded.stw_button_1); + frame_decoded.stw_button_2 = can1_stw_buttons_stw_button_2_decode(frame_encoded.stw_button_2); + frame_decoded.stw_button_3 = can1_stw_buttons_stw_button_3_decode(frame_encoded.stw_button_3); + frame_decoded.stw_button_4 = can1_stw_buttons_stw_button_4_decode(frame_encoded.stw_button_4); + return frame_decoded; +} + +inline frame::decoded::can1::stw_status_t stw_status(const can1_stw_status_t frame_encoded) { + frame::decoded::can1::stw_status_t frame_decoded; + frame_decoded.lap_count = can1_stw_status_lap_count_decode(frame_encoded.lap_count); + frame_decoded.err_pdu = can1_stw_status_err_pdu_decode(frame_encoded.err_pdu); + frame_decoded.err_res = can1_stw_status_err_res_decode(frame_encoded.err_res); + frame_decoded.r2_d_progress = can1_stw_status_r2_d_progress_decode(frame_encoded.r2_d_progress); + frame_decoded.as_state_stw = can1_stw_status_as_state_stw_decode(frame_encoded.as_state_stw); + frame_decoded.err_as = can1_stw_status_err_as_decode(frame_encoded.err_as); + frame_decoded.err_app_sp = can1_stw_status_err_app_sp_decode(frame_encoded.err_app_sp); + frame_decoded.err_s_bspd = can1_stw_status_err_s_bspd_decode(frame_encoded.err_s_bspd); + frame_decoded.err_scs = can1_stw_status_err_scs_decode(frame_encoded.err_scs); + frame_decoded.err_con_mon = can1_stw_status_err_con_mon_decode(frame_encoded.err_con_mon); + frame_decoded.err_ini_chk = can1_stw_status_err_ini_chk_decode(frame_encoded.err_ini_chk); + frame_decoded.err_inv2 = can1_stw_status_err_inv2_decode(frame_encoded.err_inv2); + frame_decoded.err_inv1 = can1_stw_status_err_inv1_decode(frame_encoded.err_inv1); + frame_decoded.err_ams = can1_stw_status_err_ams_decode(frame_encoded.err_ams); + frame_decoded.err_sdc = can1_stw_status_err_sdc_decode(frame_encoded.err_sdc); + frame_decoded.sdc_status = can1_stw_status_sdc_status_decode(frame_encoded.sdc_status); + frame_decoded.inv2_ready = can1_stw_status_inv2_ready_decode(frame_encoded.inv2_ready); + frame_decoded.inv1_ready = can1_stw_status_inv1_ready_decode(frame_encoded.inv1_ready); + frame_decoded.energy_per_lap = can1_stw_status_energy_per_lap_decode(frame_encoded.energy_per_lap); + frame_decoded.ini_chk_state = can1_stw_status_ini_chk_state_decode(frame_encoded.ini_chk_state); + return frame_decoded; +} + +inline frame::decoded::can1::pdu_current_1_t pdu_current_1(const can1_pdu_current_1_t frame_encoded) { + frame::decoded::can1::pdu_current_1_t frame_decoded; + frame_decoded.pdu_always_on_current = can1_pdu_current_1_pdu_always_on_current_decode(frame_encoded.pdu_always_on_current); + frame_decoded.pdu_lvms_current = can1_pdu_current_1_pdu_lvms_current_decode(frame_encoded.pdu_lvms_current); + frame_decoded.pdu_asms_current = can1_pdu_current_1_pdu_asms_current_decode(frame_encoded.pdu_asms_current); + frame_decoded.pdu_misc_current = can1_pdu_current_1_pdu_misc_current_decode(frame_encoded.pdu_misc_current); + return frame_decoded; +} + +inline frame::decoded::can1::pdu_current_2_t pdu_current_2(const can1_pdu_current_2_t frame_encoded) { + frame::decoded::can1::pdu_current_2_t frame_decoded; + frame_decoded.pdu_sdc_current = can1_pdu_current_2_pdu_sdc_current_decode(frame_encoded.pdu_sdc_current); + frame_decoded.pdu_inverter_current = can1_pdu_current_2_pdu_inverter_current_decode(frame_encoded.pdu_inverter_current); + frame_decoded.pdu_ts_cooling_current = can1_pdu_current_2_pdu_ts_cooling_current_decode(frame_encoded.pdu_ts_cooling_current); + frame_decoded.pdu_acc_cooling_current = can1_pdu_current_2_pdu_acc_cooling_current_decode(frame_encoded.pdu_acc_cooling_current); + return frame_decoded; +} + +inline frame::decoded::can1::pdu_current_3_t pdu_current_3(const can1_pdu_current_3_t frame_encoded) { + frame::decoded::can1::pdu_current_3_t frame_decoded; + frame_decoded.pdu_lidar_current = can1_pdu_current_3_pdu_lidar_current_decode(frame_encoded.pdu_lidar_current); + frame_decoded.pdu_drs_current = can1_pdu_current_3_pdu_drs_current_decode(frame_encoded.pdu_drs_current); + frame_decoded.pdu_epsc_current = can1_pdu_current_3_pdu_epsc_current_decode(frame_encoded.pdu_epsc_current); + frame_decoded.pdu_acu_current = can1_pdu_current_3_pdu_acu_current_decode(frame_encoded.pdu_acu_current); + return frame_decoded; +} + +inline frame::decoded::can1::pdu_current_4_t pdu_current_4(const can1_pdu_current_4_t frame_encoded) { + frame::decoded::can1::pdu_current_4_t frame_decoded; + frame_decoded.pdu_ebs_a_current = can1_pdu_current_4_pdu_ebs_a_current_decode(frame_encoded.pdu_ebs_a_current); + frame_decoded.pdu_ebs_b_current = can1_pdu_current_4_pdu_ebs_b_current_decode(frame_encoded.pdu_ebs_b_current); + return frame_decoded; +} + +inline frame::decoded::can1::epsc_config_in_t epsc_config_in(const can1_epsc_config_in_t frame_encoded) { + frame::decoded::can1::epsc_config_in_t frame_decoded; + frame_decoded.epsc_config_p_gain = can1_epsc_config_in_epsc_config_p_gain_decode(frame_encoded.epsc_config_p_gain); + frame_decoded.epsc_config_i_gain = can1_epsc_config_in_epsc_config_i_gain_decode(frame_encoded.epsc_config_i_gain); + frame_decoded.epsc_config_d_gain = can1_epsc_config_in_epsc_config_d_gain_decode(frame_encoded.epsc_config_d_gain); + return frame_decoded; +} + +} +} + +// callback structure +namespace callback { +namespace can1 { + inline std::function inverter_velocity = NULL; + inline std::function inverter_errors_warnings = NULL; + inline std::function inverter_torque_actual_cw = NULL; + inline std::function inverter_temperatur = NULL; + inline std::function inverter_torque_wanted = NULL; + inline std::function sdo_telemetrie_rx_node1 = NULL; + inline std::function sdo_telemetrie_rx_node2 = NULL; + inline std::function sdo_telemetrie_tx = NULL; + inline std::function laptop_sdo_node = NULL; + inline std::function x_sens_long_lat = NULL; + inline std::function x_sens_rateofturn = NULL; + inline std::function x_sens_acceleration = NULL; + inline std::function x_sens_velocity = NULL; + inline std::function telemetrie = NULL; + inline std::function override_powermap = NULL; + inline std::function override_laptop_2 = NULL; + inline std::function override_epsc_cooling = NULL; + inline std::function override_laptop = NULL; + inline std::function apps_override = NULL; + inline std::function ftcu_damper = NULL; + inline std::function ftcu_param_confirm = NULL; + inline std::function sensornode_f_10_hz = NULL; + inline std::function sensornode_f_100_hz_1 = NULL; + inline std::function sensornode_f_100_hz_2 = NULL; + inline std::function sensornode_f_1k_hz = NULL; + inline std::function sensornode_r_10_hz = NULL; + inline std::function sensornode_r_100_hz = NULL; + inline std::function sensornode_r_1k_hz = NULL; + inline std::function pwm_duty_cycle = NULL; + inline std::function pwm_config = NULL; + inline std::function dashboard_in = NULL; + inline std::function ams_slave1_status = NULL; + inline std::function ams_slave2_log0 = NULL; + inline std::function ams_slave2_log1 = NULL; + inline std::function ams_slave2_log2 = NULL; + inline std::function ams_slave2_log3 = NULL; + inline std::function ams_slave2_log4 = NULL; + inline std::function ams_slave2_log5 = NULL; + inline std::function ams_slave5_log6 = NULL; + inline std::function ams_slave4_log6 = NULL; + inline std::function ams_slave3_log6 = NULL; + inline std::function ams_slave2_log6 = NULL; + inline std::function ams_slave1_log6 = NULL; + inline std::function ams_slave5_log5 = NULL; + inline std::function ams_slave4_log5 = NULL; + inline std::function ams_slave3_log5 = NULL; + inline std::function ams_slave1_log5 = NULL; + inline std::function ams_slave5_log4 = NULL; + inline std::function ams_slave4_log4 = NULL; + inline std::function ams_slave3_log4 = NULL; + inline std::function ams_slave1_log4 = NULL; + inline std::function ams_slave5_log3 = NULL; + inline std::function ams_slave4_log3 = NULL; + inline std::function ams_slave3_log3 = NULL; + inline std::function ams_slave1_log3 = NULL; + inline std::function ams_slave5_log2 = NULL; + inline std::function ams_slave4_log2 = NULL; + inline std::function ams_slave3_log2 = NULL; + inline std::function ams_slave1_log2 = NULL; + inline std::function ams_slave5_log1 = NULL; + inline std::function ams_slave4_log1 = NULL; + inline std::function ams_slave3_log1 = NULL; + inline std::function ams_slave1_log1 = NULL; + inline std::function ams_slave5_log0 = NULL; + inline std::function ams_slave4_log0 = NULL; + inline std::function ams_slave3_log0 = NULL; + inline std::function ams_slave1_log0 = NULL; + inline std::function pdu_heartbeat = NULL; + inline std::function ftcu_pneumatik = NULL; + inline std::function acu_tx_commands = NULL; + inline std::function acu_rx_commands = NULL; + inline std::function acu_rx = NULL; + inline std::function ams_slave0_log0 = NULL; + inline std::function ams_slave0_log1 = NULL; + inline std::function ams_slave0_log3 = NULL; + inline std::function ams_slave0_log4 = NULL; + inline std::function ams_slave0_log5 = NULL; + inline std::function ams_slave0_log6 = NULL; + inline std::function acu_tx = NULL; + inline std::function ams_slave5_status = NULL; + inline std::function ams_slave4_status = NULL; + inline std::function ams_slave3_status = NULL; + inline std::function ams_slave2_status = NULL; + inline std::function ams_error = NULL; + inline std::function ftcu_cooling = NULL; + inline std::function ftcu_brake_t = NULL; + inline std::function ftcu_wheelspeed = NULL; + inline std::function ftcu_timings = NULL; + inline std::function ftcu_driver = NULL; + inline std::function tts_rr = NULL; + inline std::function tts_rl = NULL; + inline std::function tts_fr = NULL; + inline std::function tts_fl = NULL; + inline std::function stw_param_set = NULL; + inline std::function ams_slave0_status = NULL; + inline std::function ssu_message = NULL; + inline std::function ams_status = NULL; + inline std::function ams_slave_panic = NULL; + inline std::function ams_in = NULL; + inline std::function shunt_current = NULL; + inline std::function shunt_voltage1 = NULL; + inline std::function shunt_voltage2 = NULL; + inline std::function shunt_voltage3 = NULL; + inline std::function shunt_temperature = NULL; + inline std::function pdu_command = NULL; + inline std::function pdu_response = NULL; + inline std::function as_mission_fb = NULL; + inline std::function stw_mission_selected = NULL; + inline std::function epsc_out = NULL; + inline std::function epsc_steering_in = NULL; + inline std::function stw_buttons = NULL; + inline std::function stw_status = NULL; + inline std::function pdu_current_1 = NULL; + inline std::function pdu_current_2 = NULL; + inline std::function pdu_current_3 = NULL; + inline std::function pdu_current_4 = NULL; + inline std::function epsc_config_in = NULL; +} +} +} + + +#endif // _ENDEC_HPP_ + diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/transceiver.h b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/transceiver.h new file mode 100644 index 0000000..c146da6 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/transceiver.h @@ -0,0 +1,275 @@ +#ifndef _TRANSCEIVER_H_ +#define _TRANSCEIVER_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "endec.hpp" + +#define STANDARD_TIMEOUT 10000 + +namespace canlib { +class Transceiver { +public: + Transceiver(); + Transceiver(std::string device_name, std::vector filters); + ~Transceiver(); + + virtual void transmit(canlib::frame::decoded::can1::inverter_velocity_t inverter_velocity); + virtual void transmit(canlib::frame::decoded::can1::inverter_errors_warnings_t inverter_errors_warnings); + virtual void transmit(canlib::frame::decoded::can1::inverter_torque_actual_cw_t inverter_torque_actual_cw); + virtual void transmit(canlib::frame::decoded::can1::inverter_temperatur_t inverter_temperatur); + virtual void transmit(canlib::frame::decoded::can1::inverter_torque_wanted_t inverter_torque_wanted); + virtual void transmit(canlib::frame::decoded::can1::sdo_telemetrie_rx_node1_t sdo_telemetrie_rx_node1); + virtual void transmit(canlib::frame::decoded::can1::sdo_telemetrie_rx_node2_t sdo_telemetrie_rx_node2); + virtual void transmit(canlib::frame::decoded::can1::sdo_telemetrie_tx_t sdo_telemetrie_tx); + virtual void transmit(canlib::frame::decoded::can1::laptop_sdo_node_t laptop_sdo_node); + virtual void transmit(canlib::frame::decoded::can1::x_sens_long_lat_t x_sens_long_lat); + virtual void transmit(canlib::frame::decoded::can1::x_sens_rateofturn_t x_sens_rateofturn); + virtual void transmit(canlib::frame::decoded::can1::x_sens_acceleration_t x_sens_acceleration); + virtual void transmit(canlib::frame::decoded::can1::x_sens_velocity_t x_sens_velocity); + virtual void transmit(canlib::frame::decoded::can1::telemetrie_t telemetrie); + virtual void transmit(canlib::frame::decoded::can1::override_powermap_t override_powermap); + virtual void transmit(canlib::frame::decoded::can1::override_laptop_2_t override_laptop_2); + virtual void transmit(canlib::frame::decoded::can1::override_epsc_cooling_t override_epsc_cooling); + virtual void transmit(canlib::frame::decoded::can1::override_laptop_t override_laptop); + virtual void transmit(canlib::frame::decoded::can1::apps_override_t apps_override); + virtual void transmit(canlib::frame::decoded::can1::ftcu_damper_t ftcu_damper); + virtual void transmit(canlib::frame::decoded::can1::ftcu_param_confirm_t ftcu_param_confirm); + virtual void transmit(canlib::frame::decoded::can1::sensornode_f_10_hz_t sensornode_f_10_hz); + virtual void transmit(canlib::frame::decoded::can1::sensornode_f_100_hz_1_t sensornode_f_100_hz_1); + virtual void transmit(canlib::frame::decoded::can1::sensornode_f_100_hz_2_t sensornode_f_100_hz_2); + virtual void transmit(canlib::frame::decoded::can1::sensornode_f_1k_hz_t sensornode_f_1k_hz); + virtual void transmit(canlib::frame::decoded::can1::sensornode_r_10_hz_t sensornode_r_10_hz); + virtual void transmit(canlib::frame::decoded::can1::sensornode_r_100_hz_t sensornode_r_100_hz); + virtual void transmit(canlib::frame::decoded::can1::sensornode_r_1k_hz_t sensornode_r_1k_hz); + virtual void transmit(canlib::frame::decoded::can1::pwm_duty_cycle_t pwm_duty_cycle); + virtual void transmit(canlib::frame::decoded::can1::pwm_config_t pwm_config); + virtual void transmit(canlib::frame::decoded::can1::dashboard_in_t dashboard_in); + virtual void transmit(canlib::frame::decoded::can1::ams_slave1_status_t ams_slave1_status); + virtual void transmit(canlib::frame::decoded::can1::ams_slave2_log0_t ams_slave2_log0); + virtual void transmit(canlib::frame::decoded::can1::ams_slave2_log1_t ams_slave2_log1); + virtual void transmit(canlib::frame::decoded::can1::ams_slave2_log2_t ams_slave2_log2); + virtual void transmit(canlib::frame::decoded::can1::ams_slave2_log3_t ams_slave2_log3); + virtual void transmit(canlib::frame::decoded::can1::ams_slave2_log4_t ams_slave2_log4); + virtual void transmit(canlib::frame::decoded::can1::ams_slave2_log5_t ams_slave2_log5); + virtual void transmit(canlib::frame::decoded::can1::ams_slave5_log6_t ams_slave5_log6); + virtual void transmit(canlib::frame::decoded::can1::ams_slave4_log6_t ams_slave4_log6); + virtual void transmit(canlib::frame::decoded::can1::ams_slave3_log6_t ams_slave3_log6); + virtual void transmit(canlib::frame::decoded::can1::ams_slave2_log6_t ams_slave2_log6); + virtual void transmit(canlib::frame::decoded::can1::ams_slave1_log6_t ams_slave1_log6); + virtual void transmit(canlib::frame::decoded::can1::ams_slave5_log5_t ams_slave5_log5); + virtual void transmit(canlib::frame::decoded::can1::ams_slave4_log5_t ams_slave4_log5); + virtual void transmit(canlib::frame::decoded::can1::ams_slave3_log5_t ams_slave3_log5); + virtual void transmit(canlib::frame::decoded::can1::ams_slave1_log5_t ams_slave1_log5); + virtual void transmit(canlib::frame::decoded::can1::ams_slave5_log4_t ams_slave5_log4); + virtual void transmit(canlib::frame::decoded::can1::ams_slave4_log4_t ams_slave4_log4); + virtual void transmit(canlib::frame::decoded::can1::ams_slave3_log4_t ams_slave3_log4); + virtual void transmit(canlib::frame::decoded::can1::ams_slave1_log4_t ams_slave1_log4); + virtual void transmit(canlib::frame::decoded::can1::ams_slave5_log3_t ams_slave5_log3); + virtual void transmit(canlib::frame::decoded::can1::ams_slave4_log3_t ams_slave4_log3); + virtual void transmit(canlib::frame::decoded::can1::ams_slave3_log3_t ams_slave3_log3); + virtual void transmit(canlib::frame::decoded::can1::ams_slave1_log3_t ams_slave1_log3); + virtual void transmit(canlib::frame::decoded::can1::ams_slave5_log2_t ams_slave5_log2); + virtual void transmit(canlib::frame::decoded::can1::ams_slave4_log2_t ams_slave4_log2); + virtual void transmit(canlib::frame::decoded::can1::ams_slave3_log2_t ams_slave3_log2); + virtual void transmit(canlib::frame::decoded::can1::ams_slave1_log2_t ams_slave1_log2); + virtual void transmit(canlib::frame::decoded::can1::ams_slave5_log1_t ams_slave5_log1); + virtual void transmit(canlib::frame::decoded::can1::ams_slave4_log1_t ams_slave4_log1); + virtual void transmit(canlib::frame::decoded::can1::ams_slave3_log1_t ams_slave3_log1); + virtual void transmit(canlib::frame::decoded::can1::ams_slave1_log1_t ams_slave1_log1); + virtual void transmit(canlib::frame::decoded::can1::ams_slave5_log0_t ams_slave5_log0); + virtual void transmit(canlib::frame::decoded::can1::ams_slave4_log0_t ams_slave4_log0); + virtual void transmit(canlib::frame::decoded::can1::ams_slave3_log0_t ams_slave3_log0); + virtual void transmit(canlib::frame::decoded::can1::ams_slave1_log0_t ams_slave1_log0); + virtual void transmit(canlib::frame::decoded::can1::pdu_heartbeat_t pdu_heartbeat); + virtual void transmit(canlib::frame::decoded::can1::ftcu_pneumatik_t ftcu_pneumatik); + virtual void transmit(canlib::frame::decoded::can1::acu_tx_commands_t acu_tx_commands); + virtual void transmit(canlib::frame::decoded::can1::acu_rx_commands_t acu_rx_commands); + virtual void transmit(canlib::frame::decoded::can1::acu_rx_t acu_rx); + virtual void transmit(canlib::frame::decoded::can1::ams_slave0_log0_t ams_slave0_log0); + virtual void transmit(canlib::frame::decoded::can1::ams_slave0_log1_t ams_slave0_log1); + virtual void transmit(canlib::frame::decoded::can1::ams_slave0_log3_t ams_slave0_log3); + virtual void transmit(canlib::frame::decoded::can1::ams_slave0_log4_t ams_slave0_log4); + virtual void transmit(canlib::frame::decoded::can1::ams_slave0_log5_t ams_slave0_log5); + virtual void transmit(canlib::frame::decoded::can1::ams_slave0_log6_t ams_slave0_log6); + virtual void transmit(canlib::frame::decoded::can1::acu_tx_t acu_tx); + virtual void transmit(canlib::frame::decoded::can1::ams_slave5_status_t ams_slave5_status); + virtual void transmit(canlib::frame::decoded::can1::ams_slave4_status_t ams_slave4_status); + virtual void transmit(canlib::frame::decoded::can1::ams_slave3_status_t ams_slave3_status); + virtual void transmit(canlib::frame::decoded::can1::ams_slave2_status_t ams_slave2_status); + virtual void transmit(canlib::frame::decoded::can1::ams_error_t ams_error); + virtual void transmit(canlib::frame::decoded::can1::ftcu_cooling_t ftcu_cooling); + virtual void transmit(canlib::frame::decoded::can1::ftcu_brake_t_t ftcu_brake_t); + virtual void transmit(canlib::frame::decoded::can1::ftcu_wheelspeed_t ftcu_wheelspeed); + virtual void transmit(canlib::frame::decoded::can1::ftcu_timings_t ftcu_timings); + virtual void transmit(canlib::frame::decoded::can1::ftcu_driver_t ftcu_driver); + virtual void transmit(canlib::frame::decoded::can1::tts_rr_t tts_rr); + virtual void transmit(canlib::frame::decoded::can1::tts_rl_t tts_rl); + virtual void transmit(canlib::frame::decoded::can1::tts_fr_t tts_fr); + virtual void transmit(canlib::frame::decoded::can1::tts_fl_t tts_fl); + virtual void transmit(canlib::frame::decoded::can1::stw_param_set_t stw_param_set); + virtual void transmit(canlib::frame::decoded::can1::ams_slave0_status_t ams_slave0_status); + virtual void transmit(canlib::frame::decoded::can1::ssu_message_t ssu_message); + virtual void transmit(canlib::frame::decoded::can1::ams_status_t ams_status); + virtual void transmit(canlib::frame::decoded::can1::ams_slave_panic_t ams_slave_panic); + virtual void transmit(canlib::frame::decoded::can1::ams_in_t ams_in); + virtual void transmit(canlib::frame::decoded::can1::shunt_current_t shunt_current); + virtual void transmit(canlib::frame::decoded::can1::shunt_voltage1_t shunt_voltage1); + virtual void transmit(canlib::frame::decoded::can1::shunt_voltage2_t shunt_voltage2); + virtual void transmit(canlib::frame::decoded::can1::shunt_voltage3_t shunt_voltage3); + virtual void transmit(canlib::frame::decoded::can1::shunt_temperature_t shunt_temperature); + virtual void transmit(canlib::frame::decoded::can1::pdu_command_t pdu_command); + virtual void transmit(canlib::frame::decoded::can1::pdu_response_t pdu_response); + virtual void transmit(canlib::frame::decoded::can1::as_mission_fb_t as_mission_fb); + virtual void transmit(canlib::frame::decoded::can1::stw_mission_selected_t stw_mission_selected); + virtual void transmit(canlib::frame::decoded::can1::epsc_out_t epsc_out); + virtual void transmit(canlib::frame::decoded::can1::epsc_steering_in_t epsc_steering_in); + virtual void transmit(canlib::frame::decoded::can1::stw_buttons_t stw_buttons); + virtual void transmit(canlib::frame::decoded::can1::stw_status_t stw_status); + virtual void transmit(canlib::frame::decoded::can1::pdu_current_1_t pdu_current_1); + virtual void transmit(canlib::frame::decoded::can1::pdu_current_2_t pdu_current_2); + virtual void transmit(canlib::frame::decoded::can1::pdu_current_3_t pdu_current_3); + virtual void transmit(canlib::frame::decoded::can1::pdu_current_4_t pdu_current_4); + virtual void transmit(canlib::frame::decoded::can1::epsc_config_in_t epsc_config_in); + + virtual bool receive(int timeout_us = STANDARD_TIMEOUT); + +private: + virtual bool read(struct can_frame &frame, int timeout_usec); + + can1_inverter_velocity_t can1_inverter_velocity_frame; + can1_inverter_errors_warnings_t can1_inverter_errors_warnings_frame; + can1_inverter_torque_actual_cw_t can1_inverter_torque_actual_cw_frame; + can1_inverter_temperatur_t can1_inverter_temperatur_frame; + can1_inverter_torque_wanted_t can1_inverter_torque_wanted_frame; + can1_sdo_telemetrie_rx_node1_t can1_sdo_telemetrie_rx_node1_frame; + can1_sdo_telemetrie_rx_node2_t can1_sdo_telemetrie_rx_node2_frame; + can1_sdo_telemetrie_tx_t can1_sdo_telemetrie_tx_frame; + can1_laptop_sdo_node_t can1_laptop_sdo_node_frame; + can1_x_sens_long_lat_t can1_x_sens_long_lat_frame; + can1_x_sens_rateofturn_t can1_x_sens_rateofturn_frame; + can1_x_sens_acceleration_t can1_x_sens_acceleration_frame; + can1_x_sens_velocity_t can1_x_sens_velocity_frame; + can1_telemetrie_t can1_telemetrie_frame; + can1_override_powermap_t can1_override_powermap_frame; + can1_override_laptop_2_t can1_override_laptop_2_frame; + can1_override_epsc_cooling_t can1_override_epsc_cooling_frame; + can1_override_laptop_t can1_override_laptop_frame; + can1_apps_override_t can1_apps_override_frame; + can1_ftcu_damper_t can1_ftcu_damper_frame; + can1_ftcu_param_confirm_t can1_ftcu_param_confirm_frame; + can1_sensornode_f_10_hz_t can1_sensornode_f_10_hz_frame; + can1_sensornode_f_100_hz_1_t can1_sensornode_f_100_hz_1_frame; + can1_sensornode_f_100_hz_2_t can1_sensornode_f_100_hz_2_frame; + can1_sensornode_f_1k_hz_t can1_sensornode_f_1k_hz_frame; + can1_sensornode_r_10_hz_t can1_sensornode_r_10_hz_frame; + can1_sensornode_r_100_hz_t can1_sensornode_r_100_hz_frame; + can1_sensornode_r_1k_hz_t can1_sensornode_r_1k_hz_frame; + can1_pwm_duty_cycle_t can1_pwm_duty_cycle_frame; + can1_pwm_config_t can1_pwm_config_frame; + can1_dashboard_in_t can1_dashboard_in_frame; + can1_ams_slave1_status_t can1_ams_slave1_status_frame; + can1_ams_slave2_log0_t can1_ams_slave2_log0_frame; + can1_ams_slave2_log1_t can1_ams_slave2_log1_frame; + can1_ams_slave2_log2_t can1_ams_slave2_log2_frame; + can1_ams_slave2_log3_t can1_ams_slave2_log3_frame; + can1_ams_slave2_log4_t can1_ams_slave2_log4_frame; + can1_ams_slave2_log5_t can1_ams_slave2_log5_frame; + can1_ams_slave5_log6_t can1_ams_slave5_log6_frame; + can1_ams_slave4_log6_t can1_ams_slave4_log6_frame; + can1_ams_slave3_log6_t can1_ams_slave3_log6_frame; + can1_ams_slave2_log6_t can1_ams_slave2_log6_frame; + can1_ams_slave1_log6_t can1_ams_slave1_log6_frame; + can1_ams_slave5_log5_t can1_ams_slave5_log5_frame; + can1_ams_slave4_log5_t can1_ams_slave4_log5_frame; + can1_ams_slave3_log5_t can1_ams_slave3_log5_frame; + can1_ams_slave1_log5_t can1_ams_slave1_log5_frame; + can1_ams_slave5_log4_t can1_ams_slave5_log4_frame; + can1_ams_slave4_log4_t can1_ams_slave4_log4_frame; + can1_ams_slave3_log4_t can1_ams_slave3_log4_frame; + can1_ams_slave1_log4_t can1_ams_slave1_log4_frame; + can1_ams_slave5_log3_t can1_ams_slave5_log3_frame; + can1_ams_slave4_log3_t can1_ams_slave4_log3_frame; + can1_ams_slave3_log3_t can1_ams_slave3_log3_frame; + can1_ams_slave1_log3_t can1_ams_slave1_log3_frame; + can1_ams_slave5_log2_t can1_ams_slave5_log2_frame; + can1_ams_slave4_log2_t can1_ams_slave4_log2_frame; + can1_ams_slave3_log2_t can1_ams_slave3_log2_frame; + can1_ams_slave1_log2_t can1_ams_slave1_log2_frame; + can1_ams_slave5_log1_t can1_ams_slave5_log1_frame; + can1_ams_slave4_log1_t can1_ams_slave4_log1_frame; + can1_ams_slave3_log1_t can1_ams_slave3_log1_frame; + can1_ams_slave1_log1_t can1_ams_slave1_log1_frame; + can1_ams_slave5_log0_t can1_ams_slave5_log0_frame; + can1_ams_slave4_log0_t can1_ams_slave4_log0_frame; + can1_ams_slave3_log0_t can1_ams_slave3_log0_frame; + can1_ams_slave1_log0_t can1_ams_slave1_log0_frame; + can1_pdu_heartbeat_t can1_pdu_heartbeat_frame; + can1_ftcu_pneumatik_t can1_ftcu_pneumatik_frame; + can1_acu_tx_commands_t can1_acu_tx_commands_frame; + can1_acu_rx_commands_t can1_acu_rx_commands_frame; + can1_acu_rx_t can1_acu_rx_frame; + can1_ams_slave0_log0_t can1_ams_slave0_log0_frame; + can1_ams_slave0_log1_t can1_ams_slave0_log1_frame; + can1_ams_slave0_log3_t can1_ams_slave0_log3_frame; + can1_ams_slave0_log4_t can1_ams_slave0_log4_frame; + can1_ams_slave0_log5_t can1_ams_slave0_log5_frame; + can1_ams_slave0_log6_t can1_ams_slave0_log6_frame; + can1_acu_tx_t can1_acu_tx_frame; + can1_ams_slave5_status_t can1_ams_slave5_status_frame; + can1_ams_slave4_status_t can1_ams_slave4_status_frame; + can1_ams_slave3_status_t can1_ams_slave3_status_frame; + can1_ams_slave2_status_t can1_ams_slave2_status_frame; + can1_ams_error_t can1_ams_error_frame; + can1_ftcu_cooling_t can1_ftcu_cooling_frame; + can1_ftcu_brake_t_t can1_ftcu_brake_t_frame; + can1_ftcu_wheelspeed_t can1_ftcu_wheelspeed_frame; + can1_ftcu_timings_t can1_ftcu_timings_frame; + can1_ftcu_driver_t can1_ftcu_driver_frame; + can1_tts_rr_t can1_tts_rr_frame; + can1_tts_rl_t can1_tts_rl_frame; + can1_tts_fr_t can1_tts_fr_frame; + can1_tts_fl_t can1_tts_fl_frame; + can1_stw_param_set_t can1_stw_param_set_frame; + can1_ams_slave0_status_t can1_ams_slave0_status_frame; + can1_ssu_message_t can1_ssu_message_frame; + can1_ams_status_t can1_ams_status_frame; + can1_ams_slave_panic_t can1_ams_slave_panic_frame; + can1_ams_in_t can1_ams_in_frame; + can1_shunt_current_t can1_shunt_current_frame; + can1_shunt_voltage1_t can1_shunt_voltage1_frame; + can1_shunt_voltage2_t can1_shunt_voltage2_frame; + can1_shunt_voltage3_t can1_shunt_voltage3_frame; + can1_shunt_temperature_t can1_shunt_temperature_frame; + can1_pdu_command_t can1_pdu_command_frame; + can1_pdu_response_t can1_pdu_response_frame; + can1_as_mission_fb_t can1_as_mission_fb_frame; + can1_stw_mission_selected_t can1_stw_mission_selected_frame; + can1_epsc_out_t can1_epsc_out_frame; + can1_epsc_steering_in_t can1_epsc_steering_in_frame; + can1_stw_buttons_t can1_stw_buttons_frame; + can1_stw_status_t can1_stw_status_frame; + can1_pdu_current_1_t can1_pdu_current_1_frame; + can1_pdu_current_2_t can1_pdu_current_2_frame; + can1_pdu_current_3_t can1_pdu_current_3_frame; + can1_pdu_current_4_t can1_pdu_current_4_frame; + can1_epsc_config_in_t can1_epsc_config_in_frame; + + struct can_frame frame; + int socket_instance; +}; + +} + +#endif // _TRANSCEIVER_H_ diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libConfig.cmake b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libConfig.cmake new file mode 100644 index 0000000..0e5ab3a --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libConfig.cmake @@ -0,0 +1,28 @@ + +####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() ####### +####### Any changes to this file will be overwritten by the next CMake run #### +####### The input file was Config.cmake.in ######## + +get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE) + +macro(set_and_check _var _file) + set(${_var} "${_file}") + if(NOT EXISTS "${_file}") + message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") + endif() +endmacro() + +macro(check_required_components _NAME) + foreach(comp ${${_NAME}_FIND_COMPONENTS}) + if(NOT ${_NAME}_${comp}_FOUND) + if(${_NAME}_FIND_REQUIRED_${comp}) + set(${_NAME}_FOUND FALSE) + endif() + endif() + endforeach() +endmacro() + +#################################################################################### + +include("${CMAKE_CURRENT_LIST_DIR}/ft_can_transceiver_libTargets.cmake") + diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libTargets-noconfig.cmake b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libTargets-noconfig.cmake new file mode 100644 index 0000000..16eea27 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libTargets-noconfig.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "ft_can_transceiver_lib" for configuration "" +set_property(TARGET ft_can_transceiver_lib APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(ft_can_transceiver_lib PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libft_can_transceiver_lib.so" + IMPORTED_SONAME_NOCONFIG "libft_can_transceiver_lib.so" + ) + +list(APPEND _cmake_import_check_targets ft_can_transceiver_lib ) +list(APPEND _cmake_import_check_files_for_ft_can_transceiver_lib "${_IMPORT_PREFIX}/lib/libft_can_transceiver_lib.so" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libTargets.cmake b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libTargets.cmake new file mode 100644 index 0000000..fea8588 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libTargets.cmake @@ -0,0 +1,102 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8) + message(FATAL_ERROR "CMake >= 2.8.0 required") +endif() +if(CMAKE_VERSION VERSION_LESS "2.8.3") + message(FATAL_ERROR "CMake >= 2.8.3 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.8.3...3.26) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_cmake_targets_defined "") +set(_cmake_targets_not_defined "") +set(_cmake_expected_targets "") +foreach(_cmake_expected_target IN ITEMS ft_can_transceiver_lib) + list(APPEND _cmake_expected_targets "${_cmake_expected_target}") + if(TARGET "${_cmake_expected_target}") + list(APPEND _cmake_targets_defined "${_cmake_expected_target}") + else() + list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}") + endif() +endforeach() +unset(_cmake_expected_target) +if(_cmake_targets_defined STREQUAL _cmake_expected_targets) + unset(_cmake_targets_defined) + unset(_cmake_targets_not_defined) + unset(_cmake_expected_targets) + unset(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT _cmake_targets_defined STREQUAL "") + string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}") + string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n") +endif() +unset(_cmake_targets_defined) +unset(_cmake_targets_not_defined) +unset(_cmake_expected_targets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target ft_can_transceiver_lib +add_library(ft_can_transceiver_lib SHARED IMPORTED) + +set_target_properties(ft_can_transceiver_lib PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include;${_IMPORT_PREFIX}/include" +) + +# Load information for each installed configuration. +file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/ft_can_transceiver_libTargets-*.cmake") +foreach(_cmake_config_file IN LISTS _cmake_config_files) + include("${_cmake_config_file}") +endforeach() +unset(_cmake_config_file) +unset(_cmake_config_files) + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(_cmake_target IN LISTS _cmake_import_check_targets) + foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}") + if(NOT EXISTS "${_cmake_file}") + message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file + \"${_cmake_file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_cmake_file) + unset("_cmake_import_check_files_for_${_cmake_target}") +endforeach() +unset(_cmake_target) +unset(_cmake_import_check_targets) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/libft_can_transceiver_lib.so b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/libft_can_transceiver_lib.so new file mode 100644 index 0000000000000000000000000000000000000000..4a0517e89cca2795991158b7f671a722c1a47aeb GIT binary patch literal 1317464 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 in8 zHtTLX-({tm`oC!lABLw43!B{6!OL%utAGCTV_F+O&o$X?aUxdv!>uIEgw7Lo-gffQ z`H^>L!D90V#!s{|HhxG{-Z$^2rmIhQ^63YG3e%pyT5Vx@+4}0^Nh!s7nJ0#1yxr-N zR?(#Ap$ey}Z}8XP_D$g{I*_IcheS7TFqYQD+Z(?2g~ zxMyy&`bH`f>QeeY)hf(A)6M2uYsaK96>mKUKPm2Cu)|=VU5IDUfS`bD5w{LcNNyTp zvg%B;r!7ABJ`!rwW^jS`xap}YR(^c(qW`FMt@n3jdaz%2yzJ5%&qtnSJGPX@K5E-> zgIdD-m3~@@YdX3-J~sYthHaPE3iD_CI_O&*n9)xC#apF8hrGr-)2iQWoTJBqW-AW& zy>#S=N%q#p#@~OGuI{ze;qt7<7e+XZzI`ja!`J<@-yXTe^{er&-9@}rU zbYhI}#OlMJw>n*Iskdd)Ks5!GIj>iF_;=LQnb++}YQ4ngBh5`z2YY38xv8St;8=f! z{`WO1U;kRAz0JjT*^nl#JAC)FwpFtq(l*&`TbF?fEp~Z1n1!zx`+Q2%HI2yA?N1P`c~CcBWZU#l16)1Ad!~N-pSEyDI2L zR87b?bMrR(Z8rBiynIEEoyRH+=balmZ_zx>iWe7uuTmd2b9nvOjhUz+%&yvTm)_S;y+ z(zRwuNFgoI`V%o`Tl?J>U9F;E^uYCqBjGF6%t##k$w&Des3IY;-Q+ z+VR9c>6t&P=Ki{e)hU)r0g zGW%aqw+Ws0_rIG_Y5DQo50}3A9>bqjpU#S}JDV{+dG1Q>#^H9Wx(q0MQgb6^|AR*z z&R?zDu;)kR_U=w=7vHh0AJ_71_?xB&e6kXj$Nru@^`+78M;cR|t=^yS;k=-Fv0hS; z*Vq@gmkzc6;Hy-5phNAFP48E2H@Vm4uTA8ej?c$_Z8k?WXx;GgUxPjy`URCGUr0V^ zVU!TK>RgLOh695hHkfK$Y}!=Kp?*NxH?x;HqasXnvx?(m|8~3P{P4rp=vw7xXOs6i z-gbDY+$Gez#q)C`KD1goCT>tfXRW-IqjlT2+SQ}*-GgJlEqfHI8}{zmv9dC%;q0;> zd%slVdbWIF@#@^11?8g+@-Doqe@dMJyL^BB?1KSH`3V)3SuMUVGj997 zPsOn%8v87K;$FI3I<|S<{5{piu0^eXRUcE#_nG!uM-ZmjC-VbgHqonOcQxDg)uq>T zE=*EY9b)}>@6OXx3maSR8)X))>dM-`=-cj(&Oe+JciWwq`+9oRO#h_E?io3=&JTRF z;9JAaaRZwCYiFnX>*wl_;8nK$RGpJ+-P2xL+LE@=&3s6Mvu>-5sEWkc5{ zYf=t-#=U%C>#LY{XVqM%l?oGmr+o8Mi~sQ9*ItM6t=D}1JlSWqq5k|C8A+wXw5xyX zN4#k|Po1sm;uZ@d4ad}Pp-6c2tpIn}*XslXxJ$JB`+PFL6YJMRH^!_I9>s7Nf)NU5j z$GxMQx>j8Bt$5Szw!zI~bqO;ai+|c)cl%zied%=P)CtEsteL&yjeTpY=5M{uum7F% zSZ{g{U4xR5PX=bB`X(l(`1!P}-rF@N>V(y;9(%PNyJ%nD-$&EGYH*CM>MZS!e>P+# zUd+C48nWWsvBLulS6^^ySO1f*aZVp|k9S!!(&8L7wZjau@@9^msC(4(Sk&&zr-z<+ z6;`{kLv7|@|I0)Bt$26bQlrY*MSDQIi5(vA_A-rGz1lls>Wgb8eTJCD^s-I6m3(bO zew{+q{N-(5^@^Kt)OvKF<9qc+lOqGyRhDX(jd`Y+{Kwlf*UPT!@)?;9QJogITCr{8 z(9J^^w;J2bNw>OY%%?=AgM%qgw;I*Cempl~N&5TM|I&2zS{t@~J@w!D6Fpz2Rj)Q_ zx-?PS>4tw~y4SZwy3NBknM{g%Gv%IpdHx}T^0z-O&+2Snn=b0VIb>Z<;mJt=$Gh@rhE=xq)#U)sL+>?6l7 zygDD4^!4$@9l2g64~E<9UDxgXtR&;mVK^yh>weZ+-UcD@2#XOJ1wl|j@y*>F> zb>!WTC1Jf9cvihwp;YkiE(n~md0kEizso<46$Xwf+!r!NHAds$#~F=7Vhd(o+4Xh(WPSYyMW4qUtWdKa z@ouQ|T=SFfwwXUL8aR8GYLQo+>(4fa)UAI7+|X3|to7^glLEhj6|46B^4n_=-N!k7 zm~GcxAr2FM?it$D$Gzv}Za0)q8a=pM?DoE;K|i~G``eyRSGb?nW!KHMcFt!OzL?r{ z^xhHKgDwO;JK3;%AI-Aav(ns~hm30*=dfc<#~EEmB`b{4o6-8q-MX}x&-Ds#$%-TAC@7l4WloXQt`$ye->l}2%-roK1<`Lg6=+4}|;G?_trl5j# zO?s;TZZ!SJMU|BaYiu8QEliDSY4ZAL=5{B8r*HfFyiT2aXj4MRJ!c*Ug`c?)6%x61 zXL#Hav-GbE5_8+NQCd32=!(6i%l@(fA@Lojy4*BW?_i=fY0Agib2El!U6}Q^BKOpg z&!+}e-a8OB?Xk+ezYW(o#yq~MHD%QMe;Nv3Zr|SDapkOKy(+VF?Ur;dQ0z2ekg5Hy zdav}Sd1U43e^(5*FYctY?eMe)t)r_CUd&f6k3Kxj_UoM2OYM^Oo7Z3b&9+IR-}&H4 zSGSMNtzT?uqf(NYx3fubLj4o>PB`QjRI>IP_uTcp;Ua^8W%c^*%s-fUQPXXKqU+S~ zKA)2mb~%}S>%Ue1{@>2!UE=Lb8@vo`{p5L+s`JIJ%a58&OCB-eU*|_U`I|?kFBv}k z)$}`!95oW+U#4qqF)J`E(wlI?ZeUtbPMFWe#S%yZBOloTJrlLIOdDxrrZ67Ykw*Iz3`(N^u zPwkB6J(=VlIoJD}PoL7id(Q7#(WL3K`Zj$+Z&e&m-lsY>qT|<{PmM?PXs^{RVe-i| zpRCXiJ1p|kZr@G}+yCl)xBKI2Z2B&Zx|x;tpe*Fgnn2r}+s$f9Q+2x@dDL>wubRS^ zeUlS|O5F|SyiqMaRX?Fe@mcLxAs>faIkMo@byVY|NCUO~q0b1G_E z59!|jXnb?5)`^}Qtxh+#LD7*W!F2C>Yi9y5fPgrR_#H{D5rwz)s zem5}5OiyoKyUXwQ$IChv*YlrMuiiaAs;^?)px4e{5@Af$N z+NHrZUd#Ia(7tzNSg*VhiNS5|w{X33aLaP#h}&K7wz*P!C$?+Ukrp~SFMMjZMV(x= z>gv;_`xcnE=Qny$sZ^J7^x>LopV;Bb`!*w;RSE}vnQ|g>faRdj+dpov&W~tbdwYKK zc7}cSyfo3c(K2akE4PSB*W+2E>-t=<%t_T+Xg*@#I^25EfJKYsgA`=W6tX8C`*yr|edv21JFx8_k6CGMRvU*D;To$V1{9Gm!R zx96%kw>2Vnza2Hf%-TO7%-kqF%CxfKGoMfGd)*$rFy*hxAt$2`CB2OL^xouix9_`g z0oxT5Vw>crjZw{;)iBdP{B2!tRqsA`{N8yy)f!%xu9$sbjdT3QJ8LFYl{D@W;5Kun z|L}&5rZiRkY^-#xC_Uhj?^m7Lg2|8VQk4Q@_RNmoJEp^+bjze66DQilmKE&iv8=I! zO8cRaBY)?db=M6(SUgVOF01g%{=*l~MBCQcJE$zP)vhYtXTNW3c4OPqCCOQ@)(4s$ zy3zfLUt>evsqMxr*=|^sI^gX11IC`S@=9kXTse3BTIZ0w>zNA;d(7UM+3mb~%LM(E zLrUhi3Ey*R#U#s*Lt0(QHn7UI>S}LZ_;RaC{mES(jsN**rptEyY3>zMS7({{4gN6a zajVM7jwekj4VIeQCZ2tEPNR2?)tH=TUwYqLHhseNNt=r+J?B|9U;1&-O{GSjgUm|T z*7RubY@6MT#K`2xZ{fAi`*oY5@8dLDvEHVNqP7iB`l;E?)$0@!d2oGm-P(d#fyrJb zvnrbfpPg$LH6gyIQLIN@UXjfq#{}bk)(xJIx3shLO{;IFZmx2ueBB8D2-nPC}x4ftug5o6Z`Lr`WUwR2`vaTpT3a+3y|6Un<$#Y%v^RvDjC)dU zI{eGtMo+vaYpwWtcVtzbcG!vgF)_=d*XDHU|0@1M#Fv+YZpH?7aGH=0^? zG!Kifw>m)SMqiyVn;eD=u)VTR&2ah6FP%F#T>C5DV9WNWf3*zD3-bro)_*wa>wwL1 zCKD@aw(kfUvud1ARbgh|Nq<{yHf(rep!UpW|F(qBN&Az0bKi3Fe;12i+vv6lb;uaq z?CZv;^(iMZNf`8eActL357wys@V?iO7AO{KW^ z=2Hy@3{xnbU~X{bYDsR<`sKExU46oCtp9vQeOarrz%%#zec$YPBl?ne>pl5551l%2 zcKd`Y|GJbO*#7ZMVxJ>rgFfGH*7rvLLqVg5n?L`Q{I~vv<0D3~wuY>GI%&7(TW{S} zn<8hbG`AS~#wqYYQHu|c(m!u%l071IU3m`+KQDXNXXTkqJ=Fs}ZIs=EwCK zPKyhxuDmY({;%!G;MQY9%~z-2{os*qe0=*&tycXEEiErU9MG%Owk|sS*7bxJdQ0Qx zvGzoM*s-bkk4c50DpTR%_ylx43KyjQhvkY={(XXXC=Za=%35Or);y^6I(3k&Z0 z4@%YdH*o#7*J|F-`3Vs%6k`H6=h&TVeO|r9(J}cL(J!Dk~f1Z~U-#bLy*@Wf#@&v^cXn zK6Z-QMl^$Tc=TnCe^m9K6h2qD(n5BF{=&BdhafF zzS`{KqsZ9p<1Oqa{X4&Flj-v*N;;)&Q;fdk9P)4U?qk04t(Ds^4>@vY@7FiSyL1Q` z@U2hu^D>=g?+Vt%{Vglg>io*gHtd?eOI{yy|6e5~&)QoW6f8B2Pwex}ai9I!?H7-C z(odi7a;9r!SBI|0HXZ0UKPN@!a)6%KV|~-)e=0u5|9E68{yuSC#p!2@CCY_&wFfwc z{Hsg56)g{-ZCi{>_(snbw-W4T*M(pke_B_H~fG+T0_m(`Tb zQ}vf$$Y^$Abb_T)w|1(Ti!|-DuWg!EeBnx9wo!jPnb&0cTJ zY~tQ}cZ{6!)TsE>K8Llz$AdCAjgA`kIlWZ}zhMO-E;C!ayB1$KC%x|zt+YwrJ@@=t zx9O8bywAr5!@pe2$bY#gBY%tL>6+%NFZKRqcGr7t+WkSMa6Z0g@E?`YU!u0QYtl3G??$VO z0ezGd{x%(Pb6@JA*!{cGTbGQxm}dU_xP!Oy^fVLWlfE-oq&o~8P+>Cms@l+7EPpUY(KiE#$`PYmaPVGe0=~nr`#<`1_ZQZ)&DGmhU|hnl$wM zF!wA?o!ZpQiQm7D>3x4zj>W%vde2YxopPlAtP>kQy|GN*ziivi>QPZMb!-N^d{!B# zb?4sP)_%>bGhJ1K-sPCoUf5?9mAHYme`@R4p3{Tt>W^?KU8|XL)H|VKr?tl9M(<8O ztXDX#EWTIM@3$v<8E@#jGw9HoMO$jpUL74d#q&EgYPFRt7bYeO-CG{z72xDI)XJM;*vKIvs~+`YMnPmZOsXY-8{jpw!fG|jQcsej525y5Z%T&SAgWbT6g z3jv6CU(X)67rosbmRS;Wvpdtn(qnC&u3xpr@Z7`^YeGXhdUbT(IklhRpdE|%$Lg8J z#||8^8&#zTGyrRwbnUyR1 z{&Q+|FE+=2^{m2$Y=5(76P?N4iuOx({5YN1^LWY7vL=117G9gFxwoHIPUZcEy-k)M zc;E7R<$czEi?^LFYo+?^Y}oP~yNx&b?4+P7FSYqsSE;{GEpcah81`!H(SJ|-TvKjP zVzhN=oWA{sr8h=rsedootNCqtWz!cu%+D;aNNw`qbDohw^^AcQ$qqWV9S$0$*CiW2 z)=f0-cy096*bDlXbB|fxjA%9L$%ESu{?4~J|94T|+!2dA*B;Tkf82McqR+c71vL{6 z&oij~5OcI>ZSHr?x6h(}Je^Z?&T2@KkI$GjO~>Ayb-E(%#@amQtRmdHr+8`&Z+4x|?5E?Z58o^{6#l_w3EcjP0cL zleJgL?@8;X?-w{&Udz4F!l>!v5Y|SQd2UYi#*M2?zU8;G!wVP1b(1b?ybgBK)!et= z)5m1}KbwTKn;QqsKd$vRZ|2+sMhAn9-{s0KEB}w5ChQU8=Kt|;cMJZT-r#@mfA6C7 zpExVn|3jWRjP_qR)7gWx&HjV`!T*rIKYQTyzi>wW4|xvV`foiL zu!pMu3uoN_z{&m}I1>i_H;x8tlm36S>)QWlm-H<3fAO3B4|@CdQoZU5|D?y3SkaaJ zvitE%6q)|j6<$k^&9HKr=snIV$>=F#*<%^37!ZA8JK)@s9&TdAn&^$QfTJco;KGXZ zM!ZxOv4_Z|dM`;2JF%iE`(^jz+2i&S{h&R2=&l4Z;^LO>f{sqqA0JMwSv~)iB+fM@jFv2;j2YKF@K%SOF z&pHL1kJ7^}tZGKY{@SW5 zdnkYv{40ACVK?}_rAN|OF_QhV_f**9*^(VK6d(`RPeldz>xV-gGveRR9=ez6tv?QQ z6QY+yfo^sh_|i8Eq|!ncdS3Ak{9F&qUBDkY75ob&$7E$(Ts@gQnbHF^tS~joNX?<_Rzef2g}j0qZjdS zWsm7g{NpakBGBJpD~0(3@M!Q!+Pb{cP^xlm?=lxXO5BOEXfzSC%wt~M}dd!a% z?uQ;;;7@Y_za7cbaSZ68PN2^x`siFmnV-KfgrDmZeZC3wX(srI4*BPuQ}S}&+yi+! zN)HFJ!sXdL4)i~ZK<`a@GdxNBM)Lmf;t}YZorvD^$vUrJv7&aef_DuRe!r;5_UJ94`MZ9pF?Ak;ggJAMN_n2JO-!oWu~sr3XS>O3?&=WGV3Th<^>m zjRGNVgq?+)5z?b5tmw;rS-fW-(UAO5D;hZ5juCA@uip-KG$H;n*z9tI@Aud<15 zodf>e#=x;Ay6+g!gBJjY({FAEPK5Nx87nJ^e?5EDU&3$h1N|5fJ$DD_iPB?YtnhxF zz&1%Fezz*%aC*{Q;LoM;i1!QAOVER@iM$@-dZ52MB|-l@F6IA&{5sNOj;wG!n6Zxy zNcDRALZ1H{kH(-M1uX(yPxe>rZJevXnZ!O9^#9`2Fu^4K9~uSya6jqKJ_sP;N6wYU zH?jqPx8dOD@=SgSdCVq)pX)891Lz^HptmP^lzpKebBZ%uKf!j;gJUW5utpJo5Wzk? zA<5ZV1A1<#1iGdyzfxCllpc6wh5KzS)tf~1&H=l^F+<2dqBG>@{oRQvO2XeRjQhjQ z;O8Ujpf|3cznPGKQ3>Q3OZXK%fRj8#UY{>m0F?0CXMoPfSrzuN1WC^Yq4M^sBR`+E z3HUru3qMExBgD^8_K^$;r$`uI`nH7p6P`f+Jd(5O7v$HF9<^hI+hrX4$c7B30qESH zTTtFLit;Y52VM373yJ^qWbkvln-52O-v-F**{Ut|qYK zzbe$r^W^>2kf%IRUY>M{w>yM*JDv@QlKhL+(O>xZ<+KVo@9806u7^y2(!U`8+YjKM zB0Xfwiizx(y`xzSdjFB2^ZsSUnlIJ+RT28+{q*1`&|imwpWFT00LYmtJ>trW2E~D| z#*n8xSYDsQ`hp%mU!LB;8T#~)9_?g>$C=UWV=4Q!C%G?M`FxA2S02x7RL3$g}gbJkFN3&`&2Jo>%CB{)p(@4`Yr3zoj;CxLr&P zfgekG5%-@CRIeA+%jH>W5BcNz%j@5J2=I@1%FFM;{!sFhDbj=BtlT5Jr+gR_r!Dy3yMv#P?@ww$pDaC&%!-NZm%UY+2ztK~@bh+6v4%+X?rIA<=kM|q^=e8F zbF#wq6aEzZtNek_>wQV%Z@e)6R=R;-_Gmc6;d*;q1Nt-RQD;_I8ZRqGmC##4C)B$F zWQE4Q@SoN~J~kyEa%zv0*N^c#;J*z5K65i!`PdY8KR8pKfBY#LU!+IuSkagLvbP9B zfMYK`IL-=}KeZReW%j*t8QqiYwQwQizcCGVPnG>Edn>mSaPqs$>%TMm2$<9#yH5vy z81Wl?0RQW`ke}OY2m7#?#BVtc{29bQpXCD*J=X?w>HB$7X~+JrWM388L-g!DK9Cg_ zZ3DjtJ$(Cr@pc^aS@Z)qJU+Z;A8(TI)98^_?hoJD1Wls1`v`viy{>^2pFI*Fe>1YL z`BC7U8YQoPA2;AQ+5@L2$$6LJ`2``KPg@Hd4e6moISYDwA;f_~vZG-Sc{?uC2meeOPkH=&XpXp{q6k0X{_}zPi)5Fp z^dW&as#P+dV7iw9uyyV98kRg{-|#9e)4fG=ql2q^{jCJxjhKcu#E|%v=|d4bPi~$7y6sKi_mTY-`z{0fc$hSv)|ew+;a}N01iNf7lGpzqf0A<*B;ob0VjW6q*Ph|P;r?LQ z4f^zogMN7YJa`2Bidx|3{y#DT^p`on=knzJ1pWJ3@SDh5&EAbQfPF_&zQpa@Z7%pL zq>o6j!u7nc1@!auu6%p{Qv7)##GfZ@-COcc7wK_rR=9t**a!S6_2k>T#RvT5uJZk8 zgaP!w+X*X7IBCHZzKGP_IlmJ8$Tn^CB@WDeTJ^TwZ9sCT#Y*f=X=3ID-u z)O$*LfSVPrpI1KQ57L9MI0I6O|8 zW`ORb3j6Z$Li+xqgn#zCicCVTPxs@X?`;QuF3%X|U=qKjFh70281!#hsF&k(VEaB& zdo@X)yxuzY5l#uG_AC5kF2&V~72sErJ_NuD&zDX|Q@@CSKkLcdw z^_vR$GX?w_Pw35Tp}gL_S)wJ?n`0v%fAZ?1UG-?ag4-o&HgH-Cac}y5(6v=yM?QW9 zxkAr721Cy#q|YGsF;S`B@gDMVV;lQ;r$k>X%u^;&9zJ3w@OiwwavA+PLV6^c6@A$+ zdo!BWc@%_o9`;U-%pd*?g&w#+k7ovw{3NFm_}s7Fc|o2;`iKILV+l8ab9)H*xqj}D zo|}=LIsSqus#oYoqgjF~)$30CdfdJ?2SC?U13vfXwx>X!U?NYyX9@YQ3;D*Cbm%|z z2K3M4(%?y;*Ngz2%W1X^_;z2QAKorgJ>X9e#_{X3;BN(C^8F=hDe%_?13#PW;x~o# zNgtu$`W(YPNG<8%bX&B`n)ub&N1G-3r8n~Qxs-=Yr96b|tzZ_lYrK5B`p~*%V`1G= zcOmM%eGu*Cesv=p^b{daX#4{5=h1wY_q!46!5{e$INV;kEb);1IZY4xVckboR@3;~ zSW4Jf;c;fmM&SH<0vz6t(%Ay6q=&sizjN~d{gd<&EmpYSE@}I(iH!us$Yd(eHxK|kEDo^}9zQa8}K zoRu%2|GjOYf1ZC1U>^gP{5B{YbdKYH7xFKp{T;5KXLN31BdxD;J;z=`y_Wp{L?g3zW=VIbtgYz-Dy3o=O@#8KDXC`Wso!U zEaYEL`HAgH)Eh43MT=>l^n&zZ23GWCzwCPuci<001bh@fURN z&jw9kmkl>z7w$iQ$3f0z^g%!#XCf$`9HDq(Lh>k4zuPSIyEoMDzEHp8dicpc0x$Ww z-(c8<$LE1}QEw%!!}I*-gY0#k=BLdr1BbbRta!1H&r5c3 zYbvj2?>!ahr@<&a5p9PrEKeziTM; zyK_;Hv;QKIwAu#Si#AKDSQ*T|)(Q9&Zm(-WWxBBhOn}1Onf24Dfk>nQagG z&4l>5nf6Ji(>^J;%b;rD_?e+zp2rTS{Jf6Fecs>aZGs-Egt+9}2Ku+Ae1pfCw*lb4 zMsb+qY?@5{LYTj6nnDi+Zjgt$hpY^&2mHIzhe%oBIBK)OUsMM@aJ`K#N4?V)g5N~; zS8Tpa`<3@v%hRoGfqzL4ah3bYH)r4&(>fBT57$7w>ir=no3_YGqov?)avXlk`5kF~ z*Fx~mBhK)jP+>fZTLgSJ1>o~`=~2JP7V_StRlqqS_@VSoFR9<%q;+y0C#%N*Uqjfp zdOQLCa9{dJB`e&oKD-6a8QLE-mHjLGzU6PwPt*P>xBKt$q=zu*f&1G^KhQfa2c7dT zJcN4BKR~^=3I9_t_;vQm>vI#WKiAOuGw+XQ!{ArtLOx%gEtpH=Mb0qb^LiK2`s!_3 zU*+~n3PQccTTm|_cN9m1{$?)dPf5;o4N&iMA^#lQ1%9Rc7yiceHi`16r%mMjZFM~G zW3K?84ZE^ZL-E{Ji09IAHOan%eqnz4l=vGOpxy~|uA8^ZU?TWGk^XrrdJz1U$Ezj|mHgFSC-DGnVoPh0gNh z<_I0|M-Kr%&z~nPf;>NtLLO_<+olTC+oyv({(@WJ|3iAwopa+i-MYA?Y5n#NOZ$LTa)9}w36-6;>z6Y`Lcr-3uV4E1vP zbKirWPUitSl3iB1gT8MT?8W8W;}3e3^ucvjI9-+UXB*0&dlHVeBlP1Y#O>cSAJhy- zdwE{uG8}qvmOco~N&w;XqBvY6oC^)lhdfEbxm=B9!1*oY6;G*OyTw3$uFnw`=tsq> z@^R*OD)3*HfuAkk$%<(y=vO_VPmZ&Il zVN>F7PVtkEQ)aY&ShE-SQ%FC_v(Vlr!n&(j8rkJE?7NQSPhg49+jp%E=)Sb?!24rmbKr;1LL6&O`U!podFD<8-GJz} zY=DsT_C*VJ1I{WsU(NfMC(YxkM#}5qwN(lJ?_1?SXwc{o^3; zx9$f&=k%l*puZ5-8OkY7E4~LD?$6z598nO)k^4T7KR!ZU{%(b!k97eKa}QZ*&Mx3c z@;fht-nf2>SYjsm!y`I($Mq9)26|XAR^AU&wt!wFgE0G6JeKJblVQ=;4|H z;%9H_FLN(~U%?9aeBbB(V#wcWCgcwx`SU9v=Wt>Fcakaa|I`A9x2yIZ@OzP-xqfn4 zx+3ZAB<+uIdT;~KqlNW~;X@%$F6qA~$z#0&{Dv3MUXJ6*?&V2-ST5vOo+^-2@jT>Y z(?(f|`3;;;$)NM|oPN~a2||1O(0=qsp}!}`pkA{`dH;9qfqJhC_m32ZVI3?~0ebF8 zc6mJp@_eKFFT7pul$ZJmdFkx7u*(An)XV3;OFV${PuQm$u^;rF%4jdoHw-T$pOk(4 zm}y2I>S5oPM!PKO+^GT42i*qFJ0T7%9|Hcy!n(&=@`rll58Q8`QvA0S;=d_dSC{M< zFX(f`X4I?t26pHDcYFot@k`MzGm`VbcF#p0G>)cJvp1e#3;u zM;96&`8YVPC+ypv=8wEx%bEdy7u|p4=c0{C4-dyeP9Db&zXHGZbkMooTiQaN!M7j} z&##tWp!{F@U^OfHvS0QsaMD8#>4EDfLm&G5Eu1HR*9Y|u6Yjk}xB$O;OY5Axy}#dq z{|KFn;O$Le^AyQmjhD*%|8_g@pYVYGXOWyqY$71Vfs3?1$n|jE1oTP5dE+x15eH6e zL4Qf5{_^!KX9%5hV9l2mtC660cZB>L--{i1lj@D6eG_ZqfBO^ox|C1y{A4#f zk188yh5WESb9f1-S8vF}^*K8b^e#!DbDY;(KyO9!4lcicHsnmJfSgWB5Gd#+=+|i9 zb{feUkPMu=LVtX93iL8MH)2BkNfh_4Dapq@PtvEk6XfJ^$ut@I*AVi7X)eH@IT`$F zB;J2rBOMj|2F%$Hi!uq_F#!GrLr+J4K@%P>h`i5HIbG<#f0s3cq^wTHA-|7tL zlZ8D0L_hRjql@zW_oXBBxl$O{l$gMhJRUUv<^FI_AAT~7){(e<+oz*lhlG4}jxG6# zuz&GuKk&Oz+~e)CVH;SIUnL6nvWpgi-~15tpiAxj?F9bK17SxmqIWh$y+Ojc2(=Bs zQKNNi6XG{r0Quei0f$W+Wu?X({KeL&m&d~~?7)O1=gn8(XTy-J%w+vq7Jr0#x6nAH z?J6HvCoq8}J^L>O{zJl9l>vGBlArML?%EL4+d#M%V?P=6Kw-bE#S75e2clr2#dOZ29a8A!6065mP&%*WNdJ6o%#{h@x=X7`QHywg{x%}-n zf?gu@m&;C|*ZP8=pO^ki{2!lz&g*?z4E}?{xq=0WXqV1f*qyJBE#C+J3OWbQ*out z^Bg@3`PY#@=(9vx>em~;%j1092Am6Y&XD{6{r8Y_VtaWxwYmeRmhM6DxMz6-ILn3r zpX0Qo@p=TE=jVDGL+AJ2(fR|ACuY9DIYaYn9?x4Z0bThR^uztO)ClpdK-k~Ubtk$o z?_N*)bjD{PC-=856n`R&b>vG)g=`?RG=p(QH>CJ&( zpZ1~nxVi2e@LLFZ>iyQJzid(${U~$B{{i1gXSThd?BpQ=aAjC zh516^VAMO^Q{Mm0jUayuIuFeKt?hi+rNKnlC4uzz@h9lfT_7jVt37C+#gg_}rV;<+ zcBr=}t>1F}n7Mn`J;}-a;hi1)O`qOj z;Pv(n0{)v6$j|AgFM*y!=PG&JJ827g`;p-1^fAStdkA)UGZguN#c$*TY#CElLcW8) zBlUM4Ki^S4V@LO5IQ@Dm_^;9Yh0{a)pid3jH|O$?s)Bx6PnGZ2FIAz39~Yrd&YuxL z`mB|=*Cl_@HH2|+MkeH$N9*%ko~WtBFW}5mLA}lLP%m5VmK8@j-&o-dIeDCUFcSFb z!g|gT9nh_Gpnu*^bLd<|IGu~&{@Jb){L#x%FXxY>b4LooxG-ftjW5EyzRsKcR=5{t zUmxww=n46!p;-zkW5J&)?E72Ne*L%U^6fP-0Zz(r(7F8WEg-)at$*_VzKzy_HEA7~ z(_Lv?(^wBX9w&KhmIB9s&WG@EHmnTvQS+f6_UE#4fgLcD;>j9XpW)-Rqd(}!Xuih% zCvG+9YS&>Getw|yR_NhC2IP51_`_#_{}7#X;5c8IfuwqqXq}nI&-CZO$!r7tuw_YE ziJ^U#J+#ll{jgyqa0Z=%JX}ADbpBzpaQ-2TEfmY@rSqk{z1g9U)O?FhE zdlUaRj^tyWbwSwI_{-iik@iphg!P|nItO@z&H)CHoV&@68aL3cCq$16ft+r_x#IA0 z$eFkha`OH)ZVTvHAA!T;qy<}Gl*S_qALz%9@HM`I-pT}e;Qnv0fW`%(Kkn}UySNK^ zuO_W$)}_kF+Z&lA55+4Js@KvE`0>KHlQ9qNEfU&$kJh(4(LEsUCp{@%nNqys`Bl?N zXx9m0eayZewM#h1GLHN?jQp9)sYP}0_HsYzyaMtk)`vd%_&b*J z#<|6?*E+(fqxp*^&0pB^psZw^gJ1ax=QB&!qg`E-VMiz8ztjuuYAm!%>pAp4WwN|K zFO4C;668EV>j3X)9e~HNl3T#(MCJ(1J3$x+ zJ1YZcdbJALL+vVI_i?0tJzMD4`E=fL1)aC#{c-#?*l~xj?{Hu`@WX}t=ZZ7vjcL7+ z%c=hu^jP5?q%yWZE%ocZ6z94BjG_E+HRXrgpPw8A&XT6k1E;?$f}Z~gdT4$G^kCsV zibR%BN%hvzdm21GyHJ0rq5i_{uEpF#it}-FuZoX@zB_=Em<@m6>o6`Z-#akF$MgUDRDz7foW;mgIc$8FsfO|2bI*Ie*gm za~>xnH-ca5G5n3MC);f&KNsGGo3s=B^?!h$$7dDFx3^Hf&Fyk?Ech1)_k|;FfrV>t z;T)StO8T5}3-WM%CeS-|!+eGKFbDWWUhs!@WZ%Hih$qg%z5c#*{oyeajTiPq4L$?MA{=sZyZ@y3 zg7k&;gsCiWN$nj$c_8oC%_cxjE8(1Q_)^r{SlB08L+2u1(zytZlTrixgS6ko+to4< z^p~`r$>q$fMte(XKE?gqb_)0n<6#%x@6>6%R6|%V-NrhC)Gp(e;OBn+tP}E?RN-7f zR~nB>g#Hq{A9`>vfd8x`yCnGne|@yPp9HKRzZLeECv+vf&4V5F2*<1fIR3P+YC`my z+n^7j{ROVKK-%|tktgrB5Bwpgy0Bkxco6C>5b`dKThQ}8VcqHR1?MO_-4p6Ee(2O%O@5$i-bRn_FH+syFM4=_%*@*H=P0hC1HO}F$wx9QiZ*E+*ou7^Z~;7 zxSHmJmxTG?*KN>4XcpvTYLpcVnzu#>^VZrC;13es7gG8G`tiKQXTLwp?jJJME_!pe({^u3Ax@5vH@Ds=V{s>!^4sXUunXsZoCE)P zA)I5Mw-fR-JOw>0pnAW4gZ{l}-GJM@H=Xx(6ZU7zBB1|7C3(AqGFVAYbp`lgF!{q@ zI;Xdo*2#H1QKS8%+>_`>eE%qc<`{>>n-fa>oqz8da9jSUuR0kM9q%!N2q?aQOHe z$_ymy@22wlS=kx%Z@ob0^7o+ic4uL|eO3?XbBExEEnI;!K0qEvjqZIH3HjuF4e0GG zowwokDp3bcc75PPQ@^-RdHZSUj9>lUUu;w>TO5o{kY#+RD*tp?(_2VmT}Y3UN>R= z;ml(2-xvDbG0LCQh5Wf>CiI*s_|Fy^2S?I4$lDcLiFRp`pY!qhbqwnLD)hT>6ZlVu zAFvnK!xjhNsMEZa<9l`k|0>}R_y6r<;pZ=e`z#xlg5QJItGOSZ=mC6n zT7Tp9c4Y&H8`WE=3J0kwG^g~u+*aED?e}eACaQ>O^VV48KeV>jBpx4m3 zh-u^xzv%tCDYQ?`;2C1Pe~8X!g%3D>p5fhqrdR=oMp71enHqb zDV_~|`qO-w+vS)8^5GL-D(=eYL;eUYQQ-dfN)TLYz~3aivyrC+{29VM<*PIw(Qghr z4krIk+y;>Y-#*GO6vw3U%IX?(Yw+6y8OPX zBjp>qLfm^_3jLfA^22IN;27G=w^yGjR_aH#bU($8>}x^um#xA%hwmQn!wW*(t6K>C zp>+O`%RjI_?7NlDw{W|}nS=h6*8h3G-V*|xd3zz}VUp*Q3;N^SCh!Lq-eqOE7I3m2 zp&wZj|JZ@RIY9f}+z)p>1HCV;=kvI9$rd=Oly7tSC;bNhy=3|L@5bVl0edCrK|V`J zSka(*pRG<@_5fK~JLj8n?@RGx+&eclmyr;tP7BkdOTy z13CSL^?_$!!2ejdKeCSY&8G?b=3#q*^Z7FLFqZVAFa~nY3z3(8g6^PTGnJ@h1;rVSAf!-C}HT>Be(R-*5P84!Q$ zaNz3&0-vwr{h@j5oR6TJ5PzsI_+LhW&gZ9d=zWjfQov*-gZSg`Ko3bR3eN_oyz%5%7W`VOFRP>f4Tz*!)?@7ksYayAn3frqT)Oa8n{8};&dwUc!;i9Si# z$8i_|{p=9NqYDZkY}t9?92W0a5ive7{D%UIwmXU zt3WTOb5LAPeFf;jMcB7(?*n`dAug4<0LPZ*#ay2?Nsx2(Hu$GAs#VaS{i7_J_XQ9= zn$`!ZXkNpHIazt}1^AOAApaYZ-*Pwb51a>nEb(X3e(MWizqQpz;3NbChsS5@iNNVD zoD-;P0XQFPHy`vJ`$4y+ zdfSbH{2Ic%BPtYfKAQ|V`MIN~%V5U>VSWBt9dH&4dN7!WdVkS*2HwA1cYxlPTQa%~U$CQLKj7>h3VFESs^x*6WC{P|_)d$V zheQR)$;aicI`G>TG>&te;yCz~Sq%K@5$UaLCgIe9&T*CsMnzi^6>n83!8^Z zei9*!gGsxnUF!1sF`tfl572!>J}#_d>$(z7qOi`ehP{6-(Ps;GjM4{wb0^^Qb+-0C z!0#s9n`p}nCynE;+n~MHr2j8Fptr3jp|_PpSN{q8%fkNkAiBTs__@5^jxfVX_yzQy zi3#EO(>Okx*2B5qmeG1(a<*W+W5}EU`PJV%_-AL~`%teYfbLcUJ@a^?YXd!e5b~T5mdDEayReS*#GTqp z?=NvVAAE*g-qCwmD@Y!rBJlgsIS0<)XAbxyXq}TyyJRK!A?Qb1%iH%Ut((Qrx*50c z?LgoMQrzHndASKVGk41S)z%N7mkal{CYq6)G!Jb<@}vv}eY`LF7q{1b%46LqkJTdn z$pzq_Mdyuqdnb(sU4!Q19KRvWze>q(Ilt{$@H=#ow|kX2`q#ur^sm9xzgm`ne+lgi zaQ!q$gxwQWpigf1naR*YJ^H?IB*}kW33e~1{FeLG*DTB#$SeRfVsio;`tIKQ0M zdEV1H57&=3tz&c$)-kRg2L5;!)R zomb@JY?d$Rh0)Lt_d|U;XR_A=_40nY;t%-e3i}IBJA2>XPl6~_1+A6;cMV? z|7q2o@P+k|`t8s!j6a~iv?TnkD}fVDe$MS^wGw*JP?qm6<}=_|muTILx68FZ`bFkt z`F^2p2>frfFVFeM#De}@=wC@?pubxHIeEL{dVoG{h`c@z9*3Mqg!i1E$3o7p(em;9 zF$;i_eWQf^g2D^HccA>7*ZV{PdQ(n^JYo1Bg(}KJRtb5?w##(RNBC}wFU>=@6##(y zt)&X;y)L{*^ydobc>}=D$C08O(ED@%ogFifl^e7V+l=ydw(Kb@CzheT^OislPDGEP zedoOM^7y_@S||jyjU^qMglv&*yQG zEHRVf+h*bXhH(?vH`f||IE&=p9f*2e$D&>@qR(ayEa6zIL(XW@PySlqxHXjbXYWAB z*;rUt*=7Q}Z>0TqK2M3Hdr5QXUJ}>CY%SpY64r~nenOrEy02|Qa)vem{@1MiPY zWcPdhLFayGKzZ_s&FEiD?XvQj&aKs*0i8{+WaS~P3;EFc3Ga8qhe4iR6QLiTS9myr zKFYb+nU}pZz7K46mq`V&nbO-&}VCb3i|Dbcr zX2SS#$Pjuf{01D(znLZWQhywNK^~_Oy<^r`IH%-y74h?h@ScAJy`!!uoZB>@bw3}v z?_ZDn=bk;rqtl?pzPGpyIwqPrbN4dS^{l~5k(*H4p*hj#)A~a>y=TS!JdS@4LIeEH#9!zR{d^V9 zOJ|TB&+0%PZuiBjAkS|ho`n4XeG#1>hrC^dbnYVT0qnx#@SJDh*Q0%Z-oHMzhCIP;%7h_Xl>gCBJf}^JWw2ycw5scPHqlAKmY;Ci&H> zV3+U0{oj4@B>z?D;R*4NumOE2t?P0*ueAVOiM~6`$Ejn+z<=ce|K#y}ML+Q06>wIn zfd5f%@U!7eR<5&qPtrJ2B#b+6oq(e@0dhVi{sC#AYySeB`_B$~|753dze9f%jTgfC zuD~eBqfrm?aQ)9S1>JIle7l-&1>H?J*JO4A^iE^I&-?W<+6Qby_sDqu7DxGB7aMte zbz0|fq;;NY)ZTxe(B7`XJ?K$?L66^qe!=a2iTcY}>Mz{?SD%EO-h!MNoj}iUlb5HK z=I`FbPsT%2;Y&;&ld@CRhi=C4}W<* zD=Y_ok>JlWLxFEe=McEw3Wk9mF67C*hC%)+dXJ7xt7YYTHTXLTdH#(Vs8>VSmzhWB ze*)?J5AW|iHW0tCj&zt!WTbdIG7NfV-CtG~?WA@I>*RANPcR7uKhF~`(Rs*u!g}CJ+jh`@eV4~cru^jV6V%J| zt6991*a%llUlox=>F{b=rQ zyXk$NVw%qePGr$vZ-djmH?9yeiq__-?TRi$-E z-rf(bfU{pq-oD!xfSz&ybZe5o&H#4#MDd^dX9E8<4!G& zJG@<^S3{or^v*etKb6DCj>10jzq63%7VTef9Mc8BnK4N|j+ss-d;J2P4QH~l$Qk*e zZ3ECZP(KYS1^x@VC&Jq+4X;xFDp7>J+7Qk-vR9%oUZ-_~9kYe^`gDds&P&3&;@fQC z_c4UO@p{+LI)htN==lxFIcGTHNum&M?{@&*O4xUsbAj~M4ftGderk}j*CqLSgJ?dO zPV+$?f3jZ!r*sPVHI$%;SG2$IiS`$`{|9#fzjs&Y?Ig*+ya;wF5Y7>eZwq-Y(|#qd zcc~}%6NT>-SdrcwX}_Cw2U+P(<3%ieCy4uhM0em15Z*s`O#;4#(69H>I^ITF$K&`P z*!Lo(aW-C<*C(@g2BbJ|A)Ft`U<#M~r?x5d!1ZrO`{`qa{q${}A?MZK&@-=hw=euB zYdHLtg)do2SP%J&gmuftG%vm+%!?ak0B8O!;H)E@+}YIcgmuoUVUT|djP8ieC%{#UH92Q^t&e|@Mpdb**h2Vcko1`L~X>{~Jh!wh3)%#5vMi?V&K6=@-5$x@Oel`Tmq zLn?_3#kuD>_jArY_uTE=JNbBz@_^cRI(jAKOt0e| zr_$eL-m=<=&=cfd0h4Xh-qG*Pn$wSN#ls z5PMGe1?|!>8aU0inEU%{Gx)FMKBvTo4Yxynb>1%!`Rzsl|GZ0RUx|A^a(;3!4S2*4 zcd}okvR`D=FQDH3i@`5A51E0(@#h%kUkRQgJU`7;{pjuIz~7nYgCb}3%fLCU2lSP= zF?BBZ3x5dv$ow#o@jqF`|86EAJ9tjs1b)F&$Simr`qBZwUzPSeVD7a!{db*O&wj*t zdokvnO8d7cZnZ!iA2ZzAwV}JP!P3 zx#a$;O$WUs&%dO7&&_80s{Fm~=A8{E{?u3Tr`{Uym*6|nV&`|wIP37Is&Qm)E!2B~ z`?@l(7|Q!%-G4&AGikBzug*^Jzru4d;eWg;{PR}EF=_X|7$4qI@!{FakaJG?RlECv zKU2Ne(Tslh;PYtT>)7vBc0_!LDh&S@oUgwJ`S&ydzxc_g-Ow(b7$-+VtvqAdU)r+2 zi2a{=6>@Iid22NJOO}LRb>Y1yvGWICg8xnK%L)Hw<1mhY7P%MgE_f<-0iF+A0e?Tr zkI4u5@jQPQ`6-+~*W&zHa6X#@;6@k7xngK9#jJB?ZSNHvCGl! za<26D5wy!Gl~4ZNWcXEY<%fSyhrS!=&t)jT660jdMYKy5(kCnho-MD!4tq&ITpW5` z$G;zB+|T`$`VRa@D|q94pIxYTlG?BSr8D>^(9V*F(8#>U;`EE@3jZkH_n)TP_fiJs z3;<5q-`Jf6`fA=&u1K8C9wI#z{28Qw^B(LuhW8qzefuy!@Ozbi+nno*I>q2WV$W*k zod-9*Wxx(MQ+_J%gU>7KjaLPY*&RPTeX*d+Df8QwLqYGy^W1348EqQE;lH5;+DrWH zbH4L1NzLCTbDwz&_nAfC_Vs`>M!iSZ|3S!K!+X}^w@-3kq7U~a1m`zd;Lkt7i|1kH zs}xcFW$spt`{mW&bMHD7?Q)KJDH8wtjHf+S-tvcw!T&Aas}a50rJ)_?{fqWB-Q4}X z@DXs<>kgdKUJdHOpNBGkUi5wS4EUR+gJ0r9e&&a-Q+dVzwg!Jgp3h1@>Qw~tzu`Hu z)H|R140E~9AoI5YMM5VMdX*=19}wm69j+XA)ptW zQ^>W8?B{gles~)9!zHg~7uRb?3c{YITe-j3yP#Jm^`6_B`e?5X%CGi~N4rE_;r0LF zJ3!y4=AXk-$*(TtnJ@ zW^K?Ht9$g-c}^6i_A}?40M6EN&`aXR^Ut8(6F;F|X|IM{pQftyY28=h&lgX_&b^8A z{d|x!+WEtX=2wFBuLr;m(Q04oJ!2XtK1@{eu{Zt(y(#nR#UDQC40_fu;1oOT;y&T? zC*W_@Snqk}9d%ZDNBg;7l*;`giMLrBpx4fm&?}R2&X$3n>{9O6X=ebAwz@8=5`g-6qpwC|iJInfF(La!%{50B2=96=IJ~;b4=&!I} z&*%yMm<+ES+Hjrtu-Xq?-+=9+;?iU0zPZz0h1GgwEBoWR?|?In^;Xz|dYjw|JcHR@ zXGw2c1$49g!EZPCOE&~v;=p*`3;t2v3$Da*^JX<}Hd+U}?LG`V;-6D_AF$CdZ~Qr) zf_mRx4*N*^HjRS5PbGW#Kl=oJo~rKk_vg4-gyW|8&lBmubDZyr)SYDokPCqTA;@gnwz@Me&SC^Sz@$4S2ea@MST~7Oc z(Gv7T;{4uBr=5QB1M_vopG)5c`5lz}1!kkek(1REa{5uuvHw9%mHl2nT+Vy1>(qY8 zb(B+E$$92m*uTXfZyXpu0(fSteW5#;2Uv)CfYQEC-+_Mp&=puO2z?y$OAD#I^nD|s z*F}{tdggP`hujD}68EZ1g1+x>fxZ%-r+ou@#&Gz#w0p@o=oNJyc9Z$oAIrhNoaf-t zwC7m!9-3q47?ros!wjrWdks~J|5_)n4EbO7joa6eG=ZNh!y3fwmq`jiE*!#uT5ID_ZK%hh>t*=vCF zDYZXbp#${Y#Qnf1_M`oU!T&b*OJj)h0orFX?IU(*a~k+NsrA}G=Fd<65dI_QZr5;q zaUIte5(oa^x?rZt$6Nk3aK=>k+WE?tQSbf7V9y!E`8U@)XSv=Hoawb8=Zlu`H)*d~ zMPbjWcf&suDCe&iAivd4$d_}LF{NOisFT2Bt`WJvHE(i0pw=S|CZpb7Z+QK@Ydgqq z!}DcXx3-D{{V~43+KlpN_CXvwqvosmivfS#dw^fg)897(jpP4mjH@DNXI|i0rQ&2> z=5;6R_O{ojm7s4r?+;3QefkCDS1jwbTjQJ1?;3F)BJ z(>;8jMB1ypxtHYVbwG{3zqiDG(VFjoe+d2goraL}0^b*sel&#VQwP-f)E#4?SM7MT z`x@GR!QHUKQLa~D0qL8HfPYF}@QYp*+k#$7om2NI1bwH}_xe?>yr5^)2E8KX4>JH9 zJhga!D(!oL<5WjAPMz5V`z*2%l|-5fu+DNapM+~c;?8TaWnj?5&7%Y2md^E z-)AxRbB1s~=MDN{mtRruDRnMzdvC}oui9}r^Su{rMZIRYcYlX>BhKtl?~6`jzG5$) zkGQkSS9x|K@JvzTa_O1$bG2R@`#$hYQh!Id2;=0DFJRB(wA<-l zAg6-L$E$t=aNfdooWza7FM|J|%13H7m3UO1&o%Lo(?RL`g~@+&=7D=v{QT(v^xdrP z<+XnX^!Z$O%Y48|Cvf~BM!j$U;6}9XAK${SOtZSbLFPQyo$sZ?Z)G3vS)SMQ<#~<7 z)y)mTKU>AON7^91W&RF-7)*cYZSue!y>_U5&RTikw-Z;v{?bqDbpX!p>U?C539yb{ z+j+hzem-m*>>Q=;t+zAzLattFeL65N>Mj2!>XkTf74OCL;k_7%=gn52-d&dvAH>dc zF97H2>fShTnCJB$tMmE{o);hGd9ewn?ytpdz|-*@@W_7J<@2aFjqgi~zWc|5K8Sf@ zFH_EhR-iZR>&3ZbGx77>U+mn+3_y;3DsmsPALZP88vG@bfk*0HUm5g!RsQxT--F(A zthXH>G=_EB>qa%MC3C%egzrbmxZjZH&Z+9$`OQ|qIaA$ht7irpNB)W1ps&P}st>~- zI;(!yfqx(5;$QI359yzyZ-t!M%#RZLC%ypsdfwxc@$^DD$UoP{+wM(x-ZxvVum5HK z*se0bY23s8J@p#&%K91oQP#O*zhb@2f2hiKId1a1oc1cL_J=R^puT@Vj;uQl@qS0` zzM!w6oI!QaPn$doJ4_~?8k~3C#d(*s`|C@9r`TEG7y27!V(Hlb%RZn>e8`gq`e*8$ z^J2EW?t3C6(1plck zA*TfQdnFzwlmX6HP6Lnh>!0>;99Q>oel-KJ(_U-1UY7Y=R147m>ar73eQ>NdF=l{N)&*1^-dbH!{_Hqj_!AyO--Y=@*wffxa)%i)Z8WsQ1Zj zsCNeI-S$89mrQm3{`-E&xq|Zn>5rAnKDiSg)~Wr3>#GC*V(xzmo+hcN_xgUQSJrn= zb_M+ymOy<6dl-bngGdF2nQxbM1XJ@i^n`D^}!{5dLb@S6>wk1maR#h!6TfU`vjZ@(Uu zAN*B#PgeZlhR4C*YYFOY$9hlP0{)@Z(C!j{Ha-IS@$I0CoQm|fQ-65v@K_A^$Mb%= z%>Or-hI9PCu{zh7X!@~3U-)xD7m38rWjDYdKIFXvskbxjnMc`k;x%aZH4R}0X|FPj zGoP-8zLTkMY&F#T3Ew%Fes>4YBX+3sh~#^Krx)MR6+HK>hdmD;fqdED_=k3QQQgxo z-xKxjOou(C9b0f-n)DmSJDHc(=RQvr?(;~!muIjaO@_WQA5PqUzehS@yqK=W zi}Ix*=kh7|v*WHRN%RRIQ{7^Zd}^i80?gOk8t zSiPf_%=54Q&jP2|;Y;4v>&g3iA}5RM+_=Y4ubhXjeID}f;QCAYMd5j%H_L?l2E?<3 zac>vnp6GS?4YbR(y}j*q|9r?wZGb{65>yFwU0gbJII-u=53eXIbNJp+WBlqm9^+#R(u*BLy@xxZUg?kfM#G*_>OSl_{$0Ezwf=qf0_4

(@Vm^<^&+HF>sIK-guANW26#^ca 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 z\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 literal 0 HcmV?d00001 diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/colcon-core/packages/ft_can_transceiver_lib b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/colcon-core/packages/ft_can_transceiver_lib new file mode 100644 index 0000000..3b4c22f --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/colcon-core/packages/ft_can_transceiver_lib @@ -0,0 +1 @@ +foxglove_bridge \ No newline at end of file diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/cmake_prefix_path.dsv b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/cmake_prefix_path.dsv new file mode 100644 index 0000000..e119f32 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/cmake_prefix_path.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;CMAKE_PREFIX_PATH; diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/cmake_prefix_path.ps1 b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/cmake_prefix_path.ps1 new file mode 100644 index 0000000..d03facc --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/cmake_prefix_path.ps1 @@ -0,0 +1,3 @@ +# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em + +colcon_prepend_unique_value CMAKE_PREFIX_PATH "$env:COLCON_CURRENT_PREFIX" diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/cmake_prefix_path.sh b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/cmake_prefix_path.sh new file mode 100644 index 0000000..a948e68 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/cmake_prefix_path.sh @@ -0,0 +1,3 @@ +# generated from colcon_core/shell/template/hook_prepend_value.sh.em + +_colcon_prepend_unique_value CMAKE_PREFIX_PATH "$COLCON_CURRENT_PREFIX" diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/ld_library_path_lib.dsv b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/ld_library_path_lib.dsv new file mode 100644 index 0000000..89bec93 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/ld_library_path_lib.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;LD_LIBRARY_PATH;lib diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/ld_library_path_lib.ps1 b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/ld_library_path_lib.ps1 new file mode 100644 index 0000000..f6df601 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/ld_library_path_lib.ps1 @@ -0,0 +1,3 @@ +# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em + +colcon_prepend_unique_value LD_LIBRARY_PATH "$env:COLCON_CURRENT_PREFIX\lib" diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/ld_library_path_lib.sh b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/ld_library_path_lib.sh new file mode 100644 index 0000000..ca3c102 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/ld_library_path_lib.sh @@ -0,0 +1,3 @@ +# generated from colcon_core/shell/template/hook_prepend_value.sh.em + +_colcon_prepend_unique_value LD_LIBRARY_PATH "$COLCON_CURRENT_PREFIX/lib" diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.bash b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.bash new file mode 100644 index 0000000..68ec39c --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.bash @@ -0,0 +1,39 @@ +# generated from colcon_bash/shell/template/package.bash.em + +# This script extends the environment for this package. + +# a bash script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + # the prefix is two levels up from the package specific share directory + _colcon_package_bash_COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`/../.." > /dev/null && pwd)" +else + _colcon_package_bash_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_bash_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source sh script of this package +_colcon_package_bash_source_script "$_colcon_package_bash_COLCON_CURRENT_PREFIX/share/ft_can_transceiver_lib/package.sh" + +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced scripts +COLCON_CURRENT_PREFIX="$_colcon_package_bash_COLCON_CURRENT_PREFIX" + +# source bash hooks +_colcon_package_bash_source_script "$COLCON_CURRENT_PREFIX/share/ft_can_transceiver_lib/local_setup.bash" + +unset COLCON_CURRENT_PREFIX + +unset _colcon_package_bash_source_script +unset _colcon_package_bash_COLCON_CURRENT_PREFIX diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.dsv b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.dsv new file mode 100644 index 0000000..308684f --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.dsv @@ -0,0 +1,11 @@ +source;share/ft_can_transceiver_lib/hook/cmake_prefix_path.ps1 +source;share/ft_can_transceiver_lib/hook/cmake_prefix_path.dsv +source;share/ft_can_transceiver_lib/hook/cmake_prefix_path.sh +source;share/ft_can_transceiver_lib/hook/ld_library_path_lib.ps1 +source;share/ft_can_transceiver_lib/hook/ld_library_path_lib.dsv +source;share/ft_can_transceiver_lib/hook/ld_library_path_lib.sh +source;share/ft_can_transceiver_lib/local_setup.bash +source;share/ft_can_transceiver_lib/local_setup.dsv +source;share/ft_can_transceiver_lib/local_setup.ps1 +source;share/ft_can_transceiver_lib/local_setup.sh +source;share/ft_can_transceiver_lib/local_setup.zsh diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.ps1 b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.ps1 new file mode 100644 index 0000000..b4ae2e0 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.ps1 @@ -0,0 +1,117 @@ +# generated from colcon_powershell/shell/template/package.ps1.em + +# function to append a value to a variable +# which uses colons as separators +# duplicates as well as leading separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +function colcon_append_unique_value { + param ( + $_listname, + $_value + ) + + # get values from variable + if (Test-Path Env:$_listname) { + $_values=(Get-Item env:$_listname).Value + } else { + $_values="" + } + $_duplicate="" + # start with no values + $_all_values="" + # iterate over existing values in the variable + if ($_values) { + $_values.Split(";") | ForEach { + # not an empty string + if ($_) { + # not a duplicate of _value + if ($_ -eq $_value) { + $_duplicate="1" + } + if ($_all_values) { + $_all_values="${_all_values};$_" + } else { + $_all_values="$_" + } + } + } + } + # append only non-duplicates + if (!$_duplicate) { + # avoid leading separator + if ($_all_values) { + $_all_values="${_all_values};${_value}" + } else { + $_all_values="${_value}" + } + } + + # export the updated variable + Set-Item env:\$_listname -Value "$_all_values" +} + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +function colcon_prepend_unique_value { + param ( + $_listname, + $_value + ) + + # get values from variable + if (Test-Path Env:$_listname) { + $_values=(Get-Item env:$_listname).Value + } else { + $_values="" + } + # start with the new value + $_all_values="$_value" + # iterate over existing values in the variable + if ($_values) { + $_values.Split(";") | ForEach { + # not an empty string + if ($_) { + # not a duplicate of _value + if ($_ -ne $_value) { + # keep non-duplicate values + $_all_values="${_all_values};$_" + } + } + } + } + # export the updated variable + Set-Item env:\$_listname -Value "$_all_values" +} + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +function colcon_package_source_powershell_script { + param ( + $_colcon_package_source_powershell_script + ) + # source script with conditional trace output + if (Test-Path $_colcon_package_source_powershell_script) { + if ($env:COLCON_TRACE) { + echo ". '$_colcon_package_source_powershell_script'" + } + . "$_colcon_package_source_powershell_script" + } else { + Write-Error "not found: '$_colcon_package_source_powershell_script'" + } +} + + +# a powershell script is able to determine its own path +# the prefix is two levels up from the package specific share directory +$env:COLCON_CURRENT_PREFIX=(Get-Item $PSCommandPath).Directory.Parent.Parent.FullName + +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/ft_can_transceiver_lib/hook/cmake_prefix_path.ps1" +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/ft_can_transceiver_lib/hook/ld_library_path_lib.ps1" +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/ft_can_transceiver_lib/local_setup.ps1" + +Remove-Item Env:\COLCON_CURRENT_PREFIX diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.sh b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.sh new file mode 100644 index 0000000..9cd1ddf --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.sh @@ -0,0 +1,88 @@ +# generated from colcon_core/shell/template/package.sh.em + +# This script extends the environment for this package. + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prepend_unique_value_IFS=$IFS + IFS=":" + # start with the new value + _all_values="$_value" + # workaround SH_WORD_SPLIT not being set in zsh + if [ "$(command -v colcon_zsh_convert_to_array)" ]; then + colcon_zsh_convert_to_array _values + fi + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + # restore the field separator + IFS=$_colcon_prepend_unique_value_IFS + unset _colcon_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# since a plain shell script can't determine its own path when being sourced +# either use the provided COLCON_CURRENT_PREFIX +# or fall back to the build time prefix (if it exists) +_colcon_package_sh_COLCON_CURRENT_PREFIX="/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib" +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + if [ ! -d "$_colcon_package_sh_COLCON_CURRENT_PREFIX" ]; then + echo "The build time path \"$_colcon_package_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 + unset _colcon_package_sh_COLCON_CURRENT_PREFIX + return 1 + fi + COLCON_CURRENT_PREFIX="$_colcon_package_sh_COLCON_CURRENT_PREFIX" +fi +unset _colcon_package_sh_COLCON_CURRENT_PREFIX + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source sh hooks +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/ft_can_transceiver_lib/hook/cmake_prefix_path.sh" +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/ft_can_transceiver_lib/hook/ld_library_path_lib.sh" +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/ft_can_transceiver_lib/local_setup.sh" + +unset _colcon_package_sh_source_script +unset COLCON_CURRENT_PREFIX + +# do not unset _colcon_prepend_unique_value since it might be used by non-primary shell hooks diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.zsh b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.zsh new file mode 100644 index 0000000..07bf5d1 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.zsh @@ -0,0 +1,50 @@ +# generated from colcon_zsh/shell/template/package.zsh.em + +# This script extends the environment for this package. + +# a zsh script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + # the prefix is two levels up from the package specific share directory + _colcon_package_zsh_COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`/../.." > /dev/null && pwd)" +else + _colcon_package_zsh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_zsh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# function to convert array-like strings into arrays +# to workaround SH_WORD_SPLIT not being set +colcon_zsh_convert_to_array() { + local _listname=$1 + local _dollar="$" + local _split="{=" + local _to_array="(\"$_dollar$_split$_listname}\")" + eval $_listname=$_to_array +} + +# source sh script of this package +_colcon_package_zsh_source_script "$_colcon_package_zsh_COLCON_CURRENT_PREFIX/share/ft_can_transceiver_lib/package.sh" +unset convert_zsh_to_array + +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced scripts +COLCON_CURRENT_PREFIX="$_colcon_package_zsh_COLCON_CURRENT_PREFIX" + +# source zsh hooks +_colcon_package_zsh_source_script "$COLCON_CURRENT_PREFIX/share/ft_can_transceiver_lib/local_setup.zsh" + +unset COLCON_CURRENT_PREFIX + +unset _colcon_package_zsh_source_script +unset _colcon_package_zsh_COLCON_CURRENT_PREFIX diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/local_setup.bash b/ros2_ws/src/ft_can_transceiver_lib/install/local_setup.bash new file mode 100644 index 0000000..03f0025 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/local_setup.bash @@ -0,0 +1,121 @@ +# generated from colcon_bash/shell/template/prefix.bash.em + +# This script extends the environment with all packages contained in this +# prefix path. + +# a bash script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + _colcon_prefix_bash_COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd)" +else + _colcon_prefix_bash_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prefix_bash_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prefix_bash_prepend_unique_value_IFS="$IFS" + IFS=":" + # start with the new value + _all_values="$_value" + _contained_value="" + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + _contained_value=1 + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + if [ -z "$_contained_value" ]; then + if [ -n "$COLCON_TRACE" ]; then + if [ "$_all_values" = "$_value" ]; then + echo "export $_listname=$_value" + else + echo "export $_listname=$_value:\$$_listname" + fi + fi + fi + unset _contained_value + # restore the field separator + IFS="$_colcon_prefix_bash_prepend_unique_value_IFS" + unset _colcon_prefix_bash_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# add this prefix to the COLCON_PREFIX_PATH +_colcon_prefix_bash_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_bash_COLCON_CURRENT_PREFIX" +unset _colcon_prefix_bash_prepend_unique_value + +# check environment variable for custom Python executable +if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then + if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then + echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist" + return 1 + fi + _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE" +else + # try the Python executable known at configure time + _colcon_python_executable="/usr/bin/python3" + # if it doesn't exist try a fall back + if [ ! -f "$_colcon_python_executable" ]; then + if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then + echo "error: unable to find python3 executable" + return 1 + fi + _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"` + fi +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# get all commands in topological order +_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_bash_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh bash)" +unset _colcon_python_executable +if [ -n "$COLCON_TRACE" ]; then + echo "$(declare -f _colcon_prefix_sh_source_script)" + echo "# Execute generated script:" + echo "# <<<" + echo "${_colcon_ordered_commands}" + echo "# >>>" + echo "unset _colcon_prefix_sh_source_script" +fi +eval "${_colcon_ordered_commands}" +unset _colcon_ordered_commands + +unset _colcon_prefix_sh_source_script + +unset _colcon_prefix_bash_COLCON_CURRENT_PREFIX diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/local_setup.ps1 b/ros2_ws/src/ft_can_transceiver_lib/install/local_setup.ps1 new file mode 100644 index 0000000..6f68c8d --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/local_setup.ps1 @@ -0,0 +1,55 @@ +# generated from colcon_powershell/shell/template/prefix.ps1.em + +# This script extends the environment with all packages contained in this +# prefix path. + +# check environment variable for custom Python executable +if ($env:COLCON_PYTHON_EXECUTABLE) { + if (!(Test-Path "$env:COLCON_PYTHON_EXECUTABLE" -PathType Leaf)) { + echo "error: COLCON_PYTHON_EXECUTABLE '$env:COLCON_PYTHON_EXECUTABLE' doesn't exist" + exit 1 + } + $_colcon_python_executable="$env:COLCON_PYTHON_EXECUTABLE" +} else { + # use the Python executable known at configure time + $_colcon_python_executable="/usr/bin/python3" + # if it doesn't exist try a fall back + if (!(Test-Path "$_colcon_python_executable" -PathType Leaf)) { + if (!(Get-Command "python3" -ErrorAction SilentlyContinue)) { + echo "error: unable to find python3 executable" + exit 1 + } + $_colcon_python_executable="python3" + } +} + +# function to source another script with conditional trace output +# first argument: the path of the script +function _colcon_prefix_powershell_source_script { + param ( + $_colcon_prefix_powershell_source_script_param + ) + # source script with conditional trace output + if (Test-Path $_colcon_prefix_powershell_source_script_param) { + if ($env:COLCON_TRACE) { + echo ". '$_colcon_prefix_powershell_source_script_param'" + } + . "$_colcon_prefix_powershell_source_script_param" + } else { + Write-Error "not found: '$_colcon_prefix_powershell_source_script_param'" + } +} + +# get all commands in topological order +$_colcon_ordered_commands = & "$_colcon_python_executable" "$(Split-Path $PSCommandPath -Parent)/_local_setup_util_ps1.py" ps1 + +# execute all commands in topological order +if ($env:COLCON_TRACE) { + echo "Execute generated script:" + echo "<<<" + $_colcon_ordered_commands.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries) | Write-Output + echo ">>>" +} +if ($_colcon_ordered_commands) { + $_colcon_ordered_commands.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries) | Invoke-Expression +} diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/local_setup.sh b/ros2_ws/src/ft_can_transceiver_lib/install/local_setup.sh new file mode 100644 index 0000000..7720a7b --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/local_setup.sh @@ -0,0 +1,137 @@ +# generated from colcon_core/shell/template/prefix.sh.em + +# This script extends the environment with all packages contained in this +# prefix path. + +# since a plain shell script can't determine its own path when being sourced +# either use the provided COLCON_CURRENT_PREFIX +# or fall back to the build time prefix (if it exists) +_colcon_prefix_sh_COLCON_CURRENT_PREFIX="/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install" +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + if [ ! -d "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX" ]; then + echo "The build time path \"$_colcon_prefix_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 + unset _colcon_prefix_sh_COLCON_CURRENT_PREFIX + return 1 + fi +else + _colcon_prefix_sh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prefix_sh_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prefix_sh_prepend_unique_value_IFS="$IFS" + IFS=":" + # start with the new value + _all_values="$_value" + _contained_value="" + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + _contained_value=1 + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + if [ -z "$_contained_value" ]; then + if [ -n "$COLCON_TRACE" ]; then + if [ "$_all_values" = "$_value" ]; then + echo "export $_listname=$_value" + else + echo "export $_listname=$_value:\$$_listname" + fi + fi + fi + unset _contained_value + # restore the field separator + IFS="$_colcon_prefix_sh_prepend_unique_value_IFS" + unset _colcon_prefix_sh_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# add this prefix to the COLCON_PREFIX_PATH +_colcon_prefix_sh_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX" +unset _colcon_prefix_sh_prepend_unique_value + +# check environment variable for custom Python executable +if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then + if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then + echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist" + return 1 + fi + _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE" +else + # try the Python executable known at configure time + _colcon_python_executable="/usr/bin/python3" + # if it doesn't exist try a fall back + if [ ! -f "$_colcon_python_executable" ]; then + if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then + echo "error: unable to find python3 executable" + return 1 + fi + _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"` + fi +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# get all commands in topological order +_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh)" +unset _colcon_python_executable +if [ -n "$COLCON_TRACE" ]; then + echo "_colcon_prefix_sh_source_script() { + if [ -f \"\$1\" ]; then + if [ -n \"\$COLCON_TRACE\" ]; then + echo \"# . \\\"\$1\\\"\" + fi + . \"\$1\" + else + echo \"not found: \\\"\$1\\\"\" 1>&2 + fi + }" + echo "# Execute generated script:" + echo "# <<<" + echo "${_colcon_ordered_commands}" + echo "# >>>" + echo "unset _colcon_prefix_sh_source_script" +fi +eval "${_colcon_ordered_commands}" +unset _colcon_ordered_commands + +unset _colcon_prefix_sh_source_script + +unset _colcon_prefix_sh_COLCON_CURRENT_PREFIX diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/local_setup.zsh b/ros2_ws/src/ft_can_transceiver_lib/install/local_setup.zsh new file mode 100644 index 0000000..b648710 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/local_setup.zsh @@ -0,0 +1,134 @@ +# generated from colcon_zsh/shell/template/prefix.zsh.em + +# This script extends the environment with all packages contained in this +# prefix path. + +# a zsh script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + _colcon_prefix_zsh_COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`" > /dev/null && pwd)" +else + _colcon_prefix_zsh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to convert array-like strings into arrays +# to workaround SH_WORD_SPLIT not being set +_colcon_prefix_zsh_convert_to_array() { + local _listname=$1 + local _dollar="$" + local _split="{=" + local _to_array="(\"$_dollar$_split$_listname}\")" + eval $_listname=$_to_array +} + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prefix_zsh_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prefix_zsh_prepend_unique_value_IFS="$IFS" + IFS=":" + # start with the new value + _all_values="$_value" + _contained_value="" + # workaround SH_WORD_SPLIT not being set + _colcon_prefix_zsh_convert_to_array _values + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + _contained_value=1 + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + if [ -z "$_contained_value" ]; then + if [ -n "$COLCON_TRACE" ]; then + if [ "$_all_values" = "$_value" ]; then + echo "export $_listname=$_value" + else + echo "export $_listname=$_value:\$$_listname" + fi + fi + fi + unset _contained_value + # restore the field separator + IFS="$_colcon_prefix_zsh_prepend_unique_value_IFS" + unset _colcon_prefix_zsh_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# add this prefix to the COLCON_PREFIX_PATH +_colcon_prefix_zsh_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_zsh_COLCON_CURRENT_PREFIX" +unset _colcon_prefix_zsh_prepend_unique_value +unset _colcon_prefix_zsh_convert_to_array + +# check environment variable for custom Python executable +if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then + if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then + echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist" + return 1 + fi + _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE" +else + # try the Python executable known at configure time + _colcon_python_executable="/usr/bin/python3" + # if it doesn't exist try a fall back + if [ ! -f "$_colcon_python_executable" ]; then + if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then + echo "error: unable to find python3 executable" + return 1 + fi + _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"` + fi +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# get all commands in topological order +_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_zsh_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh zsh)" +unset _colcon_python_executable +if [ -n "$COLCON_TRACE" ]; then + echo "$(declare -f _colcon_prefix_sh_source_script)" + echo "# Execute generated script:" + echo "# <<<" + echo "${_colcon_ordered_commands}" + echo "# >>>" + echo "unset _colcon_prefix_sh_source_script" +fi +eval "${_colcon_ordered_commands}" +unset _colcon_ordered_commands + +unset _colcon_prefix_sh_source_script + +unset _colcon_prefix_zsh_COLCON_CURRENT_PREFIX diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/setup.bash b/ros2_ws/src/ft_can_transceiver_lib/install/setup.bash new file mode 100644 index 0000000..bb38dd2 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/setup.bash @@ -0,0 +1,31 @@ +# generated from colcon_bash/shell/template/prefix_chain.bash.em + +# This script extends the environment with the environment of other prefix +# paths which were sourced when this file was generated as well as all packages +# contained in this prefix path. + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_chain_bash_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source chained prefixes +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="/opt/ros/jazzy" +_colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash" + +# source this prefix +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd)" +_colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash" + +unset COLCON_CURRENT_PREFIX +unset _colcon_prefix_chain_bash_source_script diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/setup.ps1 b/ros2_ws/src/ft_can_transceiver_lib/install/setup.ps1 new file mode 100644 index 0000000..0b38e3e --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/setup.ps1 @@ -0,0 +1,29 @@ +# generated from colcon_powershell/shell/template/prefix_chain.ps1.em + +# This script extends the environment with the environment of other prefix +# paths which were sourced when this file was generated as well as all packages +# contained in this prefix path. + +# function to source another script with conditional trace output +# first argument: the path of the script +function _colcon_prefix_chain_powershell_source_script { + param ( + $_colcon_prefix_chain_powershell_source_script_param + ) + # source script with conditional trace output + if (Test-Path $_colcon_prefix_chain_powershell_source_script_param) { + if ($env:COLCON_TRACE) { + echo ". '$_colcon_prefix_chain_powershell_source_script_param'" + } + . "$_colcon_prefix_chain_powershell_source_script_param" + } else { + Write-Error "not found: '$_colcon_prefix_chain_powershell_source_script_param'" + } +} + +# source chained prefixes +_colcon_prefix_chain_powershell_source_script "/opt/ros/jazzy\local_setup.ps1" + +# source this prefix +$env:COLCON_CURRENT_PREFIX=(Split-Path $PSCommandPath -Parent) +_colcon_prefix_chain_powershell_source_script "$env:COLCON_CURRENT_PREFIX\local_setup.ps1" diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/setup.sh b/ros2_ws/src/ft_can_transceiver_lib/install/setup.sh new file mode 100644 index 0000000..0ae2d81 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/setup.sh @@ -0,0 +1,45 @@ +# generated from colcon_core/shell/template/prefix_chain.sh.em + +# This script extends the environment with the environment of other prefix +# paths which were sourced when this file was generated as well as all packages +# contained in this prefix path. + +# since a plain shell script can't determine its own path when being sourced +# either use the provided COLCON_CURRENT_PREFIX +# or fall back to the build time prefix (if it exists) +_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX=/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install +if [ ! -z "$COLCON_CURRENT_PREFIX" ]; then + _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +elif [ ! -d "$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX" ]; then + echo "The build time path \"$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 + unset _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX + return 1 +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_chain_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source chained prefixes +# setting COLCON_CURRENT_PREFIX avoids relying on the build time prefix of the sourced script +COLCON_CURRENT_PREFIX="/opt/ros/jazzy" +_colcon_prefix_chain_sh_source_script "$COLCON_CURRENT_PREFIX/local_setup.sh" + + +# source this prefix +# setting COLCON_CURRENT_PREFIX avoids relying on the build time prefix of the sourced script +COLCON_CURRENT_PREFIX="$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX" +_colcon_prefix_chain_sh_source_script "$COLCON_CURRENT_PREFIX/local_setup.sh" + +unset _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX +unset _colcon_prefix_chain_sh_source_script +unset COLCON_CURRENT_PREFIX diff --git a/ros2_ws/src/ft_can_transceiver_lib/install/setup.zsh b/ros2_ws/src/ft_can_transceiver_lib/install/setup.zsh new file mode 100644 index 0000000..6e4a496 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/install/setup.zsh @@ -0,0 +1,31 @@ +# generated from colcon_zsh/shell/template/prefix_chain.zsh.em + +# This script extends the environment with the environment of other prefix +# paths which were sourced when this file was generated as well as all packages +# contained in this prefix path. + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_chain_zsh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source chained prefixes +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="/opt/ros/jazzy" +_colcon_prefix_chain_zsh_source_script "$COLCON_CURRENT_PREFIX/local_setup.zsh" + +# source this prefix +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`" > /dev/null && pwd)" +_colcon_prefix_chain_zsh_source_script "$COLCON_CURRENT_PREFIX/local_setup.zsh" + +unset COLCON_CURRENT_PREFIX +unset _colcon_prefix_chain_zsh_source_script diff --git a/ros2_ws/src/ft_can_transceiver_lib/log/COLCON_IGNORE b/ros2_ws/src/ft_can_transceiver_lib/log/COLCON_IGNORE new file mode 100644 index 0000000..e69de29 diff --git a/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/events.log b/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/events.log new file mode 100644 index 0000000..4fd3ce1 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/events.log @@ -0,0 +1,340 @@ +[0.000000] (-) TimerEvent: {} +[0.001747] (ft_can_transceiver_lib) JobQueued: {'identifier': 'ft_can_transceiver_lib', 'dependencies': OrderedDict()} +[0.002745] (ft_can_transceiver_lib) JobStarted: {'identifier': 'ft_can_transceiver_lib'} +[0.058036] (ft_can_transceiver_lib) JobProgress: {'identifier': 'ft_can_transceiver_lib', 'progress': 'cmake'} +[0.091446] (-) TimerEvent: {} +[0.120407] (ft_can_transceiver_lib) Command: {'cmd': ['/usr/bin/cmake', '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib', '-DCMAKE_INSTALL_PREFIX=/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib'], 'cwd': '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib', 'env': OrderedDict({'HOSTNAME': 'lima-rancher-desktop', 'GIT_ASKPASS': '/vscode/vscode-server/bin/linux-x64/2901c5ac6db8a986a5666c3af51ff804d05af0d4/extensions/git/dist/askpass.sh', 'SHLVL': '2', 'LD_LIBRARY_PATH': '/opt/ros/jazzy/lib/x86_64-linux-gnu:/opt/ros/jazzy/lib', 'BROWSER': '/vscode/vscode-server/bin/linux-x64/2901c5ac6db8a986a5666c3af51ff804d05af0d4/bin/helpers/browser.sh', 'HOME': '/home/USERNAME', 'OLDPWD': '/workspaces/can_viewer/ros2_ws/src', 'TERM_PROGRAM_VERSION': '1.101.2', 'VSCODE_IPC_HOOK_CLI': '/tmp/vscode-ipc-842556d3-6e0e-4e48-a246-49e8a95d502d.sock', 'ROS_PYTHON_VERSION': '3', 'VSCODE_GIT_ASKPASS_MAIN': '/vscode/vscode-server/bin/linux-x64/2901c5ac6db8a986a5666c3af51ff804d05af0d4/extensions/git/dist/askpass-main.js', 'VSCODE_GIT_ASKPASS_NODE': '/vscode/vscode-server/bin/linux-x64/2901c5ac6db8a986a5666c3af51ff804d05af0d4/node', 'PYDEVD_DISABLE_FILE_VALIDATION': '1', 'BUNDLED_DEBUGPY_PATH': '/home/USERNAME/.vscode-server/extensions/ms-python.debugpy-2025.8.0-linux-x64/bundled/libs/debugpy', 'COLORTERM': 'truecolor', 'REMOTE_CONTAINERS': 'true', 'ROS_DISTRO': 'jazzy', 'REMOTE_CONTAINERS_IPC': '/tmp/vscode-remote-containers-ipc-96591647-acec-4c8c-85fc-99bab2a074b2.sock', '_': '/usr/bin/colcon', 'ROS_VERSION': '2', 'PIP_BREAK_SYSTEM_PACKAGES': '1', 'TERM': 'xterm-256color', 'PATH': '/vscode/vscode-server/bin/linux-x64/2901c5ac6db8a986a5666c3af51ff804d05af0d4/bin/remote-cli:/home/USERNAME/.local/bin:/opt/ros/jazzy/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/USERNAME/.vscode-server/extensions/ms-python.debugpy-2025.8.0-linux-x64/bundled/scripts/noConfigScripts', 'REMOTE_CONTAINERS_SOCKETS': '["/tmp/vscode-ssh-auth-96591647-acec-4c8c-85fc-99bab2a074b2.sock","/tmp/.X11-unix/X0","/home/USERNAME/.gnupg/S.gpg-agent"]', 'DISPLAY': ':0', 'VSCODE_DEBUGPY_ADAPTER_ENDPOINTS': '/home/USERNAME/.vscode-server/extensions/ms-python.debugpy-2025.8.0-linux-x64/.noConfigDebugAdapterEndpoints/endpoint-66e4b2104f6513ce.txt', 'LANG': 'C.UTF-8', 'LS_COLORS': 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:*~=00;90:*#=00;90:*.bak=00;90:*.crdownload=00;90:*.dpkg-dist=00;90:*.dpkg-new=00;90:*.dpkg-old=00;90:*.dpkg-tmp=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:*.swp=00;90:*.tmp=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:', 'VSCODE_GIT_IPC_HANDLE': '/tmp/vscode-git-89a19b2569.sock', 'TERM_PROGRAM': 'vscode', 'SSH_AUTH_SOCK': '/tmp/vscode-ssh-auth-96591647-acec-4c8c-85fc-99bab2a074b2.sock', 'AMENT_PREFIX_PATH': '/opt/ros/jazzy', 'REMOTE_CONTAINERS_DISPLAY_SOCK': '/tmp/.X11-unix/X0', 'SHELL': '/bin/bash', 'ROS_AUTOMATIC_DISCOVERY_RANGE': 'SUBNET', 'VSCODE_GIT_ASKPASS_EXTRA_ARGS': '', 'PWD': '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib', 'LC_ALL': 'C.UTF-8', 'PYTHONPATH': '/opt/ros/jazzy/lib/python3.12/site-packages', 'COLCON': '1', 'CMAKE_PREFIX_PATH': '/opt/ros/jazzy'}), 'shell': False} +[0.192451] (-) TimerEvent: {} +[0.295161] (-) TimerEvent: {} +[0.398463] (-) TimerEvent: {} +[0.502452] (-) TimerEvent: {} +[0.641471] (-) TimerEvent: {} +[0.745620] (-) TimerEvent: {} +[0.847920] (-) TimerEvent: {} +[0.951705] (-) TimerEvent: {} +[0.967615] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- The C compiler identification is GNU 13.3.0\n'} +[1.053123] (-) TimerEvent: {} +[1.156505] (-) TimerEvent: {} +[1.259363] (-) TimerEvent: {} +[1.362420] (-) TimerEvent: {} +[1.465226] (-) TimerEvent: {} +[1.476368] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- The CXX compiler identification is GNU 13.3.0\n'} +[1.566035] (-) TimerEvent: {} +[1.580718] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Detecting C compiler ABI info\n'} +[1.667278] (-) TimerEvent: {} +[1.769649] (-) TimerEvent: {} +[1.873636] (-) TimerEvent: {} +[1.976651] (-) TimerEvent: {} +[2.078662] (-) TimerEvent: {} +[2.181198] (-) TimerEvent: {} +[2.285440] (-) TimerEvent: {} +[2.387372] (-) TimerEvent: {} +[2.490252] (-) TimerEvent: {} +[2.594022] (-) TimerEvent: {} +[2.696908] (-) TimerEvent: {} +[2.799845] (-) TimerEvent: {} +[2.902406] (-) TimerEvent: {} +[3.004948] (-) TimerEvent: {} +[3.062451] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Detecting C compiler ABI info - done\n'} +[3.106140] (-) TimerEvent: {} +[3.194253] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Check for working C compiler: /usr/bin/cc - skipped\n'} +[3.198159] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Detecting C compile features\n'} +[3.202436] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Detecting C compile features - done\n'} +[3.208716] (-) TimerEvent: {} +[3.285924] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Detecting CXX compiler ABI info\n'} +[3.310248] (-) TimerEvent: {} +[3.412569] (-) TimerEvent: {} +[3.514791] (-) TimerEvent: {} +[3.618571] (-) TimerEvent: {} +[3.722018] (-) TimerEvent: {} +[3.825662] (-) TimerEvent: {} +[3.928400] (-) TimerEvent: {} +[4.030644] (-) TimerEvent: {} +[4.134068] (-) TimerEvent: {} +[4.239444] (-) TimerEvent: {} +[4.344079] (-) TimerEvent: {} +[4.446593] (-) TimerEvent: {} +[4.549113] (-) TimerEvent: {} +[4.652252] (-) TimerEvent: {} +[4.752786] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Detecting CXX compiler ABI info - done\n'} +[4.755607] (-) TimerEvent: {} +[4.857783] (-) TimerEvent: {} +[4.888753] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Check for working CXX compiler: /usr/bin/c++ - skipped\n'} +[4.892321] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Detecting CXX compile features\n'} +[4.895316] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Detecting CXX compile features - done\n'} +[4.958895] (-) TimerEvent: {} +[5.062325] (-) TimerEvent: {} +[5.164901] (-) TimerEvent: {} +[5.266922] (-) TimerEvent: {} +[5.369098] (-) TimerEvent: {} +[5.471341] (ft_can_transceiver_lib) StdoutLine: {'line': b'Successfully generated ./can1.h and ./can1.c.\n'} +[5.474418] (-) TimerEvent: {} +[5.576876] (-) TimerEvent: {} +[5.679552] (-) TimerEvent: {} +[5.782302] (-) TimerEvent: {} +[5.847319] (ft_can_transceiver_lib) StderrLine: {'line': b'usage: cantools [-h] [-d] [--version]\n'} +[5.852260] (ft_can_transceiver_lib) StderrLine: {'line': b' {plot,list,generate_c_source,decode,monitor,convert,dump} ...\n'} +[5.855009] (ft_can_transceiver_lib) StderrLine: {'line': b"cantools: error: argument subcommand: invalid choice: 'generate_c_source_transceiver' (choose from 'plot', 'list', 'generate_c_source', 'decode', 'monitor', 'convert', 'dump')\n"} +[5.884274] (-) TimerEvent: {} +[5.988093] (-) TimerEvent: {} +[6.006831] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Configuring done (5.7s)\n'} +[6.089542] (-) TimerEvent: {} +[6.193209] (-) TimerEvent: {} +[6.296259] (-) TimerEvent: {} +[6.398441] (-) TimerEvent: {} +[6.501969] (-) TimerEvent: {} +[6.524339] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Generating done (0.4s)\n'} +[6.603593] (-) TimerEvent: {} +[6.705624] (-) TimerEvent: {} +[6.797705] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Build files have been written to: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib\n'} +[6.807530] (ft_can_transceiver_lib) CommandEnded: {'returncode': 0} +[6.810380] (-) TimerEvent: {} +[6.816858] (ft_can_transceiver_lib) JobProgress: {'identifier': 'ft_can_transceiver_lib', 'progress': 'build'} +[6.826594] (ft_can_transceiver_lib) Command: {'cmd': ['/usr/bin/cmake', '--build', '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib', '--', '-j8', '-l8'], 'cwd': '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib', 'env': OrderedDict({'HOSTNAME': 'lima-rancher-desktop', 'GIT_ASKPASS': '/vscode/vscode-server/bin/linux-x64/2901c5ac6db8a986a5666c3af51ff804d05af0d4/extensions/git/dist/askpass.sh', 'SHLVL': '2', 'LD_LIBRARY_PATH': '/opt/ros/jazzy/lib/x86_64-linux-gnu:/opt/ros/jazzy/lib', 'BROWSER': '/vscode/vscode-server/bin/linux-x64/2901c5ac6db8a986a5666c3af51ff804d05af0d4/bin/helpers/browser.sh', 'HOME': '/home/USERNAME', 'OLDPWD': '/workspaces/can_viewer/ros2_ws/src', 'TERM_PROGRAM_VERSION': '1.101.2', 'VSCODE_IPC_HOOK_CLI': '/tmp/vscode-ipc-842556d3-6e0e-4e48-a246-49e8a95d502d.sock', 'ROS_PYTHON_VERSION': '3', 'VSCODE_GIT_ASKPASS_MAIN': '/vscode/vscode-server/bin/linux-x64/2901c5ac6db8a986a5666c3af51ff804d05af0d4/extensions/git/dist/askpass-main.js', 'VSCODE_GIT_ASKPASS_NODE': '/vscode/vscode-server/bin/linux-x64/2901c5ac6db8a986a5666c3af51ff804d05af0d4/node', 'PYDEVD_DISABLE_FILE_VALIDATION': '1', 'BUNDLED_DEBUGPY_PATH': '/home/USERNAME/.vscode-server/extensions/ms-python.debugpy-2025.8.0-linux-x64/bundled/libs/debugpy', 'COLORTERM': 'truecolor', 'REMOTE_CONTAINERS': 'true', 'ROS_DISTRO': 'jazzy', 'REMOTE_CONTAINERS_IPC': '/tmp/vscode-remote-containers-ipc-96591647-acec-4c8c-85fc-99bab2a074b2.sock', '_': '/usr/bin/colcon', 'ROS_VERSION': '2', 'PIP_BREAK_SYSTEM_PACKAGES': '1', 'TERM': 'xterm-256color', 'PATH': '/vscode/vscode-server/bin/linux-x64/2901c5ac6db8a986a5666c3af51ff804d05af0d4/bin/remote-cli:/home/USERNAME/.local/bin:/opt/ros/jazzy/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/USERNAME/.vscode-server/extensions/ms-python.debugpy-2025.8.0-linux-x64/bundled/scripts/noConfigScripts', 'REMOTE_CONTAINERS_SOCKETS': '["/tmp/vscode-ssh-auth-96591647-acec-4c8c-85fc-99bab2a074b2.sock","/tmp/.X11-unix/X0","/home/USERNAME/.gnupg/S.gpg-agent"]', 'DISPLAY': ':0', 'VSCODE_DEBUGPY_ADAPTER_ENDPOINTS': '/home/USERNAME/.vscode-server/extensions/ms-python.debugpy-2025.8.0-linux-x64/.noConfigDebugAdapterEndpoints/endpoint-66e4b2104f6513ce.txt', 'LANG': 'C.UTF-8', 'LS_COLORS': 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:*~=00;90:*#=00;90:*.bak=00;90:*.crdownload=00;90:*.dpkg-dist=00;90:*.dpkg-new=00;90:*.dpkg-old=00;90:*.dpkg-tmp=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:*.swp=00;90:*.tmp=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:', 'VSCODE_GIT_IPC_HANDLE': '/tmp/vscode-git-89a19b2569.sock', 'TERM_PROGRAM': 'vscode', 'SSH_AUTH_SOCK': '/tmp/vscode-ssh-auth-96591647-acec-4c8c-85fc-99bab2a074b2.sock', 'AMENT_PREFIX_PATH': '/opt/ros/jazzy', 'REMOTE_CONTAINERS_DISPLAY_SOCK': '/tmp/.X11-unix/X0', 'SHELL': '/bin/bash', 'ROS_AUTOMATIC_DISCOVERY_RANGE': 'SUBNET', 'VSCODE_GIT_ASKPASS_EXTRA_ARGS': '', 'PWD': '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib', 'LC_ALL': 'C.UTF-8', 'PYTHONPATH': '/opt/ros/jazzy/lib/python3.12/site-packages', 'COLCON': '1', 'CMAKE_PREFIX_PATH': '/opt/ros/jazzy'}), 'shell': False} +[6.870021] (ft_can_transceiver_lib) StderrLine: {'line': b"gmake: Warning: File 'Makefile' has modification time 0.31 s in the future\n"} +[6.911625] (-) TimerEvent: {} +[6.965883] (ft_can_transceiver_lib) StderrLine: {'line': b"gmake[1]: Warning: File 'CMakeFiles/Makefile2' has modification time 0.21 s in the future\n"} +[6.999439] (ft_can_transceiver_lib) StderrLine: {'line': b"gmake[2]: Warning: File 'CMakeFiles/ft_can_transceiver_lib.dir/flags.make' has modification time 0.18 s in the future\n"} +[7.013438] (-) TimerEvent: {} +[7.035299] (ft_can_transceiver_lib) StderrLine: {'line': b'gmake[2]: warning: Clock skew detected. Your build may be incomplete.\n'} +[7.097399] (ft_can_transceiver_lib) StderrLine: {'line': b"gmake[2]: Warning: File 'CMakeFiles/ft_can_transceiver_lib.dir/flags.make' has modification time 0.081 s in the future\n"} +[7.114579] (-) TimerEvent: {} +[7.180989] (ft_can_transceiver_lib) StdoutLine: {'line': b'[ 66%] \x1b[32mBuilding CXX object CMakeFiles/ft_can_transceiver_lib.dir/src/can1.cpp.o\x1b[0m\n'} +[7.185392] (ft_can_transceiver_lib) StdoutLine: {'line': b'[ 66%] \x1b[32mBuilding CXX object CMakeFiles/ft_can_transceiver_lib.dir/src/transceiver.cpp.o\x1b[0m\n'} +[7.216301] (-) TimerEvent: {} +[7.318242] (-) TimerEvent: {} +[7.423216] (-) TimerEvent: {} +[7.530030] (-) TimerEvent: {} +[7.640324] (-) TimerEvent: {} +[7.746945] (-) TimerEvent: {} +[7.855828] (-) TimerEvent: {} +[7.961703] (-) TimerEvent: {} +[8.081995] (-) TimerEvent: {} +[8.187379] (-) TimerEvent: {} +[8.291795] (-) TimerEvent: {} +[8.396263] (-) TimerEvent: {} +[8.500543] (-) TimerEvent: {} +[8.607853] (-) TimerEvent: {} +[8.715245] (-) TimerEvent: {} +[8.826123] (-) TimerEvent: {} +[8.933610] (-) TimerEvent: {} +[9.040920] (-) TimerEvent: {} +[9.146321] (-) TimerEvent: {} +[9.250537] (-) TimerEvent: {} +[9.357268] (-) TimerEvent: {} +[9.463178] (-) TimerEvent: {} +[9.568446] (-) TimerEvent: {} +[9.676698] (-) TimerEvent: {} +[9.781336] (-) TimerEvent: {} +[9.890097] (-) TimerEvent: {} +[9.998797] (-) TimerEvent: {} +[10.110536] (-) TimerEvent: {} +[10.217165] (-) TimerEvent: {} +[10.324639] (-) TimerEvent: {} +[10.430408] (-) TimerEvent: {} +[10.539986] (-) TimerEvent: {} +[10.652791] (-) TimerEvent: {} +[10.758147] (-) TimerEvent: {} +[10.869993] (-) TimerEvent: {} +[10.977717] (-) TimerEvent: {} +[11.084981] (-) TimerEvent: {} +[11.194941] (-) TimerEvent: {} +[11.302355] (-) TimerEvent: {} +[11.408373] (-) TimerEvent: {} +[11.516341] (-) TimerEvent: {} +[11.623419] (-) TimerEvent: {} +[11.732631] (-) TimerEvent: {} +[11.843263] (-) TimerEvent: {} +[11.950331] (-) TimerEvent: {} +[12.055886] (-) TimerEvent: {} +[12.167160] (-) TimerEvent: {} +[12.270633] (-) TimerEvent: {} +[12.378550] (-) TimerEvent: {} +[12.488154] (-) TimerEvent: {} +[12.593092] (-) TimerEvent: {} +[12.696813] (-) TimerEvent: {} +[12.805549] (-) TimerEvent: {} +[12.911512] (-) TimerEvent: {} +[13.025780] (-) TimerEvent: {} +[13.132652] (-) TimerEvent: {} +[13.241586] (-) TimerEvent: {} +[13.347315] (-) TimerEvent: {} +[13.452678] (-) TimerEvent: {} +[13.559407] (-) TimerEvent: {} +[13.670383] (-) TimerEvent: {} +[13.778629] (-) TimerEvent: {} +[13.886336] (-) TimerEvent: {} +[13.996189] (-) TimerEvent: {} +[14.104840] (-) TimerEvent: {} +[14.210668] (-) TimerEvent: {} +[14.319370] (-) TimerEvent: {} +[14.426916] (-) TimerEvent: {} +[14.535075] (-) TimerEvent: {} +[14.640431] (-) TimerEvent: {} +[14.746892] (-) TimerEvent: {} +[14.803464] (ft_can_transceiver_lib) StderrLine: {'line': b'\x1b[01m\x1b[K/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/src/transceiver.cpp:\x1b[m\x1b[K In constructor \xe2\x80\x98\x1b[01m\x1b[Kcanlib::Transceiver::\x1b[01;32m\x1b[KTransceiver\x1b[m\x1b[K(std::string, std::vector)\x1b[m\x1b[K\xe2\x80\x99:\n'} +[14.816900] (ft_can_transceiver_lib) StderrLine: {'line': b'\x1b[01m\x1b[K/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/src/transceiver.cpp:17:16:\x1b[m\x1b[K \x1b[01;35m\x1b[Kwarning: \x1b[m\x1b[KISO C++ forbids variable length array \xe2\x80\x98\x1b[01m\x1b[Kfilter_arr\x1b[m\x1b[K\xe2\x80\x99 [\x1b[01;35m\x1b[K\x1b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wvla\x07-Wvla\x1b]8;;\x07\x1b[m\x1b[K]\n'} +[14.829044] (ft_can_transceiver_lib) StderrLine: {'line': b' 17 | can_filter \x1b[01;35m\x1b[Kfilter_arr\x1b[m\x1b[K[filters.size()];\n'} +[14.837802] (ft_can_transceiver_lib) StderrLine: {'line': b' | \x1b[01;35m\x1b[K^~~~~~~~~~\x1b[m\x1b[K\n'} +[14.849516] (-) TimerEvent: {} +[14.956170] (-) TimerEvent: {} +[15.061220] (-) TimerEvent: {} +[15.167842] (-) TimerEvent: {} +[15.209014] (ft_can_transceiver_lib) StderrLine: {'line': b'\x1b[01m\x1b[K/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/src/transceiver.cpp:\x1b[m\x1b[K In member function \xe2\x80\x98\x1b[01m\x1b[Kvirtual bool canlib::Transceiver::\x1b[01;32m\x1b[Kreceive\x1b[m\x1b[K(int)\x1b[m\x1b[K\xe2\x80\x99:\n'} +[15.214311] (ft_can_transceiver_lib) StderrLine: {'line': b'\x1b[01m\x1b[K/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/src/transceiver.cpp:1236:1:\x1b[m\x1b[K \x1b[01;35m\x1b[Kwarning: \x1b[m\x1b[Kcontrol reaches end of non-void function [\x1b[01;35m\x1b[K\x1b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wreturn-type\x07-Wreturn-type\x1b]8;;\x07\x1b[m\x1b[K]\n'} +[15.224920] (ft_can_transceiver_lib) StderrLine: {'line': b' 1236 | \x1b[01;35m\x1b[K}\x1b[m\x1b[K\n'} +[15.242978] (ft_can_transceiver_lib) StderrLine: {'line': b' | \x1b[01;35m\x1b[K^\x1b[m\x1b[K\n'} +[15.271332] (-) TimerEvent: {} +[15.375849] (-) TimerEvent: {} +[15.480841] (-) TimerEvent: {} +[15.588018] (-) TimerEvent: {} +[15.694304] (-) TimerEvent: {} +[15.800233] (-) TimerEvent: {} +[15.906345] (-) TimerEvent: {} +[16.013323] (-) TimerEvent: {} +[16.122042] (-) TimerEvent: {} +[16.233352] (-) TimerEvent: {} +[16.339509] (-) TimerEvent: {} +[16.444860] (-) TimerEvent: {} +[16.550555] (-) TimerEvent: {} +[16.657500] (-) TimerEvent: {} +[16.763431] (-) TimerEvent: {} +[16.869568] (-) TimerEvent: {} +[16.975966] (-) TimerEvent: {} +[17.081557] (-) TimerEvent: {} +[17.187363] (-) TimerEvent: {} +[17.292678] (-) TimerEvent: {} +[17.397258] (-) TimerEvent: {} +[17.503113] (-) TimerEvent: {} +[17.607699] (-) TimerEvent: {} +[17.712553] (-) TimerEvent: {} +[17.824842] (-) TimerEvent: {} +[17.931768] (-) TimerEvent: {} +[18.039541] (-) TimerEvent: {} +[18.148578] (-) TimerEvent: {} +[18.256042] (-) TimerEvent: {} +[18.368884] (-) TimerEvent: {} +[18.472067] (-) TimerEvent: {} +[18.574780] (-) TimerEvent: {} +[18.677371] (-) TimerEvent: {} +[18.780071] (-) TimerEvent: {} +[18.883206] (-) TimerEvent: {} +[18.986276] (-) TimerEvent: {} +[19.089396] (-) TimerEvent: {} +[19.191897] (-) TimerEvent: {} +[19.293596] (-) TimerEvent: {} +[19.395573] (-) TimerEvent: {} +[19.498283] (-) TimerEvent: {} +[19.601734] (-) TimerEvent: {} +[19.705200] (-) TimerEvent: {} +[19.808392] (-) TimerEvent: {} +[19.911372] (-) TimerEvent: {} +[20.014608] (-) TimerEvent: {} +[20.108912] (ft_can_transceiver_lib) StdoutLine: {'line': b'[100%] \x1b[32m\x1b[1mLinking CXX shared library libft_can_transceiver_lib.so\x1b[0m\n'} +[20.116691] (-) TimerEvent: {} +[20.218958] (-) TimerEvent: {} +[20.325338] (-) TimerEvent: {} +[20.433023] (-) TimerEvent: {} +[20.538814] (-) TimerEvent: {} +[20.645380] (-) TimerEvent: {} +[20.752955] (-) TimerEvent: {} +[20.859194] (-) TimerEvent: {} +[20.973108] (-) TimerEvent: {} +[21.082584] (-) TimerEvent: {} +[21.194260] (-) TimerEvent: {} +[21.305044] (-) TimerEvent: {} +[21.411559] (-) TimerEvent: {} +[21.523079] (-) TimerEvent: {} +[21.630497] (-) TimerEvent: {} +[21.737311] (-) TimerEvent: {} +[21.842816] (-) TimerEvent: {} +[21.947100] (-) TimerEvent: {} +[22.053890] (-) TimerEvent: {} +[22.164652] (-) TimerEvent: {} +[22.272931] (-) TimerEvent: {} +[22.382504] (-) TimerEvent: {} +[22.488043] (-) TimerEvent: {} +[22.592644] (-) TimerEvent: {} +[22.697720] (-) TimerEvent: {} +[22.805787] (-) TimerEvent: {} +[22.912814] (-) TimerEvent: {} +[23.019078] (-) TimerEvent: {} +[23.124762] (-) TimerEvent: {} +[23.230113] (-) TimerEvent: {} +[23.336006] (-) TimerEvent: {} +[23.442391] (-) TimerEvent: {} +[23.547065] (-) TimerEvent: {} +[23.655567] (-) TimerEvent: {} +[23.760114] (-) TimerEvent: {} +[23.866918] (-) TimerEvent: {} +[23.971481] (-) TimerEvent: {} +[24.077517] (-) TimerEvent: {} +[24.182505] (-) TimerEvent: {} +[24.287797] (-) TimerEvent: {} +[24.395812] (-) TimerEvent: {} +[24.500035] (-) TimerEvent: {} +[24.605246] (-) TimerEvent: {} +[24.709672] (-) TimerEvent: {} +[24.814976] (-) TimerEvent: {} +[24.921519] (-) TimerEvent: {} +[25.028379] (-) TimerEvent: {} +[25.134825] (-) TimerEvent: {} +[25.239731] (-) TimerEvent: {} +[25.345272] (-) TimerEvent: {} +[25.450023] (-) TimerEvent: {} +[25.556059] (-) TimerEvent: {} +[25.659833] (-) TimerEvent: {} +[25.765545] (-) TimerEvent: {} +[25.872099] (-) TimerEvent: {} +[25.977679] (-) TimerEvent: {} +[26.083842] (-) TimerEvent: {} +[26.192820] (-) TimerEvent: {} +[26.298362] (-) TimerEvent: {} +[26.405901] (-) TimerEvent: {} +[26.507716] (-) TimerEvent: {} +[26.610005] (-) TimerEvent: {} +[26.713119] (-) TimerEvent: {} +[26.815053] (-) TimerEvent: {} +[26.918449] (-) TimerEvent: {} +[27.021855] (-) TimerEvent: {} +[27.124588] (-) TimerEvent: {} +[27.227353] (-) TimerEvent: {} +[27.330076] (-) TimerEvent: {} +[27.433283] (-) TimerEvent: {} +[27.535447] (-) TimerEvent: {} +[27.637864] (-) TimerEvent: {} +[27.683960] (ft_can_transceiver_lib) StderrLine: {'line': b'gmake[2]: warning: Clock skew detected. Your build may be incomplete.\n'} +[27.724312] (ft_can_transceiver_lib) StdoutLine: {'line': b'[100%] Built target ft_can_transceiver_lib\n'} +[27.728505] (ft_can_transceiver_lib) StderrLine: {'line': b'gmake[1]: warning: Clock skew detected. Your build may be incomplete.\n'} +[27.738770] (-) TimerEvent: {} +[27.767427] (ft_can_transceiver_lib) StderrLine: {'line': b'gmake: warning: Clock skew detected. Your build may be incomplete.\n'} +[27.775604] (ft_can_transceiver_lib) CommandEnded: {'returncode': 0} +[27.804328] (ft_can_transceiver_lib) JobProgress: {'identifier': 'ft_can_transceiver_lib', 'progress': 'install'} +[27.828160] (ft_can_transceiver_lib) Command: {'cmd': ['/usr/bin/cmake', '--install', '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib'], 'cwd': '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib', 'env': OrderedDict({'HOSTNAME': 'lima-rancher-desktop', 'GIT_ASKPASS': '/vscode/vscode-server/bin/linux-x64/2901c5ac6db8a986a5666c3af51ff804d05af0d4/extensions/git/dist/askpass.sh', 'SHLVL': '2', 'LD_LIBRARY_PATH': '/opt/ros/jazzy/lib/x86_64-linux-gnu:/opt/ros/jazzy/lib', 'BROWSER': '/vscode/vscode-server/bin/linux-x64/2901c5ac6db8a986a5666c3af51ff804d05af0d4/bin/helpers/browser.sh', 'HOME': '/home/USERNAME', 'OLDPWD': '/workspaces/can_viewer/ros2_ws/src', 'TERM_PROGRAM_VERSION': '1.101.2', 'VSCODE_IPC_HOOK_CLI': '/tmp/vscode-ipc-842556d3-6e0e-4e48-a246-49e8a95d502d.sock', 'ROS_PYTHON_VERSION': '3', 'VSCODE_GIT_ASKPASS_MAIN': '/vscode/vscode-server/bin/linux-x64/2901c5ac6db8a986a5666c3af51ff804d05af0d4/extensions/git/dist/askpass-main.js', 'VSCODE_GIT_ASKPASS_NODE': '/vscode/vscode-server/bin/linux-x64/2901c5ac6db8a986a5666c3af51ff804d05af0d4/node', 'PYDEVD_DISABLE_FILE_VALIDATION': '1', 'BUNDLED_DEBUGPY_PATH': '/home/USERNAME/.vscode-server/extensions/ms-python.debugpy-2025.8.0-linux-x64/bundled/libs/debugpy', 'COLORTERM': 'truecolor', 'REMOTE_CONTAINERS': 'true', 'ROS_DISTRO': 'jazzy', 'REMOTE_CONTAINERS_IPC': '/tmp/vscode-remote-containers-ipc-96591647-acec-4c8c-85fc-99bab2a074b2.sock', '_': '/usr/bin/colcon', 'ROS_VERSION': '2', 'PIP_BREAK_SYSTEM_PACKAGES': '1', 'TERM': 'xterm-256color', 'PATH': '/vscode/vscode-server/bin/linux-x64/2901c5ac6db8a986a5666c3af51ff804d05af0d4/bin/remote-cli:/home/USERNAME/.local/bin:/opt/ros/jazzy/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/USERNAME/.vscode-server/extensions/ms-python.debugpy-2025.8.0-linux-x64/bundled/scripts/noConfigScripts', 'REMOTE_CONTAINERS_SOCKETS': '["/tmp/vscode-ssh-auth-96591647-acec-4c8c-85fc-99bab2a074b2.sock","/tmp/.X11-unix/X0","/home/USERNAME/.gnupg/S.gpg-agent"]', 'DISPLAY': ':0', 'VSCODE_DEBUGPY_ADAPTER_ENDPOINTS': '/home/USERNAME/.vscode-server/extensions/ms-python.debugpy-2025.8.0-linux-x64/.noConfigDebugAdapterEndpoints/endpoint-66e4b2104f6513ce.txt', 'LANG': 'C.UTF-8', 'LS_COLORS': 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:*~=00;90:*#=00;90:*.bak=00;90:*.crdownload=00;90:*.dpkg-dist=00;90:*.dpkg-new=00;90:*.dpkg-old=00;90:*.dpkg-tmp=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:*.swp=00;90:*.tmp=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:', 'VSCODE_GIT_IPC_HANDLE': '/tmp/vscode-git-89a19b2569.sock', 'TERM_PROGRAM': 'vscode', 'SSH_AUTH_SOCK': '/tmp/vscode-ssh-auth-96591647-acec-4c8c-85fc-99bab2a074b2.sock', 'AMENT_PREFIX_PATH': '/opt/ros/jazzy', 'REMOTE_CONTAINERS_DISPLAY_SOCK': '/tmp/.X11-unix/X0', 'SHELL': '/bin/bash', 'ROS_AUTOMATIC_DISCOVERY_RANGE': 'SUBNET', 'VSCODE_GIT_ASKPASS_EXTRA_ARGS': '', 'PWD': '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib', 'LC_ALL': 'C.UTF-8', 'PYTHONPATH': '/opt/ros/jazzy/lib/python3.12/site-packages', 'COLCON': '1', 'CMAKE_PREFIX_PATH': '/opt/ros/jazzy'}), 'shell': False} +[27.839852] (-) TimerEvent: {} +[27.853005] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Install configuration: ""\n'} +[27.885817] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/libft_can_transceiver_lib.so\n'} +[27.941577] (-) TimerEvent: {} +[28.043810] (-) TimerEvent: {} +[28.089661] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib\n'} +[28.121698] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/endec.hpp\n'} +[28.145084] (-) TimerEvent: {} +[28.213087] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/can1.h\n'} +[28.246396] (-) TimerEvent: {} +[28.332888] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/transceiver.h\n'} +[28.347678] (-) TimerEvent: {} +[28.448702] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libTargets.cmake\n'} +[28.452343] (-) TimerEvent: {} +[28.523133] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libTargets-noconfig.cmake\n'} +[28.553687] (-) TimerEvent: {} +[28.604960] (ft_can_transceiver_lib) StdoutLine: {'line': b'-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libConfig.cmake\n'} +[28.656649] (-) TimerEvent: {} +[28.717152] (ft_can_transceiver_lib) CommandEnded: {'returncode': 0} +[28.757955] (-) TimerEvent: {} +[28.861041] (-) TimerEvent: {} +[28.963418] (-) TimerEvent: {} +[29.065867] (-) TimerEvent: {} +[29.168881] (-) TimerEvent: {} +[29.257002] (ft_can_transceiver_lib) JobEnded: {'identifier': 'ft_can_transceiver_lib', 'rc': 0} +[29.275046] (-) TimerEvent: {} +[29.275700] (-) EventReactorShutdown: {} diff --git a/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/ft_can_transceiver_lib/command.log b/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/ft_can_transceiver_lib/command.log new file mode 100644 index 0000000..5030612 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/ft_can_transceiver_lib/command.log @@ -0,0 +1,6 @@ +Invoking command in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib': CMAKE_PREFIX_PATH=/opt/ros/jazzy /usr/bin/cmake /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib -DCMAKE_INSTALL_PREFIX=/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib +Invoked command in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib' returned '0': CMAKE_PREFIX_PATH=/opt/ros/jazzy /usr/bin/cmake /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib -DCMAKE_INSTALL_PREFIX=/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib +Invoking command in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib': CMAKE_PREFIX_PATH=/opt/ros/jazzy /usr/bin/cmake --build /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib -- -j8 -l8 +Invoked command in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib' returned '0': CMAKE_PREFIX_PATH=/opt/ros/jazzy /usr/bin/cmake --build /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib -- -j8 -l8 +Invoking command in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib': CMAKE_PREFIX_PATH=/opt/ros/jazzy /usr/bin/cmake --install /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib +Invoked command in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib' returned '0': CMAKE_PREFIX_PATH=/opt/ros/jazzy /usr/bin/cmake --install /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib diff --git a/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/ft_can_transceiver_lib/stderr.log b/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/ft_can_transceiver_lib/stderr.log new file mode 100644 index 0000000..a0be37e --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/ft_can_transceiver_lib/stderr.log @@ -0,0 +1,19 @@ +usage: cantools [-h] [-d] [--version] + {plot,list,generate_c_source,decode,monitor,convert,dump} ... +cantools: error: argument subcommand: invalid choice: 'generate_c_source_transceiver' (choose from 'plot', 'list', 'generate_c_source', 'decode', 'monitor', 'convert', 'dump') +gmake: Warning: File 'Makefile' has modification time 0.31 s in the future +gmake[1]: Warning: File 'CMakeFiles/Makefile2' has modification time 0.21 s in the future +gmake[2]: Warning: File 'CMakeFiles/ft_can_transceiver_lib.dir/flags.make' has modification time 0.18 s in the future +gmake[2]: warning: Clock skew detected. Your build may be incomplete. +gmake[2]: Warning: File 'CMakeFiles/ft_can_transceiver_lib.dir/flags.make' has modification time 0.081 s in the future +/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/src/transceiver.cpp: In constructor ‘canlib::Transceiver::Transceiver(std::string, std::vector)’: +/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/src/transceiver.cpp:17:16: warning: ISO C++ forbids variable length array ‘filter_arr’ []8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wvla-Wvla]8;;] + 17 | can_filter filter_arr[filters.size()]; + | ^~~~~~~~~~ +/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/src/transceiver.cpp: In member function ‘virtual bool canlib::Transceiver::receive(int)’: +/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/src/transceiver.cpp:1236:1: warning: control reaches end of non-void function []8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wreturn-type-Wreturn-type]8;;] + 1236 | } + | ^ +gmake[2]: warning: Clock skew detected. Your build may be incomplete. +gmake[1]: warning: Clock skew detected. Your build may be incomplete. +gmake: warning: Clock skew detected. Your build may be incomplete. diff --git a/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/ft_can_transceiver_lib/stdout.log b/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/ft_can_transceiver_lib/stdout.log new file mode 100644 index 0000000..95b6108 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/ft_can_transceiver_lib/stdout.log @@ -0,0 +1,29 @@ +-- The C compiler identification is GNU 13.3.0 +-- The CXX compiler identification is GNU 13.3.0 +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working C compiler: /usr/bin/cc - skipped +-- Detecting C compile features +-- Detecting C compile features - done +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Check for working CXX compiler: /usr/bin/c++ - skipped +-- Detecting CXX compile features +-- Detecting CXX compile features - done +Successfully generated ./can1.h and ./can1.c. +-- Configuring done (5.7s) +-- Generating done (0.4s) +-- Build files have been written to: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib +[ 66%] Building CXX object CMakeFiles/ft_can_transceiver_lib.dir/src/can1.cpp.o +[ 66%] Building CXX object CMakeFiles/ft_can_transceiver_lib.dir/src/transceiver.cpp.o +[100%] Linking CXX shared library libft_can_transceiver_lib.so +[100%] Built target ft_can_transceiver_lib +-- Install configuration: "" +-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/libft_can_transceiver_lib.so +-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib +-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/endec.hpp +-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/can1.h +-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/transceiver.h +-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libTargets.cmake +-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libTargets-noconfig.cmake +-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libConfig.cmake diff --git a/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/ft_can_transceiver_lib/stdout_stderr.log b/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/ft_can_transceiver_lib/stdout_stderr.log new file mode 100644 index 0000000..c3fb463 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/ft_can_transceiver_lib/stdout_stderr.log @@ -0,0 +1,48 @@ +-- The C compiler identification is GNU 13.3.0 +-- The CXX compiler identification is GNU 13.3.0 +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working C compiler: /usr/bin/cc - skipped +-- Detecting C compile features +-- Detecting C compile features - done +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Check for working CXX compiler: /usr/bin/c++ - skipped +-- Detecting CXX compile features +-- Detecting CXX compile features - done +Successfully generated ./can1.h and ./can1.c. +usage: cantools [-h] [-d] [--version] + {plot,list,generate_c_source,decode,monitor,convert,dump} ... +cantools: error: argument subcommand: invalid choice: 'generate_c_source_transceiver' (choose from 'plot', 'list', 'generate_c_source', 'decode', 'monitor', 'convert', 'dump') +-- Configuring done (5.7s) +-- Generating done (0.4s) +-- Build files have been written to: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib +gmake: Warning: File 'Makefile' has modification time 0.31 s in the future +gmake[1]: Warning: File 'CMakeFiles/Makefile2' has modification time 0.21 s in the future +gmake[2]: Warning: File 'CMakeFiles/ft_can_transceiver_lib.dir/flags.make' has modification time 0.18 s in the future +gmake[2]: warning: Clock skew detected. Your build may be incomplete. +gmake[2]: Warning: File 'CMakeFiles/ft_can_transceiver_lib.dir/flags.make' has modification time 0.081 s in the future +[ 66%] Building CXX object CMakeFiles/ft_can_transceiver_lib.dir/src/can1.cpp.o +[ 66%] Building CXX object CMakeFiles/ft_can_transceiver_lib.dir/src/transceiver.cpp.o +/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/src/transceiver.cpp: In constructor ‘canlib::Transceiver::Transceiver(std::string, std::vector)’: +/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/src/transceiver.cpp:17:16: warning: ISO C++ forbids variable length array ‘filter_arr’ []8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wvla-Wvla]8;;] + 17 | can_filter filter_arr[filters.size()]; + | ^~~~~~~~~~ +/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/src/transceiver.cpp: In member function ‘virtual bool canlib::Transceiver::receive(int)’: +/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/src/transceiver.cpp:1236:1: warning: control reaches end of non-void function []8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wreturn-type-Wreturn-type]8;;] + 1236 | } + | ^ +[100%] Linking CXX shared library libft_can_transceiver_lib.so +gmake[2]: warning: Clock skew detected. Your build may be incomplete. +[100%] Built target ft_can_transceiver_lib +gmake[1]: warning: Clock skew detected. Your build may be incomplete. +gmake: warning: Clock skew detected. Your build may be incomplete. +-- Install configuration: "" +-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/libft_can_transceiver_lib.so +-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib +-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/endec.hpp +-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/can1.h +-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/transceiver.h +-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libTargets.cmake +-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libTargets-noconfig.cmake +-- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libConfig.cmake diff --git a/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/ft_can_transceiver_lib/streams.log b/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/ft_can_transceiver_lib/streams.log new file mode 100644 index 0000000..32edaa4 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/ft_can_transceiver_lib/streams.log @@ -0,0 +1,54 @@ +[0.170s] Invoking command in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib': CMAKE_PREFIX_PATH=/opt/ros/jazzy /usr/bin/cmake /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib -DCMAKE_INSTALL_PREFIX=/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib +[0.966s] -- The C compiler identification is GNU 13.3.0 +[1.475s] -- The CXX compiler identification is GNU 13.3.0 +[1.580s] -- Detecting C compiler ABI info +[3.060s] -- Detecting C compiler ABI info - done +[3.193s] -- Check for working C compiler: /usr/bin/cc - skipped +[3.197s] -- Detecting C compile features +[3.200s] -- Detecting C compile features - done +[3.284s] -- Detecting CXX compiler ABI info +[4.751s] -- Detecting CXX compiler ABI info - done +[4.887s] -- Check for working CXX compiler: /usr/bin/c++ - skipped +[4.890s] -- Detecting CXX compile features +[4.893s] -- Detecting CXX compile features - done +[5.469s] Successfully generated ./can1.h and ./can1.c. +[5.847s] usage: cantools [-h] [-d] [--version] +[5.850s] {plot,list,generate_c_source,decode,monitor,convert,dump} ... +[5.853s] cantools: error: argument subcommand: invalid choice: 'generate_c_source_transceiver' (choose from 'plot', 'list', 'generate_c_source', 'decode', 'monitor', 'convert', 'dump') +[6.005s] -- Configuring done (5.7s) +[6.522s] -- Generating done (0.4s) +[6.797s] -- Build files have been written to: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib +[6.804s] Invoked command in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib' returned '0': CMAKE_PREFIX_PATH=/opt/ros/jazzy /usr/bin/cmake /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib -DCMAKE_INSTALL_PREFIX=/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib +[6.825s] Invoking command in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib': CMAKE_PREFIX_PATH=/opt/ros/jazzy /usr/bin/cmake --build /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib -- -j8 -l8 +[6.868s] gmake: Warning: File 'Makefile' has modification time 0.31 s in the future +[6.965s] gmake[1]: Warning: File 'CMakeFiles/Makefile2' has modification time 0.21 s in the future +[6.998s] gmake[2]: Warning: File 'CMakeFiles/ft_can_transceiver_lib.dir/flags.make' has modification time 0.18 s in the future +[7.034s] gmake[2]: warning: Clock skew detected. Your build may be incomplete. +[7.095s] gmake[2]: Warning: File 'CMakeFiles/ft_can_transceiver_lib.dir/flags.make' has modification time 0.081 s in the future +[7.180s] [ 66%] Building CXX object CMakeFiles/ft_can_transceiver_lib.dir/src/can1.cpp.o +[7.182s] [ 66%] Building CXX object CMakeFiles/ft_can_transceiver_lib.dir/src/transceiver.cpp.o +[14.806s] /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/src/transceiver.cpp: In constructor ‘canlib::Transceiver::Transceiver(std::string, std::vector)’: +[14.823s] /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/src/transceiver.cpp:17:16: warning: ISO C++ forbids variable length array ‘filter_arr’ []8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wvla-Wvla]8;;] +[14.833s] 17 | can_filter filter_arr[filters.size()]; +[14.840s] | ^~~~~~~~~~ +[15.209s] /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/src/transceiver.cpp: In member function ‘virtual bool canlib::Transceiver::receive(int)’: +[15.216s] /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/src/transceiver.cpp:1236:1: warning: control reaches end of non-void function []8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wreturn-type-Wreturn-type]8;;] +[15.234s] 1236 | } +[15.242s] | ^ +[20.108s] [100%] Linking CXX shared library libft_can_transceiver_lib.so +[27.683s] gmake[2]: warning: Clock skew detected. Your build may be incomplete. +[27.723s] [100%] Built target ft_can_transceiver_lib +[27.726s] gmake[1]: warning: Clock skew detected. Your build may be incomplete. +[27.766s] gmake: warning: Clock skew detected. Your build may be incomplete. +[27.773s] Invoked command in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib' returned '0': CMAKE_PREFIX_PATH=/opt/ros/jazzy /usr/bin/cmake --build /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib -- -j8 -l8 +[27.826s] Invoking command in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib': CMAKE_PREFIX_PATH=/opt/ros/jazzy /usr/bin/cmake --install /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib +[27.851s] -- Install configuration: "" +[27.884s] -- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/libft_can_transceiver_lib.so +[28.087s] -- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib +[28.120s] -- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/endec.hpp +[28.211s] -- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/can1.h +[28.332s] -- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/include/ft_can_transceiver_lib/transceiver.h +[28.446s] -- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libTargets.cmake +[28.521s] -- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libTargets-noconfig.cmake +[28.604s] -- Installing: /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/cmake/ft_can_transceiver_lib/ft_can_transceiver_libConfig.cmake +[28.730s] Invoked command in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib' returned '0': CMAKE_PREFIX_PATH=/opt/ros/jazzy /usr/bin/cmake --install /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib diff --git a/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/logger_all.log b/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/logger_all.log new file mode 100644 index 0000000..efaedab --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/log/build_2025-07-10_17-27-28/logger_all.log @@ -0,0 +1,111 @@ +[0.217s] DEBUG:colcon:Command line arguments: ['/usr/bin/colcon', 'build'] +[0.217s] DEBUG:colcon:Parsed command line arguments: Namespace(log_base=None, log_level=None, verb_name='build', build_base='build', install_base='install', merge_install=False, symlink_install=False, test_result_base=None, continue_on_error=False, executor='parallel', parallel_workers=8, event_handlers=None, ignore_user_meta=False, metas=['./colcon.meta'], base_paths=['.'], packages_ignore=None, packages_ignore_regex=None, paths=None, packages_up_to=None, packages_up_to_regex=None, packages_above=None, packages_above_and_dependencies=None, packages_above_depth=None, packages_select_by_dep=None, packages_skip_by_dep=None, packages_skip_up_to=None, packages_select_build_failed=False, packages_skip_build_finished=False, packages_select_test_failures=False, packages_skip_test_passed=False, packages_select=None, packages_skip=None, packages_select_regex=None, packages_skip_regex=None, packages_start=None, packages_end=None, cmake_args=None, cmake_target=None, cmake_target_skip_unavailable=False, cmake_clean_cache=False, cmake_clean_first=False, cmake_force_configure=False, ament_cmake_args=None, catkin_cmake_args=None, catkin_skip_building_tests=False, mixin_files=None, mixin=None, verb_parser=, verb_extension=, main=>, mixin_verb=('build',)) +[0.329s] Level 1:colcon.colcon_core.package_discovery:discover_packages(colcon_meta) check parameters +[0.332s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) check parameters +[0.333s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) check parameters +[0.334s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) check parameters +[0.334s] Level 1:colcon.colcon_core.package_discovery:discover_packages(colcon_meta) discover +[0.335s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) discover +[0.336s] INFO:colcon.colcon_core.package_discovery:Crawling recursively for packages in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib' +[0.342s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['ignore', 'ignore_ament_install'] +[0.343s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ignore' +[0.345s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ignore_ament_install' +[0.349s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['colcon_pkg'] +[0.349s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'colcon_pkg' +[0.351s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['colcon_meta'] +[0.352s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'colcon_meta' +[0.352s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['ros'] +[0.353s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ros' +[0.413s] DEBUG:colcon.colcon_core.package_identification:Package '.' with type 'ros.ament_cmake' and name 'ft_can_transceiver_lib' +[0.414s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) using defaults +[0.415s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) discover +[0.415s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) using defaults +[0.416s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) discover +[0.417s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) using defaults +[0.446s] Level 5:colcon.colcon_core.verb:set package 'ft_can_transceiver_lib' build argument 'cmake_args' from command line to 'None' +[0.446s] Level 5:colcon.colcon_core.verb:set package 'ft_can_transceiver_lib' build argument 'cmake_target' from command line to 'None' +[0.447s] Level 5:colcon.colcon_core.verb:set package 'ft_can_transceiver_lib' build argument 'cmake_target_skip_unavailable' from command line to 'False' +[0.450s] Level 5:colcon.colcon_core.verb:set package 'ft_can_transceiver_lib' build argument 'cmake_clean_cache' from command line to 'False' +[0.451s] Level 5:colcon.colcon_core.verb:set package 'ft_can_transceiver_lib' build argument 'cmake_clean_first' from command line to 'False' +[0.452s] Level 5:colcon.colcon_core.verb:set package 'ft_can_transceiver_lib' build argument 'cmake_force_configure' from command line to 'False' +[0.452s] Level 5:colcon.colcon_core.verb:set package 'ft_can_transceiver_lib' build argument 'ament_cmake_args' from command line to 'None' +[0.453s] Level 5:colcon.colcon_core.verb:set package 'ft_can_transceiver_lib' build argument 'catkin_cmake_args' from command line to 'None' +[0.454s] Level 5:colcon.colcon_core.verb:set package 'ft_can_transceiver_lib' build argument 'catkin_skip_building_tests' from command line to 'False' +[0.454s] DEBUG:colcon.colcon_core.verb:Building package 'ft_can_transceiver_lib' with the following arguments: {'ament_cmake_args': None, 'build_base': '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib', 'catkin_cmake_args': None, 'catkin_skip_building_tests': False, 'cmake_args': None, 'cmake_clean_cache': False, 'cmake_clean_first': False, 'cmake_force_configure': False, 'cmake_target': None, 'cmake_target_skip_unavailable': False, 'install_base': '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib', 'merge_install': False, 'path': '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib', 'symlink_install': False, 'test_result_base': None} +[0.455s] INFO:colcon.colcon_core.executor:Executing jobs using 'parallel' executor +[0.459s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:run_until_complete +[0.460s] INFO:colcon.colcon_ros.task.ament_cmake.build:Building ROS package in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib' with build type 'ament_cmake' +[0.461s] INFO:colcon.colcon_cmake.task.cmake.build:Building CMake package in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib' +[0.470s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_core.shell.bat': Not used on non-Windows systems +[0.472s] INFO:colcon.colcon_core.shell:Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell +[0.473s] DEBUG:colcon.colcon_core.shell:Skip shell extension 'dsv' for command environment +[0.642s] DEBUG:colcon.colcon_core.event_handler.log_command:Invoking command in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib': CMAKE_PREFIX_PATH=/opt/ros/jazzy /usr/bin/cmake /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib -DCMAKE_INSTALL_PREFIX=/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib +[7.276s] DEBUG:colcon.colcon_core.event_handler.log_command:Invoked command in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib' returned '0': CMAKE_PREFIX_PATH=/opt/ros/jazzy /usr/bin/cmake /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib -DCMAKE_INSTALL_PREFIX=/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib +[7.296s] DEBUG:colcon.colcon_core.event_handler.log_command:Invoking command in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib': CMAKE_PREFIX_PATH=/opt/ros/jazzy /usr/bin/cmake --build /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib -- -j8 -l8 +[28.245s] DEBUG:colcon.colcon_core.event_handler.log_command:Invoked command in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib' returned '0': CMAKE_PREFIX_PATH=/opt/ros/jazzy /usr/bin/cmake --build /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib -- -j8 -l8 +[28.298s] DEBUG:colcon.colcon_core.event_handler.log_command:Invoking command in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib': CMAKE_PREFIX_PATH=/opt/ros/jazzy /usr/bin/cmake --install /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib +[29.183s] Level 1:colcon.colcon_core.environment:create_environment_scripts_only(ft_can_transceiver_lib) +[29.202s] DEBUG:colcon.colcon_core.event_handler.log_command:Invoked command in '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib' returned '0': CMAKE_PREFIX_PATH=/opt/ros/jazzy /usr/bin/cmake --install /workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/build/ft_can_transceiver_lib +[29.207s] Level 1:colcon.colcon_core.environment:checking '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib' for CMake module files +[29.276s] Level 1:colcon.colcon_core.environment:checking '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib' for CMake config files +[29.306s] Level 1:colcon.colcon_core.shell:create_environment_hook('ft_can_transceiver_lib', 'cmake_prefix_path') +[29.307s] INFO:colcon.colcon_core.shell:Creating environment hook '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/cmake_prefix_path.ps1' +[29.339s] INFO:colcon.colcon_core.shell:Creating environment descriptor '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/cmake_prefix_path.dsv' +[29.355s] INFO:colcon.colcon_core.shell:Creating environment hook '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/cmake_prefix_path.sh' +[29.381s] Level 1:colcon.colcon_core.environment:checking '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib' +[29.385s] Level 1:colcon.colcon_core.shell:create_environment_hook('ft_can_transceiver_lib', 'ld_library_path_lib') +[29.386s] INFO:colcon.colcon_core.shell:Creating environment hook '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/ld_library_path_lib.ps1' +[29.400s] INFO:colcon.colcon_core.shell:Creating environment descriptor '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/ld_library_path_lib.dsv' +[29.414s] INFO:colcon.colcon_core.shell:Creating environment hook '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/ld_library_path_lib.sh' +[29.426s] Level 1:colcon.colcon_core.environment:checking '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/bin' +[29.428s] Level 1:colcon.colcon_core.environment:checking '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/pkgconfig/ft_can_transceiver_lib.pc' +[29.434s] Level 1:colcon.colcon_core.environment:checking '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/python3.12/site-packages' +[29.437s] Level 1:colcon.colcon_core.environment:checking '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/bin' +[29.440s] INFO:colcon.colcon_core.shell:Creating package script '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.ps1' +[29.454s] INFO:colcon.colcon_core.shell:Creating package descriptor '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.dsv' +[29.467s] INFO:colcon.colcon_core.shell:Creating package script '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.sh' +[29.479s] INFO:colcon.colcon_core.shell:Creating package script '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.bash' +[29.494s] INFO:colcon.colcon_core.shell:Creating package script '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.zsh' +[29.509s] Level 1:colcon.colcon_core.environment:create_file_with_runtime_dependencies(/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/colcon-core/packages/ft_can_transceiver_lib) +[29.540s] Level 1:colcon.colcon_core.environment:create_environment_scripts_only(ft_can_transceiver_lib) +[29.541s] Level 1:colcon.colcon_core.environment:checking '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib' for CMake module files +[29.578s] Level 1:colcon.colcon_core.environment:checking '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib' for CMake config files +[29.590s] Level 1:colcon.colcon_core.shell:create_environment_hook('ft_can_transceiver_lib', 'cmake_prefix_path') +[29.590s] INFO:colcon.colcon_core.shell:Creating environment hook '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/cmake_prefix_path.ps1' +[29.596s] INFO:colcon.colcon_core.shell:Creating environment descriptor '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/cmake_prefix_path.dsv' +[29.605s] INFO:colcon.colcon_core.shell:Creating environment hook '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/cmake_prefix_path.sh' +[29.614s] Level 1:colcon.colcon_core.environment:checking '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib' +[29.616s] Level 1:colcon.colcon_core.shell:create_environment_hook('ft_can_transceiver_lib', 'ld_library_path_lib') +[29.617s] INFO:colcon.colcon_core.shell:Creating environment hook '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/ld_library_path_lib.ps1' +[29.624s] INFO:colcon.colcon_core.shell:Creating environment descriptor '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/ld_library_path_lib.dsv' +[29.633s] INFO:colcon.colcon_core.shell:Creating environment hook '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/hook/ld_library_path_lib.sh' +[29.643s] Level 1:colcon.colcon_core.environment:checking '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/bin' +[29.646s] Level 1:colcon.colcon_core.environment:checking '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/pkgconfig/ft_can_transceiver_lib.pc' +[29.651s] Level 1:colcon.colcon_core.environment:checking '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/lib/python3.12/site-packages' +[29.654s] Level 1:colcon.colcon_core.environment:checking '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/bin' +[29.657s] INFO:colcon.colcon_core.shell:Creating package script '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.ps1' +[29.669s] INFO:colcon.colcon_core.shell:Creating package descriptor '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.dsv' +[29.677s] INFO:colcon.colcon_core.shell:Creating package script '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.sh' +[29.688s] INFO:colcon.colcon_core.shell:Creating package script '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.bash' +[29.699s] INFO:colcon.colcon_core.shell:Creating package script '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/ft_can_transceiver_lib/package.zsh' +[29.710s] Level 1:colcon.colcon_core.environment:create_file_with_runtime_dependencies(/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/ft_can_transceiver_lib/share/colcon-core/packages/ft_can_transceiver_lib) +[29.723s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:closing loop +[29.724s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:loop closed +[29.728s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:run_until_complete finished with '0' +[29.730s] DEBUG:colcon.colcon_core.event_reactor:joining thread +[29.765s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.notify_send': Could not find 'notify-send' +[29.766s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.terminal_notifier': Not used on non-Darwin systems +[29.767s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.win32': Not used on non-Windows systems +[29.770s] INFO:colcon.colcon_notification.desktop_notification:Sending desktop notification using 'notify2' +[29.771s] DEBUG:colcon.colcon_notification.desktop_notification.notify2:Failed to initialize notify2: org.freedesktop.DBus.Error.InvalidFileContent: D-Bus library appears to be incorrectly set up: see the manual page for dbus-uuidgen to correct this issue. (Failed to open "/var/lib/dbus/machine-id": No such file or directory; UUID file '/etc/machine-id' should contain a hex string of length 32, not length 0, with no other text) +[29.774s] DEBUG:colcon.colcon_core.event_reactor:joined thread +[29.775s] INFO:colcon.colcon_core.shell:Creating prefix script '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/local_setup.ps1' +[29.800s] INFO:colcon.colcon_core.shell:Creating prefix util module '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/_local_setup_util_ps1.py' +[29.820s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/setup.ps1' +[29.840s] INFO:colcon.colcon_core.shell:Creating prefix script '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/local_setup.sh' +[29.859s] INFO:colcon.colcon_core.shell:Creating prefix util module '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/_local_setup_util_sh.py' +[29.876s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/setup.sh' +[29.893s] INFO:colcon.colcon_core.shell:Creating prefix script '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/local_setup.bash' +[29.911s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/setup.bash' +[29.928s] INFO:colcon.colcon_core.shell:Creating prefix script '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/local_setup.zsh' +[29.944s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/workspaces/can_viewer/ros2_ws/src/ft_can_transceiver_lib/install/setup.zsh' diff --git a/ros2_ws/src/ft_can_transceiver_lib/log/latest b/ros2_ws/src/ft_can_transceiver_lib/log/latest new file mode 120000 index 0000000..b57d247 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/log/latest @@ -0,0 +1 @@ +latest_build \ No newline at end of file diff --git a/ros2_ws/src/ft_can_transceiver_lib/log/latest_build b/ros2_ws/src/ft_can_transceiver_lib/log/latest_build new file mode 120000 index 0000000..78b68b0 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/log/latest_build @@ -0,0 +1 @@ +build_2025-07-10_17-27-28 \ No newline at end of file diff --git a/ros2_ws/src/ft_can_transceiver_lib/package.xml b/ros2_ws/src/ft_can_transceiver_lib/package.xml new file mode 100644 index 0000000..6de1454 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/package.xml @@ -0,0 +1,19 @@ + + + + ft_can_transceiver_lib + 0.0.0 + TODO: Package description + root + TODO: License declaration + + ament_cmake + foxglove_bridge + + ament_lint_auto + ament_lint_common + + + ament_cmake + + \ No newline at end of file diff --git a/ros2_ws/src/ft_can_transceiver_lib/src/.empty b/ros2_ws/src/ft_can_transceiver_lib/src/.empty new file mode 100644 index 0000000..e69de29 diff --git a/ros2_ws/src/ft_can_transceiver_lib/src/can1.cpp b/ros2_ws/src/ft_can_transceiver_lib/src/can1.cpp new file mode 100644 index 0000000..df366ab --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/src/can1.cpp @@ -0,0 +1,15306 @@ +/** + * @file can1.c + * + * @brief This source file was generated by cantools version 40.2.3 Sun Jul 20 11:04:58 2025. + * + * @copyright Copyright (c) 2018-2019 Erik Moqvist + * + * @par License + * The MIT License (MIT) + * + * 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. + */ + +#include + +#include "can1.h" + +static inline uint8_t pack_left_shift_u8( + uint8_t value, + uint8_t shift, + uint8_t mask) +{ + return (uint8_t)((uint8_t)(value << shift) & mask); +} + +static inline uint8_t pack_left_shift_u16( + uint16_t value, + uint8_t shift, + uint8_t mask) +{ + return (uint8_t)((uint8_t)(value << shift) & mask); +} + +static inline uint8_t pack_left_shift_u32( + uint32_t value, + uint8_t shift, + uint8_t mask) +{ + return (uint8_t)((uint8_t)(value << shift) & mask); +} + +static inline uint8_t pack_right_shift_u16( + uint16_t value, + uint8_t shift, + uint8_t mask) +{ + return (uint8_t)((uint8_t)(value >> shift) & mask); +} + +static inline uint8_t pack_right_shift_u32( + uint32_t value, + uint8_t shift, + uint8_t mask) +{ + return (uint8_t)((uint8_t)(value >> shift) & mask); +} + +static inline uint16_t unpack_left_shift_u16( + uint8_t value, + uint8_t shift, + uint8_t mask) +{ + return (uint16_t)((uint16_t)(value & mask) << shift); +} + +static inline uint32_t unpack_left_shift_u32( + uint8_t value, + uint8_t shift, + uint8_t mask) +{ + return (uint32_t)((uint32_t)(value & mask) << shift); +} + +static inline uint8_t unpack_right_shift_u8( + uint8_t value, + uint8_t shift, + uint8_t mask) +{ + return (uint8_t)((uint8_t)(value & mask) >> shift); +} + +static inline uint16_t unpack_right_shift_u16( + uint8_t value, + uint8_t shift, + uint8_t mask) +{ + return (uint16_t)((uint16_t)(value & mask) >> shift); +} + +static inline uint32_t unpack_right_shift_u32( + uint8_t value, + uint8_t shift, + uint8_t mask) +{ + return (uint32_t)((uint32_t)(value & mask) >> shift); +} + +int can1_inverter_velocity_pack( + uint8_t *dst_p, + const struct can1_inverter_velocity_t *src_p, + size_t size) +{ + uint32_t inverter_1_velocity; + uint32_t inverter_2_velocity; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + inverter_1_velocity = (uint32_t)src_p->inverter_1_velocity; + dst_p[0] |= pack_left_shift_u32(inverter_1_velocity, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u32(inverter_1_velocity, 8u, 0xffu); + dst_p[2] |= pack_right_shift_u32(inverter_1_velocity, 16u, 0xffu); + dst_p[3] |= pack_right_shift_u32(inverter_1_velocity, 24u, 0xffu); + inverter_2_velocity = (uint32_t)src_p->inverter_2_velocity; + dst_p[4] |= pack_left_shift_u32(inverter_2_velocity, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u32(inverter_2_velocity, 8u, 0xffu); + dst_p[6] |= pack_right_shift_u32(inverter_2_velocity, 16u, 0xffu); + dst_p[7] |= pack_right_shift_u32(inverter_2_velocity, 24u, 0xffu); + + return (8); +} + +int can1_inverter_velocity_unpack( + struct can1_inverter_velocity_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint32_t inverter_1_velocity; + uint32_t inverter_2_velocity; + + if (size < 8u) { + return (-EINVAL); + } + + inverter_1_velocity = unpack_right_shift_u32(src_p[0], 0u, 0xffu); + inverter_1_velocity |= unpack_left_shift_u32(src_p[1], 8u, 0xffu); + inverter_1_velocity |= unpack_left_shift_u32(src_p[2], 16u, 0xffu); + inverter_1_velocity |= unpack_left_shift_u32(src_p[3], 24u, 0xffu); + dst_p->inverter_1_velocity = (int32_t)inverter_1_velocity; + inverter_2_velocity = unpack_right_shift_u32(src_p[4], 0u, 0xffu); + inverter_2_velocity |= unpack_left_shift_u32(src_p[5], 8u, 0xffu); + inverter_2_velocity |= unpack_left_shift_u32(src_p[6], 16u, 0xffu); + inverter_2_velocity |= unpack_left_shift_u32(src_p[7], 24u, 0xffu); + dst_p->inverter_2_velocity = (int32_t)inverter_2_velocity; + + return (0); +} + +int can1_inverter_velocity_init(struct can1_inverter_velocity_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_inverter_velocity_t)); + + return 0; +} + +int32_t can1_inverter_velocity_inverter_1_velocity_encode(double value) +{ + return (int32_t)(value / 0.001); +} + +double can1_inverter_velocity_inverter_1_velocity_decode(int32_t value) +{ + return ((double)value * 0.001); +} + +bool can1_inverter_velocity_inverter_1_velocity_is_in_range(int32_t value) +{ + (void)value; + + return (true); +} + +int32_t can1_inverter_velocity_inverter_2_velocity_encode(double value) +{ + return (int32_t)(value / 0.001); +} + +double can1_inverter_velocity_inverter_2_velocity_decode(int32_t value) +{ + return ((double)value * 0.001); +} + +bool can1_inverter_velocity_inverter_2_velocity_is_in_range(int32_t value) +{ + (void)value; + + return (true); +} + +int can1_inverter_errors_warnings_pack( + uint8_t *dst_p, + const struct can1_inverter_errors_warnings_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u16(src_p->inverter_1_errors, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->inverter_1_errors, 8u, 0xffu); + dst_p[2] |= pack_left_shift_u16(src_p->inverter_1_warnings, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(src_p->inverter_1_warnings, 8u, 0xffu); + dst_p[4] |= pack_left_shift_u16(src_p->inverter_2_errors, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u16(src_p->inverter_2_errors, 8u, 0xffu); + dst_p[6] |= pack_left_shift_u16(src_p->inverter_2_warnings, 0u, 0xffu); + dst_p[7] |= pack_right_shift_u16(src_p->inverter_2_warnings, 8u, 0xffu); + + return (8); +} + +int can1_inverter_errors_warnings_unpack( + struct can1_inverter_errors_warnings_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->inverter_1_errors = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->inverter_1_errors |= unpack_left_shift_u16(src_p[1], 8u, 0xffu); + dst_p->inverter_1_warnings = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + dst_p->inverter_1_warnings |= unpack_left_shift_u16(src_p[3], 8u, 0xffu); + dst_p->inverter_2_errors = unpack_right_shift_u16(src_p[4], 0u, 0xffu); + dst_p->inverter_2_errors |= unpack_left_shift_u16(src_p[5], 8u, 0xffu); + dst_p->inverter_2_warnings = unpack_right_shift_u16(src_p[6], 0u, 0xffu); + dst_p->inverter_2_warnings |= unpack_left_shift_u16(src_p[7], 8u, 0xffu); + + return (0); +} + +int can1_inverter_errors_warnings_init(struct can1_inverter_errors_warnings_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_inverter_errors_warnings_t)); + + return 0; +} + +uint16_t can1_inverter_errors_warnings_inverter_1_errors_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_inverter_errors_warnings_inverter_1_errors_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_inverter_errors_warnings_inverter_1_errors_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_inverter_errors_warnings_inverter_1_warnings_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_inverter_errors_warnings_inverter_1_warnings_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_inverter_errors_warnings_inverter_1_warnings_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_inverter_errors_warnings_inverter_2_errors_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_inverter_errors_warnings_inverter_2_errors_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_inverter_errors_warnings_inverter_2_errors_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_inverter_errors_warnings_inverter_2_warnings_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_inverter_errors_warnings_inverter_2_warnings_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_inverter_errors_warnings_inverter_2_warnings_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +int can1_inverter_torque_actual_cw_pack( + uint8_t *dst_p, + const struct can1_inverter_torque_actual_cw_t *src_p, + size_t size) +{ + uint16_t inverter_1_torque_actual; + uint16_t inverter_2_torque_actual; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u16(src_p->inverter_1_control_word, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->inverter_1_control_word, 8u, 0xffu); + inverter_1_torque_actual = (uint16_t)src_p->inverter_1_torque_actual; + dst_p[2] |= pack_left_shift_u16(inverter_1_torque_actual, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(inverter_1_torque_actual, 8u, 0xffu); + dst_p[4] |= pack_left_shift_u16(src_p->inverter_2_control_word, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u16(src_p->inverter_2_control_word, 8u, 0xffu); + inverter_2_torque_actual = (uint16_t)src_p->inverter_2_torque_actual; + dst_p[6] |= pack_left_shift_u16(inverter_2_torque_actual, 0u, 0xffu); + dst_p[7] |= pack_right_shift_u16(inverter_2_torque_actual, 8u, 0xffu); + + return (8); +} + +int can1_inverter_torque_actual_cw_unpack( + struct can1_inverter_torque_actual_cw_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint16_t inverter_1_torque_actual; + uint16_t inverter_2_torque_actual; + + if (size < 8u) { + return (-EINVAL); + } + + dst_p->inverter_1_control_word = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->inverter_1_control_word |= unpack_left_shift_u16(src_p[1], 8u, 0xffu); + inverter_1_torque_actual = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + inverter_1_torque_actual |= unpack_left_shift_u16(src_p[3], 8u, 0xffu); + dst_p->inverter_1_torque_actual = (int16_t)inverter_1_torque_actual; + dst_p->inverter_2_control_word = unpack_right_shift_u16(src_p[4], 0u, 0xffu); + dst_p->inverter_2_control_word |= unpack_left_shift_u16(src_p[5], 8u, 0xffu); + inverter_2_torque_actual = unpack_right_shift_u16(src_p[6], 0u, 0xffu); + inverter_2_torque_actual |= unpack_left_shift_u16(src_p[7], 8u, 0xffu); + dst_p->inverter_2_torque_actual = (int16_t)inverter_2_torque_actual; + + return (0); +} + +int can1_inverter_torque_actual_cw_init(struct can1_inverter_torque_actual_cw_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_inverter_torque_actual_cw_t)); + + return 0; +} + +uint16_t can1_inverter_torque_actual_cw_inverter_1_control_word_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_inverter_torque_actual_cw_inverter_1_control_word_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_inverter_torque_actual_cw_inverter_1_control_word_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +int16_t can1_inverter_torque_actual_cw_inverter_1_torque_actual_encode(double value) +{ + return (int16_t)(value); +} + +double can1_inverter_torque_actual_cw_inverter_1_torque_actual_decode(int16_t value) +{ + return ((double)value); +} + +bool can1_inverter_torque_actual_cw_inverter_1_torque_actual_is_in_range(int16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_inverter_torque_actual_cw_inverter_2_control_word_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_inverter_torque_actual_cw_inverter_2_control_word_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_inverter_torque_actual_cw_inverter_2_control_word_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +int16_t can1_inverter_torque_actual_cw_inverter_2_torque_actual_encode(double value) +{ + return (int16_t)(value); +} + +double can1_inverter_torque_actual_cw_inverter_2_torque_actual_decode(int16_t value) +{ + return ((double)value); +} + +bool can1_inverter_torque_actual_cw_inverter_2_torque_actual_is_in_range(int16_t value) +{ + (void)value; + + return (true); +} + +int can1_inverter_temperatur_pack( + uint8_t *dst_p, + const struct can1_inverter_temperatur_t *src_p, + size_t size) +{ + uint16_t inverter_1_temp_inv; + uint16_t inverter_1_temp_mot; + uint16_t inverter_2_temp_inv; + uint16_t inverter_2_temp_mot; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + inverter_1_temp_inv = (uint16_t)src_p->inverter_1_temp_inv; + dst_p[0] |= pack_left_shift_u16(inverter_1_temp_inv, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(inverter_1_temp_inv, 8u, 0xffu); + inverter_1_temp_mot = (uint16_t)src_p->inverter_1_temp_mot; + dst_p[2] |= pack_left_shift_u16(inverter_1_temp_mot, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(inverter_1_temp_mot, 8u, 0xffu); + inverter_2_temp_inv = (uint16_t)src_p->inverter_2_temp_inv; + dst_p[4] |= pack_left_shift_u16(inverter_2_temp_inv, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u16(inverter_2_temp_inv, 8u, 0xffu); + inverter_2_temp_mot = (uint16_t)src_p->inverter_2_temp_mot; + dst_p[6] |= pack_left_shift_u16(inverter_2_temp_mot, 0u, 0xffu); + dst_p[7] |= pack_right_shift_u16(inverter_2_temp_mot, 8u, 0xffu); + + return (8); +} + +int can1_inverter_temperatur_unpack( + struct can1_inverter_temperatur_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint16_t inverter_1_temp_inv; + uint16_t inverter_1_temp_mot; + uint16_t inverter_2_temp_inv; + uint16_t inverter_2_temp_mot; + + if (size < 8u) { + return (-EINVAL); + } + + inverter_1_temp_inv = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + inverter_1_temp_inv |= unpack_left_shift_u16(src_p[1], 8u, 0xffu); + dst_p->inverter_1_temp_inv = (int16_t)inverter_1_temp_inv; + inverter_1_temp_mot = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + inverter_1_temp_mot |= unpack_left_shift_u16(src_p[3], 8u, 0xffu); + dst_p->inverter_1_temp_mot = (int16_t)inverter_1_temp_mot; + inverter_2_temp_inv = unpack_right_shift_u16(src_p[4], 0u, 0xffu); + inverter_2_temp_inv |= unpack_left_shift_u16(src_p[5], 8u, 0xffu); + dst_p->inverter_2_temp_inv = (int16_t)inverter_2_temp_inv; + inverter_2_temp_mot = unpack_right_shift_u16(src_p[6], 0u, 0xffu); + inverter_2_temp_mot |= unpack_left_shift_u16(src_p[7], 8u, 0xffu); + dst_p->inverter_2_temp_mot = (int16_t)inverter_2_temp_mot; + + return (0); +} + +int can1_inverter_temperatur_init(struct can1_inverter_temperatur_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_inverter_temperatur_t)); + + return 0; +} + +int16_t can1_inverter_temperatur_inverter_1_temp_inv_encode(double value) +{ + return (int16_t)(value); +} + +double can1_inverter_temperatur_inverter_1_temp_inv_decode(int16_t value) +{ + return ((double)value); +} + +bool can1_inverter_temperatur_inverter_1_temp_inv_is_in_range(int16_t value) +{ + return ((value >= -128) && (value <= 127)); +} + +int16_t can1_inverter_temperatur_inverter_1_temp_mot_encode(double value) +{ + return (int16_t)(value); +} + +double can1_inverter_temperatur_inverter_1_temp_mot_decode(int16_t value) +{ + return ((double)value); +} + +bool can1_inverter_temperatur_inverter_1_temp_mot_is_in_range(int16_t value) +{ + return ((value >= -128) && (value <= 127)); +} + +int16_t can1_inverter_temperatur_inverter_2_temp_inv_encode(double value) +{ + return (int16_t)(value); +} + +double can1_inverter_temperatur_inverter_2_temp_inv_decode(int16_t value) +{ + return ((double)value); +} + +bool can1_inverter_temperatur_inverter_2_temp_inv_is_in_range(int16_t value) +{ + (void)value; + + return (true); +} + +int16_t can1_inverter_temperatur_inverter_2_temp_mot_encode(double value) +{ + return (int16_t)(value); +} + +double can1_inverter_temperatur_inverter_2_temp_mot_decode(int16_t value) +{ + return ((double)value); +} + +bool can1_inverter_temperatur_inverter_2_temp_mot_is_in_range(int16_t value) +{ + return ((value >= -128) && (value <= 127)); +} + +int can1_inverter_torque_wanted_pack( + uint8_t *dst_p, + const struct can1_inverter_torque_wanted_t *src_p, + size_t size) +{ + uint16_t inverter_1_torque_demanded; + uint16_t inverter_1_torque_desired; + uint16_t inverter_2_torque_demanded; + uint16_t inverter_2_torque_desired; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + inverter_1_torque_demanded = (uint16_t)src_p->inverter_1_torque_demanded; + dst_p[0] |= pack_left_shift_u16(inverter_1_torque_demanded, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(inverter_1_torque_demanded, 8u, 0xffu); + inverter_2_torque_demanded = (uint16_t)src_p->inverter_2_torque_demanded; + dst_p[2] |= pack_left_shift_u16(inverter_2_torque_demanded, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(inverter_2_torque_demanded, 8u, 0xffu); + inverter_1_torque_desired = (uint16_t)src_p->inverter_1_torque_desired; + dst_p[4] |= pack_left_shift_u16(inverter_1_torque_desired, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u16(inverter_1_torque_desired, 8u, 0xffu); + inverter_2_torque_desired = (uint16_t)src_p->inverter_2_torque_desired; + dst_p[6] |= pack_left_shift_u16(inverter_2_torque_desired, 0u, 0xffu); + dst_p[7] |= pack_right_shift_u16(inverter_2_torque_desired, 8u, 0xffu); + + return (8); +} + +int can1_inverter_torque_wanted_unpack( + struct can1_inverter_torque_wanted_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint16_t inverter_1_torque_demanded; + uint16_t inverter_1_torque_desired; + uint16_t inverter_2_torque_demanded; + uint16_t inverter_2_torque_desired; + + if (size < 8u) { + return (-EINVAL); + } + + inverter_1_torque_demanded = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + inverter_1_torque_demanded |= unpack_left_shift_u16(src_p[1], 8u, 0xffu); + dst_p->inverter_1_torque_demanded = (int16_t)inverter_1_torque_demanded; + inverter_2_torque_demanded = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + inverter_2_torque_demanded |= unpack_left_shift_u16(src_p[3], 8u, 0xffu); + dst_p->inverter_2_torque_demanded = (int16_t)inverter_2_torque_demanded; + inverter_1_torque_desired = unpack_right_shift_u16(src_p[4], 0u, 0xffu); + inverter_1_torque_desired |= unpack_left_shift_u16(src_p[5], 8u, 0xffu); + dst_p->inverter_1_torque_desired = (int16_t)inverter_1_torque_desired; + inverter_2_torque_desired = unpack_right_shift_u16(src_p[6], 0u, 0xffu); + inverter_2_torque_desired |= unpack_left_shift_u16(src_p[7], 8u, 0xffu); + dst_p->inverter_2_torque_desired = (int16_t)inverter_2_torque_desired; + + return (0); +} + +int can1_inverter_torque_wanted_init(struct can1_inverter_torque_wanted_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_inverter_torque_wanted_t)); + + return 0; +} + +int16_t can1_inverter_torque_wanted_inverter_1_torque_demanded_encode(double value) +{ + return (int16_t)(value); +} + +double can1_inverter_torque_wanted_inverter_1_torque_demanded_decode(int16_t value) +{ + return ((double)value); +} + +bool can1_inverter_torque_wanted_inverter_1_torque_demanded_is_in_range(int16_t value) +{ + (void)value; + + return (true); +} + +int16_t can1_inverter_torque_wanted_inverter_2_torque_demanded_encode(double value) +{ + return (int16_t)(value); +} + +double can1_inverter_torque_wanted_inverter_2_torque_demanded_decode(int16_t value) +{ + return ((double)value); +} + +bool can1_inverter_torque_wanted_inverter_2_torque_demanded_is_in_range(int16_t value) +{ + (void)value; + + return (true); +} + +int16_t can1_inverter_torque_wanted_inverter_1_torque_desired_encode(double value) +{ + return (int16_t)(value); +} + +double can1_inverter_torque_wanted_inverter_1_torque_desired_decode(int16_t value) +{ + return ((double)value); +} + +bool can1_inverter_torque_wanted_inverter_1_torque_desired_is_in_range(int16_t value) +{ + (void)value; + + return (true); +} + +int16_t can1_inverter_torque_wanted_inverter_2_torque_desired_encode(double value) +{ + return (int16_t)(value); +} + +double can1_inverter_torque_wanted_inverter_2_torque_desired_decode(int16_t value) +{ + return ((double)value); +} + +bool can1_inverter_torque_wanted_inverter_2_torque_desired_is_in_range(int16_t value) +{ + (void)value; + + return (true); +} + +int can1_sdo_telemetrie_rx_node1_pack( + uint8_t *dst_p, + const struct can1_sdo_telemetrie_rx_node1_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u8(src_p->sdo_command_byte, 0u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->sdo_od_index, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->sdo_od_index, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u8(src_p->sdo_od_subindex, 0u, 0xffu); + dst_p[4] |= pack_left_shift_u32(src_p->sdo_data, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u32(src_p->sdo_data, 8u, 0xffu); + dst_p[6] |= pack_right_shift_u32(src_p->sdo_data, 16u, 0xffu); + dst_p[7] |= pack_right_shift_u32(src_p->sdo_data, 24u, 0xffu); + + return (8); +} + +int can1_sdo_telemetrie_rx_node1_unpack( + struct can1_sdo_telemetrie_rx_node1_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->sdo_command_byte = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->sdo_od_index = unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->sdo_od_index |= unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->sdo_od_subindex = unpack_right_shift_u8(src_p[3], 0u, 0xffu); + dst_p->sdo_data = unpack_right_shift_u32(src_p[4], 0u, 0xffu); + dst_p->sdo_data |= unpack_left_shift_u32(src_p[5], 8u, 0xffu); + dst_p->sdo_data |= unpack_left_shift_u32(src_p[6], 16u, 0xffu); + dst_p->sdo_data |= unpack_left_shift_u32(src_p[7], 24u, 0xffu); + + return (0); +} + +int can1_sdo_telemetrie_rx_node1_init(struct can1_sdo_telemetrie_rx_node1_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_sdo_telemetrie_rx_node1_t)); + + return 0; +} + +uint8_t can1_sdo_telemetrie_rx_node1_sdo_command_byte_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sdo_telemetrie_rx_node1_sdo_command_byte_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sdo_telemetrie_rx_node1_sdo_command_byte_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_sdo_telemetrie_rx_node1_sdo_od_index_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_sdo_telemetrie_rx_node1_sdo_od_index_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_sdo_telemetrie_rx_node1_sdo_od_index_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_sdo_telemetrie_rx_node1_sdo_od_subindex_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sdo_telemetrie_rx_node1_sdo_od_subindex_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sdo_telemetrie_rx_node1_sdo_od_subindex_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint32_t can1_sdo_telemetrie_rx_node1_sdo_data_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_sdo_telemetrie_rx_node1_sdo_data_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_sdo_telemetrie_rx_node1_sdo_data_is_in_range(uint32_t value) +{ + (void)value; + + return (true); +} + +int can1_sdo_telemetrie_rx_node2_pack( + uint8_t *dst_p, + const struct can1_sdo_telemetrie_rx_node2_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u8(src_p->sdo_command_byte, 0u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->sdo_od_index, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->sdo_od_index, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u8(src_p->sdo_od_subindex, 0u, 0xffu); + dst_p[4] |= pack_left_shift_u32(src_p->sdo_data, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u32(src_p->sdo_data, 8u, 0xffu); + dst_p[6] |= pack_right_shift_u32(src_p->sdo_data, 16u, 0xffu); + dst_p[7] |= pack_right_shift_u32(src_p->sdo_data, 24u, 0xffu); + + return (8); +} + +int can1_sdo_telemetrie_rx_node2_unpack( + struct can1_sdo_telemetrie_rx_node2_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->sdo_command_byte = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->sdo_od_index = unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->sdo_od_index |= unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->sdo_od_subindex = unpack_right_shift_u8(src_p[3], 0u, 0xffu); + dst_p->sdo_data = unpack_right_shift_u32(src_p[4], 0u, 0xffu); + dst_p->sdo_data |= unpack_left_shift_u32(src_p[5], 8u, 0xffu); + dst_p->sdo_data |= unpack_left_shift_u32(src_p[6], 16u, 0xffu); + dst_p->sdo_data |= unpack_left_shift_u32(src_p[7], 24u, 0xffu); + + return (0); +} + +int can1_sdo_telemetrie_rx_node2_init(struct can1_sdo_telemetrie_rx_node2_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_sdo_telemetrie_rx_node2_t)); + + return 0; +} + +uint8_t can1_sdo_telemetrie_rx_node2_sdo_command_byte_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sdo_telemetrie_rx_node2_sdo_command_byte_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sdo_telemetrie_rx_node2_sdo_command_byte_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_sdo_telemetrie_rx_node2_sdo_od_index_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_sdo_telemetrie_rx_node2_sdo_od_index_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_sdo_telemetrie_rx_node2_sdo_od_index_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_sdo_telemetrie_rx_node2_sdo_od_subindex_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sdo_telemetrie_rx_node2_sdo_od_subindex_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sdo_telemetrie_rx_node2_sdo_od_subindex_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint32_t can1_sdo_telemetrie_rx_node2_sdo_data_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_sdo_telemetrie_rx_node2_sdo_data_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_sdo_telemetrie_rx_node2_sdo_data_is_in_range(uint32_t value) +{ + (void)value; + + return (true); +} + +int can1_sdo_telemetrie_tx_pack( + uint8_t *dst_p, + const struct can1_sdo_telemetrie_tx_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u8(src_p->sdo_command_byte, 0u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->sdo_od_index, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->sdo_od_index, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u8(src_p->sdo_od_subindex, 0u, 0xffu); + dst_p[4] |= pack_left_shift_u32(src_p->sdo_data, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u32(src_p->sdo_data, 8u, 0xffu); + dst_p[6] |= pack_right_shift_u32(src_p->sdo_data, 16u, 0xffu); + dst_p[7] |= pack_right_shift_u32(src_p->sdo_data, 24u, 0xffu); + + return (8); +} + +int can1_sdo_telemetrie_tx_unpack( + struct can1_sdo_telemetrie_tx_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->sdo_command_byte = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->sdo_od_index = unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->sdo_od_index |= unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->sdo_od_subindex = unpack_right_shift_u8(src_p[3], 0u, 0xffu); + dst_p->sdo_data = unpack_right_shift_u32(src_p[4], 0u, 0xffu); + dst_p->sdo_data |= unpack_left_shift_u32(src_p[5], 8u, 0xffu); + dst_p->sdo_data |= unpack_left_shift_u32(src_p[6], 16u, 0xffu); + dst_p->sdo_data |= unpack_left_shift_u32(src_p[7], 24u, 0xffu); + + return (0); +} + +int can1_sdo_telemetrie_tx_init(struct can1_sdo_telemetrie_tx_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_sdo_telemetrie_tx_t)); + + return 0; +} + +uint8_t can1_sdo_telemetrie_tx_sdo_command_byte_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sdo_telemetrie_tx_sdo_command_byte_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sdo_telemetrie_tx_sdo_command_byte_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_sdo_telemetrie_tx_sdo_od_index_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_sdo_telemetrie_tx_sdo_od_index_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_sdo_telemetrie_tx_sdo_od_index_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_sdo_telemetrie_tx_sdo_od_subindex_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sdo_telemetrie_tx_sdo_od_subindex_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sdo_telemetrie_tx_sdo_od_subindex_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint32_t can1_sdo_telemetrie_tx_sdo_data_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_sdo_telemetrie_tx_sdo_data_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_sdo_telemetrie_tx_sdo_data_is_in_range(uint32_t value) +{ + (void)value; + + return (true); +} + +int can1_laptop_sdo_node_pack( + uint8_t *dst_p, + const struct can1_laptop_sdo_node_t *src_p, + size_t size) +{ + if (size < 1u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 1); + + dst_p[0] |= pack_left_shift_u8(src_p->node_id_sdo, 0u, 0x03u); + + return (1); +} + +int can1_laptop_sdo_node_unpack( + struct can1_laptop_sdo_node_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 1u) { + return (-EINVAL); + } + + dst_p->node_id_sdo = unpack_right_shift_u8(src_p[0], 0u, 0x03u); + + return (0); +} + +int can1_laptop_sdo_node_init(struct can1_laptop_sdo_node_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_laptop_sdo_node_t)); + + return 0; +} + +uint8_t can1_laptop_sdo_node_node_id_sdo_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_laptop_sdo_node_node_id_sdo_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_laptop_sdo_node_node_id_sdo_is_in_range(uint8_t value) +{ + return (value <= 3u); +} + +int can1_x_sens_long_lat_pack( + uint8_t *dst_p, + const struct can1_x_sens_long_lat_t *src_p, + size_t size) +{ + uint32_t x_sens_latitude; + uint32_t x_sens_longitude; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + x_sens_latitude = (uint32_t)src_p->x_sens_latitude; + dst_p[0] |= pack_left_shift_u32(x_sens_latitude, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u32(x_sens_latitude, 8u, 0xffu); + dst_p[2] |= pack_right_shift_u32(x_sens_latitude, 16u, 0xffu); + dst_p[3] |= pack_right_shift_u32(x_sens_latitude, 24u, 0xffu); + x_sens_longitude = (uint32_t)src_p->x_sens_longitude; + dst_p[4] |= pack_left_shift_u32(x_sens_longitude, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u32(x_sens_longitude, 8u, 0xffu); + dst_p[6] |= pack_right_shift_u32(x_sens_longitude, 16u, 0xffu); + dst_p[7] |= pack_right_shift_u32(x_sens_longitude, 24u, 0xffu); + + return (8); +} + +int can1_x_sens_long_lat_unpack( + struct can1_x_sens_long_lat_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint32_t x_sens_latitude; + uint32_t x_sens_longitude; + + if (size < 8u) { + return (-EINVAL); + } + + x_sens_latitude = unpack_right_shift_u32(src_p[0], 0u, 0xffu); + x_sens_latitude |= unpack_left_shift_u32(src_p[1], 8u, 0xffu); + x_sens_latitude |= unpack_left_shift_u32(src_p[2], 16u, 0xffu); + x_sens_latitude |= unpack_left_shift_u32(src_p[3], 24u, 0xffu); + dst_p->x_sens_latitude = (int32_t)x_sens_latitude; + x_sens_longitude = unpack_right_shift_u32(src_p[4], 0u, 0xffu); + x_sens_longitude |= unpack_left_shift_u32(src_p[5], 8u, 0xffu); + x_sens_longitude |= unpack_left_shift_u32(src_p[6], 16u, 0xffu); + x_sens_longitude |= unpack_left_shift_u32(src_p[7], 24u, 0xffu); + dst_p->x_sens_longitude = (int32_t)x_sens_longitude; + + return (0); +} + +int can1_x_sens_long_lat_init(struct can1_x_sens_long_lat_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_x_sens_long_lat_t)); + + return 0; +} + +int32_t can1_x_sens_long_lat_x_sens_latitude_encode(double value) +{ + return (int32_t)(value / 5.96046e-08); +} + +double can1_x_sens_long_lat_x_sens_latitude_decode(int32_t value) +{ + return ((double)value * 5.96046e-08); +} + +bool can1_x_sens_long_lat_x_sens_latitude_is_in_range(int32_t value) +{ + (void)value; + + return (true); +} + +int32_t can1_x_sens_long_lat_x_sens_longitude_encode(double value) +{ + return (int32_t)(value / 1.19209e-07); +} + +double can1_x_sens_long_lat_x_sens_longitude_decode(int32_t value) +{ + return ((double)value * 1.19209e-07); +} + +bool can1_x_sens_long_lat_x_sens_longitude_is_in_range(int32_t value) +{ + (void)value; + + return (true); +} + +int can1_x_sens_rateofturn_pack( + uint8_t *dst_p, + const struct can1_x_sens_rateofturn_t *src_p, + size_t size) +{ + uint16_t x_sens_gy_y; + uint16_t x_sens_gy_z; + uint16_t x_sens_gyr_x; + + if (size < 6u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 6); + + x_sens_gyr_x = (uint16_t)src_p->x_sens_gyr_x; + dst_p[0] |= pack_left_shift_u16(x_sens_gyr_x, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(x_sens_gyr_x, 8u, 0xffu); + x_sens_gy_y = (uint16_t)src_p->x_sens_gy_y; + dst_p[2] |= pack_left_shift_u16(x_sens_gy_y, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(x_sens_gy_y, 8u, 0xffu); + x_sens_gy_z = (uint16_t)src_p->x_sens_gy_z; + dst_p[4] |= pack_left_shift_u16(x_sens_gy_z, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u16(x_sens_gy_z, 8u, 0xffu); + + return (6); +} + +int can1_x_sens_rateofturn_unpack( + struct can1_x_sens_rateofturn_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint16_t x_sens_gy_y; + uint16_t x_sens_gy_z; + uint16_t x_sens_gyr_x; + + if (size < 6u) { + return (-EINVAL); + } + + x_sens_gyr_x = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + x_sens_gyr_x |= unpack_left_shift_u16(src_p[1], 8u, 0xffu); + dst_p->x_sens_gyr_x = (int16_t)x_sens_gyr_x; + x_sens_gy_y = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + x_sens_gy_y |= unpack_left_shift_u16(src_p[3], 8u, 0xffu); + dst_p->x_sens_gy_y = (int16_t)x_sens_gy_y; + x_sens_gy_z = unpack_right_shift_u16(src_p[4], 0u, 0xffu); + x_sens_gy_z |= unpack_left_shift_u16(src_p[5], 8u, 0xffu); + dst_p->x_sens_gy_z = (int16_t)x_sens_gy_z; + + return (0); +} + +int can1_x_sens_rateofturn_init(struct can1_x_sens_rateofturn_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_x_sens_rateofturn_t)); + + return 0; +} + +int16_t can1_x_sens_rateofturn_x_sens_gyr_x_encode(double value) +{ + return (int16_t)(value / 0.00195313); +} + +double can1_x_sens_rateofturn_x_sens_gyr_x_decode(int16_t value) +{ + return ((double)value * 0.00195313); +} + +bool can1_x_sens_rateofturn_x_sens_gyr_x_is_in_range(int16_t value) +{ + (void)value; + + return (true); +} + +int16_t can1_x_sens_rateofturn_x_sens_gy_y_encode(double value) +{ + return (int16_t)(value / 0.00195313); +} + +double can1_x_sens_rateofturn_x_sens_gy_y_decode(int16_t value) +{ + return ((double)value * 0.00195313); +} + +bool can1_x_sens_rateofturn_x_sens_gy_y_is_in_range(int16_t value) +{ + (void)value; + + return (true); +} + +int16_t can1_x_sens_rateofturn_x_sens_gy_z_encode(double value) +{ + return (int16_t)(value / 0.00195313); +} + +double can1_x_sens_rateofturn_x_sens_gy_z_decode(int16_t value) +{ + return ((double)value * 0.00195313); +} + +bool can1_x_sens_rateofturn_x_sens_gy_z_is_in_range(int16_t value) +{ + (void)value; + + return (true); +} + +int can1_x_sens_acceleration_pack( + uint8_t *dst_p, + const struct can1_x_sens_acceleration_t *src_p, + size_t size) +{ + uint16_t x_sens_acc_x; + uint16_t x_sens_acc_y; + uint16_t x_sens_acc_z; + + if (size < 6u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 6); + + x_sens_acc_x = (uint16_t)src_p->x_sens_acc_x; + dst_p[0] |= pack_left_shift_u16(x_sens_acc_x, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(x_sens_acc_x, 8u, 0xffu); + x_sens_acc_y = (uint16_t)src_p->x_sens_acc_y; + dst_p[2] |= pack_left_shift_u16(x_sens_acc_y, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(x_sens_acc_y, 8u, 0xffu); + x_sens_acc_z = (uint16_t)src_p->x_sens_acc_z; + dst_p[4] |= pack_left_shift_u16(x_sens_acc_z, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u16(x_sens_acc_z, 8u, 0xffu); + + return (6); +} + +int can1_x_sens_acceleration_unpack( + struct can1_x_sens_acceleration_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint16_t x_sens_acc_x; + uint16_t x_sens_acc_y; + uint16_t x_sens_acc_z; + + if (size < 6u) { + return (-EINVAL); + } + + x_sens_acc_x = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + x_sens_acc_x |= unpack_left_shift_u16(src_p[1], 8u, 0xffu); + dst_p->x_sens_acc_x = (int16_t)x_sens_acc_x; + x_sens_acc_y = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + x_sens_acc_y |= unpack_left_shift_u16(src_p[3], 8u, 0xffu); + dst_p->x_sens_acc_y = (int16_t)x_sens_acc_y; + x_sens_acc_z = unpack_right_shift_u16(src_p[4], 0u, 0xffu); + x_sens_acc_z |= unpack_left_shift_u16(src_p[5], 8u, 0xffu); + dst_p->x_sens_acc_z = (int16_t)x_sens_acc_z; + + return (0); +} + +int can1_x_sens_acceleration_init(struct can1_x_sens_acceleration_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_x_sens_acceleration_t)); + + return 0; +} + +int16_t can1_x_sens_acceleration_x_sens_acc_x_encode(double value) +{ + return (int16_t)(value / 0.00390625); +} + +double can1_x_sens_acceleration_x_sens_acc_x_decode(int16_t value) +{ + return ((double)value * 0.00390625); +} + +bool can1_x_sens_acceleration_x_sens_acc_x_is_in_range(int16_t value) +{ + (void)value; + + return (true); +} + +int16_t can1_x_sens_acceleration_x_sens_acc_y_encode(double value) +{ + return (int16_t)(value / 0.00390625); +} + +double can1_x_sens_acceleration_x_sens_acc_y_decode(int16_t value) +{ + return ((double)value * 0.00390625); +} + +bool can1_x_sens_acceleration_x_sens_acc_y_is_in_range(int16_t value) +{ + (void)value; + + return (true); +} + +int16_t can1_x_sens_acceleration_x_sens_acc_z_encode(double value) +{ + return (int16_t)(value / 0.00390625); +} + +double can1_x_sens_acceleration_x_sens_acc_z_decode(int16_t value) +{ + return ((double)value * 0.00390625); +} + +bool can1_x_sens_acceleration_x_sens_acc_z_is_in_range(int16_t value) +{ + (void)value; + + return (true); +} + +int can1_x_sens_velocity_pack( + uint8_t *dst_p, + const struct can1_x_sens_velocity_t *src_p, + size_t size) +{ + uint16_t x_sens_vel_x; + uint16_t x_sens_vel_y; + uint16_t x_sens_vel_z; + + if (size < 6u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 6); + + x_sens_vel_x = (uint16_t)src_p->x_sens_vel_x; + dst_p[0] |= pack_left_shift_u16(x_sens_vel_x, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(x_sens_vel_x, 8u, 0xffu); + x_sens_vel_y = (uint16_t)src_p->x_sens_vel_y; + dst_p[2] |= pack_left_shift_u16(x_sens_vel_y, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(x_sens_vel_y, 8u, 0xffu); + x_sens_vel_z = (uint16_t)src_p->x_sens_vel_z; + dst_p[4] |= pack_left_shift_u16(x_sens_vel_z, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u16(x_sens_vel_z, 8u, 0xffu); + + return (6); +} + +int can1_x_sens_velocity_unpack( + struct can1_x_sens_velocity_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint16_t x_sens_vel_x; + uint16_t x_sens_vel_y; + uint16_t x_sens_vel_z; + + if (size < 6u) { + return (-EINVAL); + } + + x_sens_vel_x = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + x_sens_vel_x |= unpack_left_shift_u16(src_p[1], 8u, 0xffu); + dst_p->x_sens_vel_x = (int16_t)x_sens_vel_x; + x_sens_vel_y = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + x_sens_vel_y |= unpack_left_shift_u16(src_p[3], 8u, 0xffu); + dst_p->x_sens_vel_y = (int16_t)x_sens_vel_y; + x_sens_vel_z = unpack_right_shift_u16(src_p[4], 0u, 0xffu); + x_sens_vel_z |= unpack_left_shift_u16(src_p[5], 8u, 0xffu); + dst_p->x_sens_vel_z = (int16_t)x_sens_vel_z; + + return (0); +} + +int can1_x_sens_velocity_init(struct can1_x_sens_velocity_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_x_sens_velocity_t)); + + return 0; +} + +int16_t can1_x_sens_velocity_x_sens_vel_x_encode(double value) +{ + return (int16_t)(value / 0.015625); +} + +double can1_x_sens_velocity_x_sens_vel_x_decode(int16_t value) +{ + return ((double)value * 0.015625); +} + +bool can1_x_sens_velocity_x_sens_vel_x_is_in_range(int16_t value) +{ + (void)value; + + return (true); +} + +int16_t can1_x_sens_velocity_x_sens_vel_y_encode(double value) +{ + return (int16_t)(value / 0.015625); +} + +double can1_x_sens_velocity_x_sens_vel_y_decode(int16_t value) +{ + return ((double)value * 0.015625); +} + +bool can1_x_sens_velocity_x_sens_vel_y_is_in_range(int16_t value) +{ + (void)value; + + return (true); +} + +int16_t can1_x_sens_velocity_x_sens_vel_z_encode(double value) +{ + return (int16_t)(value / 0.015625); +} + +double can1_x_sens_velocity_x_sens_vel_z_decode(int16_t value) +{ + return ((double)value * 0.015625); +} + +bool can1_x_sens_velocity_x_sens_vel_z_is_in_range(int16_t value) +{ + (void)value; + + return (true); +} + +int can1_telemetrie_pack( + uint8_t *dst_p, + const struct can1_telemetrie_t *src_p, + size_t size) +{ + if (size < 7u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 7); + + dst_p[0] |= pack_left_shift_u8(src_p->ini_check_error_state, 0u, 0x0fu); + dst_p[0] |= pack_left_shift_u8(src_p->powermap, 4u, 0x70u); + dst_p[0] |= pack_left_shift_u8(src_p->apps_ok, 7u, 0x80u); + dst_p[1] |= pack_left_shift_u8(src_p->brake_ok, 0u, 0x01u); + dst_p[1] |= pack_left_shift_u8(src_p->allow_torque, 1u, 0x02u); + dst_p[1] |= pack_left_shift_u8(src_p->asp_ok, 2u, 0x04u); + dst_p[1] |= pack_left_shift_u8(src_p->pressure_sensor_ok, 3u, 0x08u); + dst_p[1] |= pack_left_shift_u8(src_p->torque_vectoring_on, 4u, 0x10u); + dst_p[1] |= pack_left_shift_u8(src_p->reku_on, 5u, 0x20u); + dst_p[1] |= pack_left_shift_u8(src_p->traction_control_on, 6u, 0x40u); + dst_p[1] |= pack_left_shift_u8(src_p->ts_deactivate, 7u, 0x80u); + dst_p[2] |= pack_left_shift_u8(src_p->torque_limit, 0u, 0xffu); + dst_p[3] |= pack_left_shift_u8(src_p->power_limit, 0u, 0xffu); + dst_p[4] |= pack_left_shift_u8(src_p->torque_limit_dynamisch, 0u, 0xffu); + dst_p[5] |= pack_left_shift_u8(src_p->torque_ohne_limit_l, 0u, 0xffu); + dst_p[6] |= pack_left_shift_u8(src_p->torque_ohne_limit_r, 0u, 0xffu); + + return (7); +} + +int can1_telemetrie_unpack( + struct can1_telemetrie_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 7u) { + return (-EINVAL); + } + + dst_p->ini_check_error_state = unpack_right_shift_u8(src_p[0], 0u, 0x0fu); + dst_p->powermap = unpack_right_shift_u8(src_p[0], 4u, 0x70u); + dst_p->apps_ok = unpack_right_shift_u8(src_p[0], 7u, 0x80u); + dst_p->brake_ok = unpack_right_shift_u8(src_p[1], 0u, 0x01u); + dst_p->allow_torque = unpack_right_shift_u8(src_p[1], 1u, 0x02u); + dst_p->asp_ok = unpack_right_shift_u8(src_p[1], 2u, 0x04u); + dst_p->pressure_sensor_ok = unpack_right_shift_u8(src_p[1], 3u, 0x08u); + dst_p->torque_vectoring_on = unpack_right_shift_u8(src_p[1], 4u, 0x10u); + dst_p->reku_on = unpack_right_shift_u8(src_p[1], 5u, 0x20u); + dst_p->traction_control_on = unpack_right_shift_u8(src_p[1], 6u, 0x40u); + dst_p->ts_deactivate = unpack_right_shift_u8(src_p[1], 7u, 0x80u); + dst_p->torque_limit = unpack_right_shift_u8(src_p[2], 0u, 0xffu); + dst_p->power_limit = unpack_right_shift_u8(src_p[3], 0u, 0xffu); + dst_p->torque_limit_dynamisch = unpack_right_shift_u8(src_p[4], 0u, 0xffu); + dst_p->torque_ohne_limit_l = unpack_right_shift_u8(src_p[5], 0u, 0xffu); + dst_p->torque_ohne_limit_r = unpack_right_shift_u8(src_p[6], 0u, 0xffu); + + return (0); +} + +int can1_telemetrie_init(struct can1_telemetrie_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_telemetrie_t)); + + return 0; +} + +uint8_t can1_telemetrie_ini_check_error_state_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_telemetrie_ini_check_error_state_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_telemetrie_ini_check_error_state_is_in_range(uint8_t value) +{ + return (value <= 15u); +} + +uint8_t can1_telemetrie_powermap_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_telemetrie_powermap_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_telemetrie_powermap_is_in_range(uint8_t value) +{ + return (value <= 7u); +} + +uint8_t can1_telemetrie_apps_ok_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_telemetrie_apps_ok_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_telemetrie_apps_ok_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_telemetrie_brake_ok_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_telemetrie_brake_ok_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_telemetrie_brake_ok_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_telemetrie_allow_torque_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_telemetrie_allow_torque_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_telemetrie_allow_torque_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_telemetrie_asp_ok_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_telemetrie_asp_ok_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_telemetrie_asp_ok_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_telemetrie_pressure_sensor_ok_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_telemetrie_pressure_sensor_ok_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_telemetrie_pressure_sensor_ok_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_telemetrie_torque_vectoring_on_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_telemetrie_torque_vectoring_on_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_telemetrie_torque_vectoring_on_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_telemetrie_reku_on_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_telemetrie_reku_on_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_telemetrie_reku_on_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_telemetrie_traction_control_on_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_telemetrie_traction_control_on_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_telemetrie_traction_control_on_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_telemetrie_ts_deactivate_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_telemetrie_ts_deactivate_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_telemetrie_ts_deactivate_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_telemetrie_torque_limit_encode(double value) +{ + return (uint8_t)(value / 10.0); +} + +double can1_telemetrie_torque_limit_decode(uint8_t value) +{ + return ((double)value * 10.0); +} + +bool can1_telemetrie_torque_limit_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_telemetrie_power_limit_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_telemetrie_power_limit_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_telemetrie_power_limit_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_telemetrie_torque_limit_dynamisch_encode(double value) +{ + return (uint8_t)(value / 10.0); +} + +double can1_telemetrie_torque_limit_dynamisch_decode(uint8_t value) +{ + return ((double)value * 10.0); +} + +bool can1_telemetrie_torque_limit_dynamisch_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_telemetrie_torque_ohne_limit_l_encode(double value) +{ + return (uint8_t)(value / 10.0); +} + +double can1_telemetrie_torque_ohne_limit_l_decode(uint8_t value) +{ + return ((double)value * 10.0); +} + +bool can1_telemetrie_torque_ohne_limit_l_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_telemetrie_torque_ohne_limit_r_encode(double value) +{ + return (uint8_t)(value / 10.0); +} + +double can1_telemetrie_torque_ohne_limit_r_decode(uint8_t value) +{ + return ((double)value * 10.0); +} + +bool can1_telemetrie_torque_ohne_limit_r_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +int can1_override_powermap_pack( + uint8_t *dst_p, + const struct can1_override_powermap_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u8(src_p->laptopp_power_map, 0u, 0x07u); + dst_p[0] |= pack_left_shift_u8(src_p->laptop_reku, 3u, 0x08u); + dst_p[0] |= pack_left_shift_u8(src_p->laptop_tc, 4u, 0x10u); + dst_p[0] |= pack_left_shift_u8(src_p->laptop_tv, 5u, 0x20u); + dst_p[1] |= pack_left_shift_u8(src_p->laptop_slipref, 0u, 0xffu); + dst_p[2] |= pack_left_shift_u16(src_p->laptop_tc_i, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(src_p->laptop_tc_i, 8u, 0xffu); + dst_p[4] |= pack_left_shift_u16(src_p->laptop_tc_p, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u16(src_p->laptop_tc_p, 8u, 0xffu); + dst_p[6] |= pack_left_shift_u8(src_p->laptop_tc_mumax, 0u, 0xffu); + + return (8); +} + +int can1_override_powermap_unpack( + struct can1_override_powermap_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->laptopp_power_map = unpack_right_shift_u8(src_p[0], 0u, 0x07u); + dst_p->laptop_reku = unpack_right_shift_u8(src_p[0], 3u, 0x08u); + dst_p->laptop_tc = unpack_right_shift_u8(src_p[0], 4u, 0x10u); + dst_p->laptop_tv = unpack_right_shift_u8(src_p[0], 5u, 0x20u); + dst_p->laptop_slipref = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->laptop_tc_i = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + dst_p->laptop_tc_i |= unpack_left_shift_u16(src_p[3], 8u, 0xffu); + dst_p->laptop_tc_p = unpack_right_shift_u16(src_p[4], 0u, 0xffu); + dst_p->laptop_tc_p |= unpack_left_shift_u16(src_p[5], 8u, 0xffu); + dst_p->laptop_tc_mumax = unpack_right_shift_u8(src_p[6], 0u, 0xffu); + + return (0); +} + +int can1_override_powermap_init(struct can1_override_powermap_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_override_powermap_t)); + + return 0; +} + +uint8_t can1_override_powermap_laptopp_power_map_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_powermap_laptopp_power_map_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_powermap_laptopp_power_map_is_in_range(uint8_t value) +{ + return (value <= 7u); +} + +uint8_t can1_override_powermap_laptop_reku_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_powermap_laptop_reku_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_powermap_laptop_reku_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_powermap_laptop_tc_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_powermap_laptop_tc_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_powermap_laptop_tc_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_powermap_laptop_tv_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_powermap_laptop_tv_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_powermap_laptop_tv_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_powermap_laptop_slipref_encode(double value) +{ + return (uint8_t)(value / 0.01); +} + +double can1_override_powermap_laptop_slipref_decode(uint8_t value) +{ + return ((double)value * 0.01); +} + +bool can1_override_powermap_laptop_slipref_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_override_powermap_laptop_tc_i_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_override_powermap_laptop_tc_i_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_override_powermap_laptop_tc_i_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_override_powermap_laptop_tc_p_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_override_powermap_laptop_tc_p_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_override_powermap_laptop_tc_p_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_override_powermap_laptop_tc_mumax_encode(double value) +{ + return (uint8_t)((value - 1.0) / 0.01); +} + +double can1_override_powermap_laptop_tc_mumax_decode(uint8_t value) +{ + return (((double)value * 0.01) + 1.0); +} + +bool can1_override_powermap_laptop_tc_mumax_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +int can1_override_laptop_2_pack( + uint8_t *dst_p, + const struct can1_override_laptop_2_t *src_p, + size_t size) +{ + if (size < 5u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 5); + + dst_p[0] |= pack_left_shift_u8(src_p->as_mission, 0u, 0x07u); + dst_p[0] |= pack_left_shift_u8(src_p->as_state, 3u, 0x38u); + dst_p[1] |= pack_left_shift_u16(src_p->manual_input_torque, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->manual_input_torque, 8u, 0x0fu); + dst_p[3] |= pack_left_shift_u8(src_p->laptop_powerlimit, 0u, 0xffu); + dst_p[4] |= pack_left_shift_u8(src_p->laptop_torque_lim, 0u, 0xffu); + + return (5); +} + +int can1_override_laptop_2_unpack( + struct can1_override_laptop_2_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 5u) { + return (-EINVAL); + } + + dst_p->as_mission = unpack_right_shift_u8(src_p[0], 0u, 0x07u); + dst_p->as_state = unpack_right_shift_u8(src_p[0], 3u, 0x38u); + dst_p->manual_input_torque = unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->manual_input_torque |= unpack_left_shift_u16(src_p[2], 8u, 0x0fu); + dst_p->laptop_powerlimit = unpack_right_shift_u8(src_p[3], 0u, 0xffu); + dst_p->laptop_torque_lim = unpack_right_shift_u8(src_p[4], 0u, 0xffu); + + return (0); +} + +int can1_override_laptop_2_init(struct can1_override_laptop_2_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_override_laptop_2_t)); + + return 0; +} + +uint8_t can1_override_laptop_2_as_mission_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_2_as_mission_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_2_as_mission_is_in_range(uint8_t value) +{ + return (value <= 7u); +} + +uint8_t can1_override_laptop_2_as_state_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_2_as_state_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_2_as_state_is_in_range(uint8_t value) +{ + return (value <= 7u); +} + +uint16_t can1_override_laptop_2_manual_input_torque_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_override_laptop_2_manual_input_torque_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_2_manual_input_torque_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint8_t can1_override_laptop_2_laptop_powerlimit_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_2_laptop_powerlimit_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_2_laptop_powerlimit_is_in_range(uint8_t value) +{ + return (value <= 80u); +} + +uint8_t can1_override_laptop_2_laptop_torque_lim_encode(double value) +{ + return (uint8_t)(value / 10.0); +} + +double can1_override_laptop_2_laptop_torque_lim_decode(uint8_t value) +{ + return ((double)value * 10.0); +} + +bool can1_override_laptop_2_laptop_torque_lim_is_in_range(uint8_t value) +{ + return (value <= 150u); +} + +int can1_override_epsc_cooling_pack( + uint8_t *dst_p, + const struct can1_override_epsc_cooling_t *src_p, + size_t size) +{ + uint16_t epsc_manual_angle; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + epsc_manual_angle = (uint16_t)src_p->epsc_manual_angle; + dst_p[0] |= pack_left_shift_u16(epsc_manual_angle, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(epsc_manual_angle, 8u, 0x03u); + dst_p[1] |= pack_left_shift_u8(src_p->epsc_mode, 2u, 0x0cu); + dst_p[1] |= pack_left_shift_u8(src_p->ac_cooling_enable, 4u, 0x10u); + dst_p[1] |= pack_left_shift_u8(src_p->ts_cooling_enable, 5u, 0x20u); + dst_p[2] |= pack_left_shift_u8(src_p->ac_cooling_pwm, 0u, 0xffu); + dst_p[3] |= pack_left_shift_u8(src_p->ts_cooling_pwm, 0u, 0xffu); + + return (8); +} + +int can1_override_epsc_cooling_unpack( + struct can1_override_epsc_cooling_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint16_t epsc_manual_angle; + + if (size < 8u) { + return (-EINVAL); + } + + epsc_manual_angle = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + epsc_manual_angle |= unpack_left_shift_u16(src_p[1], 8u, 0x03u); + + if ((epsc_manual_angle & (1u << 9)) != 0u) { + epsc_manual_angle |= 0xfc00u; + } + + dst_p->epsc_manual_angle = (int16_t)epsc_manual_angle; + dst_p->epsc_mode = unpack_right_shift_u8(src_p[1], 2u, 0x0cu); + dst_p->ac_cooling_enable = unpack_right_shift_u8(src_p[1], 4u, 0x10u); + dst_p->ts_cooling_enable = unpack_right_shift_u8(src_p[1], 5u, 0x20u); + dst_p->ac_cooling_pwm = unpack_right_shift_u8(src_p[2], 0u, 0xffu); + dst_p->ts_cooling_pwm = unpack_right_shift_u8(src_p[3], 0u, 0xffu); + + return (0); +} + +int can1_override_epsc_cooling_init(struct can1_override_epsc_cooling_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_override_epsc_cooling_t)); + + return 0; +} + +int16_t can1_override_epsc_cooling_epsc_manual_angle_encode(double value) +{ + return (int16_t)(value); +} + +double can1_override_epsc_cooling_epsc_manual_angle_decode(int16_t value) +{ + return ((double)value); +} + +bool can1_override_epsc_cooling_epsc_manual_angle_is_in_range(int16_t value) +{ + return ((value >= -512) && (value <= 511)); +} + +uint8_t can1_override_epsc_cooling_epsc_mode_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_epsc_cooling_epsc_mode_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_epsc_cooling_epsc_mode_is_in_range(uint8_t value) +{ + return (value <= 3u); +} + +uint8_t can1_override_epsc_cooling_ac_cooling_enable_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_epsc_cooling_ac_cooling_enable_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_epsc_cooling_ac_cooling_enable_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_epsc_cooling_ts_cooling_enable_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_epsc_cooling_ts_cooling_enable_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_epsc_cooling_ts_cooling_enable_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_epsc_cooling_ac_cooling_pwm_encode(double value) +{ + return (uint8_t)(value / 0.005); +} + +double can1_override_epsc_cooling_ac_cooling_pwm_decode(uint8_t value) +{ + return ((double)value * 0.005); +} + +bool can1_override_epsc_cooling_ac_cooling_pwm_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_override_epsc_cooling_ts_cooling_pwm_encode(double value) +{ + return (uint8_t)(value / 0.005); +} + +double can1_override_epsc_cooling_ts_cooling_pwm_decode(uint8_t value) +{ + return ((double)value * 0.005); +} + +bool can1_override_epsc_cooling_ts_cooling_pwm_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +int can1_override_laptop_pack( + uint8_t *dst_p, + const struct can1_override_laptop_t *src_p, + size_t size) +{ + if (size < 3u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 3); + + dst_p[0] |= pack_left_shift_u8(src_p->fake_r2_d, 0u, 0x01u); + dst_p[0] |= pack_left_shift_u8(src_p->fake_soundbox_emergency, 1u, 0x02u); + dst_p[0] |= pack_left_shift_u8(src_p->fake_soundbox_r2_d, 2u, 0x04u); + dst_p[0] |= pack_left_shift_u8(src_p->fake_ts_active, 3u, 0x08u); + dst_p[0] |= pack_left_shift_u8(src_p->override_apps, 4u, 0x10u); + dst_p[0] |= pack_left_shift_u8(src_p->override_as_mission, 5u, 0x20u); + dst_p[0] |= pack_left_shift_u8(src_p->override_as_state, 6u, 0x40u); + dst_p[0] |= pack_left_shift_u8(src_p->override_epsc_mode, 7u, 0x80u); + dst_p[1] |= pack_left_shift_u8(src_p->override_pdu_ac_cooling_enable, 0u, 0x01u); + dst_p[1] |= pack_left_shift_u8(src_p->override_pdu_acu_enable, 1u, 0x02u); + dst_p[1] |= pack_left_shift_u8(src_p->override_pdu_drs_enable, 2u, 0x04u); + dst_p[1] |= pack_left_shift_u8(src_p->override_pdu_epsc_enable, 3u, 0x08u); + dst_p[1] |= pack_left_shift_u8(src_p->override_pdu_heartbeat, 4u, 0x10u); + dst_p[1] |= pack_left_shift_u8(src_p->override_pdu_lidar_enable, 5u, 0x20u); + dst_p[1] |= pack_left_shift_u8(src_p->override_pdu_pn_v1_enable, 6u, 0x40u); + dst_p[1] |= pack_left_shift_u8(src_p->override_pdu_pn_v2_enable, 7u, 0x80u); + dst_p[2] |= pack_left_shift_u8(src_p->override_pdu_ts_cooling_enable, 0u, 0x01u); + dst_p[2] |= pack_left_shift_u8(src_p->override_power_map, 1u, 0x02u); + dst_p[2] |= pack_left_shift_u8(src_p->override_tc_parameter, 2u, 0x04u); + dst_p[2] |= pack_left_shift_u8(src_p->override_torque_input, 3u, 0x08u); + + return (3); +} + +int can1_override_laptop_unpack( + struct can1_override_laptop_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 3u) { + return (-EINVAL); + } + + dst_p->fake_r2_d = unpack_right_shift_u8(src_p[0], 0u, 0x01u); + dst_p->fake_soundbox_emergency = unpack_right_shift_u8(src_p[0], 1u, 0x02u); + dst_p->fake_soundbox_r2_d = unpack_right_shift_u8(src_p[0], 2u, 0x04u); + dst_p->fake_ts_active = unpack_right_shift_u8(src_p[0], 3u, 0x08u); + dst_p->override_apps = unpack_right_shift_u8(src_p[0], 4u, 0x10u); + dst_p->override_as_mission = unpack_right_shift_u8(src_p[0], 5u, 0x20u); + dst_p->override_as_state = unpack_right_shift_u8(src_p[0], 6u, 0x40u); + dst_p->override_epsc_mode = unpack_right_shift_u8(src_p[0], 7u, 0x80u); + dst_p->override_pdu_ac_cooling_enable = unpack_right_shift_u8(src_p[1], 0u, 0x01u); + dst_p->override_pdu_acu_enable = unpack_right_shift_u8(src_p[1], 1u, 0x02u); + dst_p->override_pdu_drs_enable = unpack_right_shift_u8(src_p[1], 2u, 0x04u); + dst_p->override_pdu_epsc_enable = unpack_right_shift_u8(src_p[1], 3u, 0x08u); + dst_p->override_pdu_heartbeat = unpack_right_shift_u8(src_p[1], 4u, 0x10u); + dst_p->override_pdu_lidar_enable = unpack_right_shift_u8(src_p[1], 5u, 0x20u); + dst_p->override_pdu_pn_v1_enable = unpack_right_shift_u8(src_p[1], 6u, 0x40u); + dst_p->override_pdu_pn_v2_enable = unpack_right_shift_u8(src_p[1], 7u, 0x80u); + dst_p->override_pdu_ts_cooling_enable = unpack_right_shift_u8(src_p[2], 0u, 0x01u); + dst_p->override_power_map = unpack_right_shift_u8(src_p[2], 1u, 0x02u); + dst_p->override_tc_parameter = unpack_right_shift_u8(src_p[2], 2u, 0x04u); + dst_p->override_torque_input = unpack_right_shift_u8(src_p[2], 3u, 0x08u); + + return (0); +} + +int can1_override_laptop_init(struct can1_override_laptop_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_override_laptop_t)); + + return 0; +} + +uint8_t can1_override_laptop_fake_r2_d_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_fake_r2_d_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_fake_r2_d_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_laptop_fake_soundbox_emergency_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_fake_soundbox_emergency_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_fake_soundbox_emergency_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_laptop_fake_soundbox_r2_d_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_fake_soundbox_r2_d_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_fake_soundbox_r2_d_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_laptop_fake_ts_active_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_fake_ts_active_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_fake_ts_active_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_laptop_override_apps_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_override_apps_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_override_apps_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_laptop_override_as_mission_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_override_as_mission_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_override_as_mission_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_laptop_override_as_state_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_override_as_state_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_override_as_state_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_laptop_override_epsc_mode_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_override_epsc_mode_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_override_epsc_mode_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_laptop_override_pdu_ac_cooling_enable_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_override_pdu_ac_cooling_enable_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_override_pdu_ac_cooling_enable_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_laptop_override_pdu_acu_enable_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_override_pdu_acu_enable_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_override_pdu_acu_enable_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_laptop_override_pdu_drs_enable_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_override_pdu_drs_enable_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_override_pdu_drs_enable_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_laptop_override_pdu_epsc_enable_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_override_pdu_epsc_enable_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_override_pdu_epsc_enable_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_laptop_override_pdu_heartbeat_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_override_pdu_heartbeat_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_override_pdu_heartbeat_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_laptop_override_pdu_lidar_enable_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_override_pdu_lidar_enable_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_override_pdu_lidar_enable_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_laptop_override_pdu_pn_v1_enable_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_override_pdu_pn_v1_enable_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_override_pdu_pn_v1_enable_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_laptop_override_pdu_pn_v2_enable_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_override_pdu_pn_v2_enable_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_override_pdu_pn_v2_enable_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_laptop_override_pdu_ts_cooling_enable_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_override_pdu_ts_cooling_enable_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_override_pdu_ts_cooling_enable_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_laptop_override_power_map_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_override_power_map_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_override_power_map_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_laptop_override_tc_parameter_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_override_tc_parameter_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_override_tc_parameter_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_override_laptop_override_torque_input_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_override_laptop_override_torque_input_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_override_laptop_override_torque_input_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +int can1_apps_override_pack( + uint8_t *dst_p, + const struct can1_apps_override_t *src_p, + size_t size) +{ + if (size < 5u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 5); + + dst_p[0] |= pack_left_shift_u16(src_p->apps_0_max, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->apps_0_max, 8u, 0x03u); + dst_p[1] |= pack_left_shift_u16(src_p->apps_0_min, 2u, 0xfcu); + dst_p[2] |= pack_right_shift_u16(src_p->apps_0_min, 6u, 0x0fu); + dst_p[2] |= pack_left_shift_u16(src_p->apps_1_max, 4u, 0xf0u); + dst_p[3] |= pack_right_shift_u16(src_p->apps_1_max, 4u, 0x3fu); + dst_p[3] |= pack_left_shift_u16(src_p->apps_1_min, 6u, 0xc0u); + dst_p[4] |= pack_right_shift_u16(src_p->apps_1_min, 2u, 0xffu); + + return (5); +} + +int can1_apps_override_unpack( + struct can1_apps_override_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 5u) { + return (-EINVAL); + } + + dst_p->apps_0_max = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->apps_0_max |= unpack_left_shift_u16(src_p[1], 8u, 0x03u); + dst_p->apps_0_min = unpack_right_shift_u16(src_p[1], 2u, 0xfcu); + dst_p->apps_0_min |= unpack_left_shift_u16(src_p[2], 6u, 0x0fu); + dst_p->apps_1_max = unpack_right_shift_u16(src_p[2], 4u, 0xf0u); + dst_p->apps_1_max |= unpack_left_shift_u16(src_p[3], 4u, 0x3fu); + dst_p->apps_1_min = unpack_right_shift_u16(src_p[3], 6u, 0xc0u); + dst_p->apps_1_min |= unpack_left_shift_u16(src_p[4], 2u, 0xffu); + + return (0); +} + +int can1_apps_override_init(struct can1_apps_override_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_apps_override_t)); + + return 0; +} + +uint16_t can1_apps_override_apps_0_max_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_apps_override_apps_0_max_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_apps_override_apps_0_max_is_in_range(uint16_t value) +{ + return (value <= 1023u); +} + +uint16_t can1_apps_override_apps_0_min_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_apps_override_apps_0_min_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_apps_override_apps_0_min_is_in_range(uint16_t value) +{ + return (value <= 1023u); +} + +uint16_t can1_apps_override_apps_1_max_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_apps_override_apps_1_max_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_apps_override_apps_1_max_is_in_range(uint16_t value) +{ + return (value <= 1023u); +} + +uint16_t can1_apps_override_apps_1_min_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_apps_override_apps_1_min_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_apps_override_apps_1_min_is_in_range(uint16_t value) +{ + return (value <= 1023u); +} + +int can1_ftcu_damper_pack( + uint8_t *dst_p, + const struct can1_ftcu_damper_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u16(src_p->ftcu_damper_fl, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->ftcu_damper_fl, 8u, 0xffu); + dst_p[2] |= pack_left_shift_u16(src_p->ftcu_damper_fr, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(src_p->ftcu_damper_fr, 8u, 0xffu); + dst_p[4] |= pack_left_shift_u16(src_p->ftcu_damper_rl, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u16(src_p->ftcu_damper_rl, 8u, 0xffu); + dst_p[6] |= pack_left_shift_u16(src_p->ftcu_damper_rr, 0u, 0xffu); + dst_p[7] |= pack_right_shift_u16(src_p->ftcu_damper_rr, 8u, 0xffu); + + return (8); +} + +int can1_ftcu_damper_unpack( + struct can1_ftcu_damper_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ftcu_damper_fl = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->ftcu_damper_fl |= unpack_left_shift_u16(src_p[1], 8u, 0xffu); + dst_p->ftcu_damper_fr = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + dst_p->ftcu_damper_fr |= unpack_left_shift_u16(src_p[3], 8u, 0xffu); + dst_p->ftcu_damper_rl = unpack_right_shift_u16(src_p[4], 0u, 0xffu); + dst_p->ftcu_damper_rl |= unpack_left_shift_u16(src_p[5], 8u, 0xffu); + dst_p->ftcu_damper_rr = unpack_right_shift_u16(src_p[6], 0u, 0xffu); + dst_p->ftcu_damper_rr |= unpack_left_shift_u16(src_p[7], 8u, 0xffu); + + return (0); +} + +int can1_ftcu_damper_init(struct can1_ftcu_damper_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ftcu_damper_t)); + + return 0; +} + +uint16_t can1_ftcu_damper_ftcu_damper_fl_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_ftcu_damper_ftcu_damper_fl_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_ftcu_damper_ftcu_damper_fl_is_in_range(uint16_t value) +{ + return (value <= 7500u); +} + +uint16_t can1_ftcu_damper_ftcu_damper_fr_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_ftcu_damper_ftcu_damper_fr_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_ftcu_damper_ftcu_damper_fr_is_in_range(uint16_t value) +{ + return (value <= 7500u); +} + +uint16_t can1_ftcu_damper_ftcu_damper_rl_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_ftcu_damper_ftcu_damper_rl_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_ftcu_damper_ftcu_damper_rl_is_in_range(uint16_t value) +{ + return (value <= 7500u); +} + +uint16_t can1_ftcu_damper_ftcu_damper_rr_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_ftcu_damper_ftcu_damper_rr_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_ftcu_damper_ftcu_damper_rr_is_in_range(uint16_t value) +{ + return (value <= 7500u); +} + +int can1_ftcu_param_confirm_pack( + uint8_t *dst_p, + const struct can1_ftcu_param_confirm_t *src_p, + size_t size) +{ + if (size < 1u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 1); + + dst_p[0] |= pack_left_shift_u8(src_p->ftcu_param_confirm, 0u, 0xffu); + + return (1); +} + +int can1_ftcu_param_confirm_unpack( + struct can1_ftcu_param_confirm_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 1u) { + return (-EINVAL); + } + + dst_p->ftcu_param_confirm = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + + return (0); +} + +int can1_ftcu_param_confirm_init(struct can1_ftcu_param_confirm_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ftcu_param_confirm_t)); + + return 0; +} + +uint8_t can1_ftcu_param_confirm_ftcu_param_confirm_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ftcu_param_confirm_ftcu_param_confirm_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ftcu_param_confirm_ftcu_param_confirm_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +int can1_sensornode_f_10_hz_pack( + uint8_t *dst_p, + const struct can1_sensornode_f_10_hz_t *src_p, + size_t size) +{ + if (size < 3u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 3); + + dst_p[0] |= pack_left_shift_u8(src_p->ls_l, 0u, 0x01u); + dst_p[0] |= pack_left_shift_u8(src_p->ls_r, 1u, 0x02u); + dst_p[0] |= pack_left_shift_u8(src_p->sdc_m_pre_bots, 2u, 0x04u); + dst_p[0] |= pack_left_shift_u8(src_p->sdc_m_post_ins, 3u, 0x08u); + dst_p[0] |= pack_left_shift_u8(src_p->sdc_m_post_bspd, 4u, 0x10u); + dst_p[1] |= pack_left_shift_u8(src_p->bdts_fl, 0u, 0xffu); + dst_p[2] |= pack_left_shift_u8(src_p->bdts_fr, 0u, 0xffu); + + return (3); +} + +int can1_sensornode_f_10_hz_unpack( + struct can1_sensornode_f_10_hz_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 3u) { + return (-EINVAL); + } + + dst_p->ls_l = unpack_right_shift_u8(src_p[0], 0u, 0x01u); + dst_p->ls_r = unpack_right_shift_u8(src_p[0], 1u, 0x02u); + dst_p->sdc_m_pre_bots = unpack_right_shift_u8(src_p[0], 2u, 0x04u); + dst_p->sdc_m_post_ins = unpack_right_shift_u8(src_p[0], 3u, 0x08u); + dst_p->sdc_m_post_bspd = unpack_right_shift_u8(src_p[0], 4u, 0x10u); + dst_p->bdts_fl = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->bdts_fr = unpack_right_shift_u8(src_p[2], 0u, 0xffu); + + return (0); +} + +int can1_sensornode_f_10_hz_init(struct can1_sensornode_f_10_hz_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_sensornode_f_10_hz_t)); + + return 0; +} + +uint8_t can1_sensornode_f_10_hz_ls_l_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sensornode_f_10_hz_ls_l_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sensornode_f_10_hz_ls_l_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_sensornode_f_10_hz_ls_r_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sensornode_f_10_hz_ls_r_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sensornode_f_10_hz_ls_r_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_sensornode_f_10_hz_sdc_m_pre_bots_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sensornode_f_10_hz_sdc_m_pre_bots_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sensornode_f_10_hz_sdc_m_pre_bots_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_sensornode_f_10_hz_sdc_m_post_ins_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sensornode_f_10_hz_sdc_m_post_ins_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sensornode_f_10_hz_sdc_m_post_ins_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_sensornode_f_10_hz_sdc_m_post_bspd_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sensornode_f_10_hz_sdc_m_post_bspd_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sensornode_f_10_hz_sdc_m_post_bspd_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_sensornode_f_10_hz_bdts_fl_encode(double value) +{ + return (uint8_t)(value / 2.0); +} + +double can1_sensornode_f_10_hz_bdts_fl_decode(uint8_t value) +{ + return ((double)value * 2.0); +} + +bool can1_sensornode_f_10_hz_bdts_fl_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_sensornode_f_10_hz_bdts_fr_encode(double value) +{ + return (uint8_t)(value / 2.0); +} + +double can1_sensornode_f_10_hz_bdts_fr_decode(uint8_t value) +{ + return ((double)value * 2.0); +} + +bool can1_sensornode_f_10_hz_bdts_fr_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +int can1_sensornode_f_100_hz_1_pack( + uint8_t *dst_p, + const struct can1_sensornode_f_100_hz_1_t *src_p, + size_t size) +{ + if (size < 7u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 7); + + dst_p[0] |= pack_left_shift_u8(src_p->apps_1, 0u, 0xffu); + dst_p[1] |= pack_left_shift_u8(src_p->apps_2, 0u, 0xffu); + dst_p[2] |= pack_left_shift_u8(src_p->bp_f, 0u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->sas, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->sas, 8u, 0x0fu); + dst_p[5] |= pack_left_shift_u8(src_p->wss_fl, 0u, 0xffu); + dst_p[6] |= pack_left_shift_u8(src_p->wss_fr, 0u, 0xffu); + + return (7); +} + +int can1_sensornode_f_100_hz_1_unpack( + struct can1_sensornode_f_100_hz_1_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 7u) { + return (-EINVAL); + } + + dst_p->apps_1 = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->apps_2 = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->bp_f = unpack_right_shift_u8(src_p[2], 0u, 0xffu); + dst_p->sas = unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->sas |= unpack_left_shift_u16(src_p[4], 8u, 0x0fu); + dst_p->wss_fl = unpack_right_shift_u8(src_p[5], 0u, 0xffu); + dst_p->wss_fr = unpack_right_shift_u8(src_p[6], 0u, 0xffu); + + return (0); +} + +int can1_sensornode_f_100_hz_1_init(struct can1_sensornode_f_100_hz_1_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_sensornode_f_100_hz_1_t)); + + return 0; +} + +uint8_t can1_sensornode_f_100_hz_1_apps_1_encode(double value) +{ + return (uint8_t)(value / 0.00392157); +} + +double can1_sensornode_f_100_hz_1_apps_1_decode(uint8_t value) +{ + return ((double)value * 0.00392157); +} + +bool can1_sensornode_f_100_hz_1_apps_1_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_sensornode_f_100_hz_1_apps_2_encode(double value) +{ + return (uint8_t)(value / 0.00392157); +} + +double can1_sensornode_f_100_hz_1_apps_2_decode(uint8_t value) +{ + return ((double)value * 0.00392157); +} + +bool can1_sensornode_f_100_hz_1_apps_2_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_sensornode_f_100_hz_1_bp_f_encode(double value) +{ + return (uint8_t)(value / 2.0); +} + +double can1_sensornode_f_100_hz_1_bp_f_decode(uint8_t value) +{ + return ((double)value * 2.0); +} + +bool can1_sensornode_f_100_hz_1_bp_f_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_sensornode_f_100_hz_1_sas_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_sensornode_f_100_hz_1_sas_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_sensornode_f_100_hz_1_sas_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint8_t can1_sensornode_f_100_hz_1_wss_fl_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sensornode_f_100_hz_1_wss_fl_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sensornode_f_100_hz_1_wss_fl_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_sensornode_f_100_hz_1_wss_fr_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sensornode_f_100_hz_1_wss_fr_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sensornode_f_100_hz_1_wss_fr_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +int can1_sensornode_f_100_hz_2_pack( + uint8_t *dst_p, + const struct can1_sensornode_f_100_hz_2_t *src_p, + size_t size) +{ + if (size < 3u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 3); + + dst_p[0] |= pack_left_shift_u16(src_p->ds_fl, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->ds_fl, 8u, 0x0fu); + dst_p[1] |= pack_left_shift_u16(src_p->ds_fr, 4u, 0xf0u); + dst_p[2] |= pack_right_shift_u16(src_p->ds_fr, 4u, 0xffu); + + return (3); +} + +int can1_sensornode_f_100_hz_2_unpack( + struct can1_sensornode_f_100_hz_2_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 3u) { + return (-EINVAL); + } + + dst_p->ds_fl = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->ds_fl |= unpack_left_shift_u16(src_p[1], 8u, 0x0fu); + dst_p->ds_fr = unpack_right_shift_u16(src_p[1], 4u, 0xf0u); + dst_p->ds_fr |= unpack_left_shift_u16(src_p[2], 4u, 0xffu); + + return (0); +} + +int can1_sensornode_f_100_hz_2_init(struct can1_sensornode_f_100_hz_2_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_sensornode_f_100_hz_2_t)); + + return 0; +} + +uint16_t can1_sensornode_f_100_hz_2_ds_fl_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_sensornode_f_100_hz_2_ds_fl_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_sensornode_f_100_hz_2_ds_fl_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint16_t can1_sensornode_f_100_hz_2_ds_fr_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_sensornode_f_100_hz_2_ds_fr_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_sensornode_f_100_hz_2_ds_fr_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +int can1_sensornode_f_1k_hz_pack( + uint8_t *dst_p, + const struct can1_sensornode_f_1k_hz_t *src_p, + size_t size) +{ + if (size < 3u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 3); + + dst_p[0] |= pack_left_shift_u16(src_p->sls_fl, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->sls_fl, 8u, 0x0fu); + dst_p[1] |= pack_left_shift_u16(src_p->sls_fr, 4u, 0xf0u); + dst_p[2] |= pack_right_shift_u16(src_p->sls_fr, 4u, 0xffu); + + return (3); +} + +int can1_sensornode_f_1k_hz_unpack( + struct can1_sensornode_f_1k_hz_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 3u) { + return (-EINVAL); + } + + dst_p->sls_fl = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->sls_fl |= unpack_left_shift_u16(src_p[1], 8u, 0x0fu); + dst_p->sls_fr = unpack_right_shift_u16(src_p[1], 4u, 0xf0u); + dst_p->sls_fr |= unpack_left_shift_u16(src_p[2], 4u, 0xffu); + + return (0); +} + +int can1_sensornode_f_1k_hz_init(struct can1_sensornode_f_1k_hz_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_sensornode_f_1k_hz_t)); + + return 0; +} + +uint16_t can1_sensornode_f_1k_hz_sls_fl_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_sensornode_f_1k_hz_sls_fl_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_sensornode_f_1k_hz_sls_fl_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint16_t can1_sensornode_f_1k_hz_sls_fr_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_sensornode_f_1k_hz_sls_fr_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_sensornode_f_1k_hz_sls_fr_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +int can1_sensornode_r_10_hz_pack( + uint8_t *dst_p, + const struct can1_sensornode_r_10_hz_t *src_p, + size_t size) +{ + if (size < 7u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 7); + + dst_p[0] |= pack_left_shift_u8(src_p->ext_ts_on, 0u, 0x01u); + dst_p[0] |= pack_left_shift_u8(src_p->sdc_m_pre_tsms, 1u, 0x02u); + dst_p[0] |= pack_left_shift_u8(src_p->sdc_m_post_tsms, 2u, 0x04u); + dst_p[1] |= pack_left_shift_u8(src_p->bdts_rl, 0u, 0xffu); + dst_p[2] |= pack_left_shift_u8(src_p->bdts_rr, 0u, 0xffu); + dst_p[3] |= pack_left_shift_u8(src_p->wt_bat, 0u, 0xffu); + dst_p[4] |= pack_left_shift_u8(src_p->wt_dt, 0u, 0xffu); + dst_p[5] |= pack_left_shift_u8(src_p->wp_bat, 0u, 0xffu); + dst_p[6] |= pack_left_shift_u8(src_p->wp_dt, 0u, 0xffu); + + return (7); +} + +int can1_sensornode_r_10_hz_unpack( + struct can1_sensornode_r_10_hz_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 7u) { + return (-EINVAL); + } + + dst_p->ext_ts_on = unpack_right_shift_u8(src_p[0], 0u, 0x01u); + dst_p->sdc_m_pre_tsms = unpack_right_shift_u8(src_p[0], 1u, 0x02u); + dst_p->sdc_m_post_tsms = unpack_right_shift_u8(src_p[0], 2u, 0x04u); + dst_p->bdts_rl = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->bdts_rr = unpack_right_shift_u8(src_p[2], 0u, 0xffu); + dst_p->wt_bat = unpack_right_shift_u8(src_p[3], 0u, 0xffu); + dst_p->wt_dt = unpack_right_shift_u8(src_p[4], 0u, 0xffu); + dst_p->wp_bat = unpack_right_shift_u8(src_p[5], 0u, 0xffu); + dst_p->wp_dt = unpack_right_shift_u8(src_p[6], 0u, 0xffu); + + return (0); +} + +int can1_sensornode_r_10_hz_init(struct can1_sensornode_r_10_hz_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_sensornode_r_10_hz_t)); + + return 0; +} + +uint8_t can1_sensornode_r_10_hz_ext_ts_on_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sensornode_r_10_hz_ext_ts_on_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sensornode_r_10_hz_ext_ts_on_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_sensornode_r_10_hz_sdc_m_pre_tsms_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sensornode_r_10_hz_sdc_m_pre_tsms_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sensornode_r_10_hz_sdc_m_pre_tsms_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_sensornode_r_10_hz_sdc_m_post_tsms_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sensornode_r_10_hz_sdc_m_post_tsms_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sensornode_r_10_hz_sdc_m_post_tsms_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_sensornode_r_10_hz_bdts_rl_encode(double value) +{ + return (uint8_t)(value / 2.0); +} + +double can1_sensornode_r_10_hz_bdts_rl_decode(uint8_t value) +{ + return ((double)value * 2.0); +} + +bool can1_sensornode_r_10_hz_bdts_rl_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_sensornode_r_10_hz_bdts_rr_encode(double value) +{ + return (uint8_t)(value / 2.0); +} + +double can1_sensornode_r_10_hz_bdts_rr_decode(uint8_t value) +{ + return ((double)value * 2.0); +} + +bool can1_sensornode_r_10_hz_bdts_rr_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_sensornode_r_10_hz_wt_bat_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sensornode_r_10_hz_wt_bat_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sensornode_r_10_hz_wt_bat_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_sensornode_r_10_hz_wt_dt_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sensornode_r_10_hz_wt_dt_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sensornode_r_10_hz_wt_dt_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_sensornode_r_10_hz_wp_bat_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sensornode_r_10_hz_wp_bat_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sensornode_r_10_hz_wp_bat_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_sensornode_r_10_hz_wp_dt_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sensornode_r_10_hz_wp_dt_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sensornode_r_10_hz_wp_dt_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +int can1_sensornode_r_100_hz_pack( + uint8_t *dst_p, + const struct can1_sensornode_r_100_hz_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u8(src_p->ebs_aps_1, 0u, 0xffu); + dst_p[1] |= pack_left_shift_u8(src_p->ebs_aps_2, 0u, 0xffu); + dst_p[2] |= pack_left_shift_u8(src_p->bp_r, 0u, 0xffu); + dst_p[3] |= pack_left_shift_u8(src_p->wss_rl, 0u, 0xffu); + dst_p[4] |= pack_left_shift_u8(src_p->wss_rr, 0u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ds_rl, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ds_rl, 8u, 0x0fu); + dst_p[6] |= pack_left_shift_u16(src_p->ds_rr, 4u, 0xf0u); + dst_p[7] |= pack_right_shift_u16(src_p->ds_rr, 4u, 0xffu); + + return (8); +} + +int can1_sensornode_r_100_hz_unpack( + struct can1_sensornode_r_100_hz_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ebs_aps_1 = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->ebs_aps_2 = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->bp_r = unpack_right_shift_u8(src_p[2], 0u, 0xffu); + dst_p->wss_rl = unpack_right_shift_u8(src_p[3], 0u, 0xffu); + dst_p->wss_rr = unpack_right_shift_u8(src_p[4], 0u, 0xffu); + dst_p->ds_rl = unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ds_rl |= unpack_left_shift_u16(src_p[6], 8u, 0x0fu); + dst_p->ds_rr = unpack_right_shift_u16(src_p[6], 4u, 0xf0u); + dst_p->ds_rr |= unpack_left_shift_u16(src_p[7], 4u, 0xffu); + + return (0); +} + +int can1_sensornode_r_100_hz_init(struct can1_sensornode_r_100_hz_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_sensornode_r_100_hz_t)); + + return 0; +} + +uint8_t can1_sensornode_r_100_hz_ebs_aps_1_encode(double value) +{ + return (uint8_t)(value / 0.1); +} + +double can1_sensornode_r_100_hz_ebs_aps_1_decode(uint8_t value) +{ + return ((double)value * 0.1); +} + +bool can1_sensornode_r_100_hz_ebs_aps_1_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_sensornode_r_100_hz_ebs_aps_2_encode(double value) +{ + return (uint8_t)(value / 0.1); +} + +double can1_sensornode_r_100_hz_ebs_aps_2_decode(uint8_t value) +{ + return ((double)value * 0.1); +} + +bool can1_sensornode_r_100_hz_ebs_aps_2_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_sensornode_r_100_hz_bp_r_encode(double value) +{ + return (uint8_t)(value / 2.0); +} + +double can1_sensornode_r_100_hz_bp_r_decode(uint8_t value) +{ + return ((double)value * 2.0); +} + +bool can1_sensornode_r_100_hz_bp_r_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_sensornode_r_100_hz_wss_rl_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sensornode_r_100_hz_wss_rl_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sensornode_r_100_hz_wss_rl_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_sensornode_r_100_hz_wss_rr_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_sensornode_r_100_hz_wss_rr_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_sensornode_r_100_hz_wss_rr_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_sensornode_r_100_hz_ds_rl_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_sensornode_r_100_hz_ds_rl_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_sensornode_r_100_hz_ds_rl_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint16_t can1_sensornode_r_100_hz_ds_rr_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_sensornode_r_100_hz_ds_rr_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_sensornode_r_100_hz_ds_rr_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +int can1_sensornode_r_1k_hz_pack( + uint8_t *dst_p, + const struct can1_sensornode_r_1k_hz_t *src_p, + size_t size) +{ + if (size < 3u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 3); + + dst_p[0] |= pack_left_shift_u16(src_p->sls_rl, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->sls_rl, 8u, 0x0fu); + dst_p[1] |= pack_left_shift_u16(src_p->sls_rr, 4u, 0xf0u); + dst_p[2] |= pack_right_shift_u16(src_p->sls_rr, 4u, 0xffu); + + return (3); +} + +int can1_sensornode_r_1k_hz_unpack( + struct can1_sensornode_r_1k_hz_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 3u) { + return (-EINVAL); + } + + dst_p->sls_rl = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->sls_rl |= unpack_left_shift_u16(src_p[1], 8u, 0x0fu); + dst_p->sls_rr = unpack_right_shift_u16(src_p[1], 4u, 0xf0u); + dst_p->sls_rr |= unpack_left_shift_u16(src_p[2], 4u, 0xffu); + + return (0); +} + +int can1_sensornode_r_1k_hz_init(struct can1_sensornode_r_1k_hz_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_sensornode_r_1k_hz_t)); + + return 0; +} + +uint16_t can1_sensornode_r_1k_hz_sls_rl_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_sensornode_r_1k_hz_sls_rl_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_sensornode_r_1k_hz_sls_rl_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint16_t can1_sensornode_r_1k_hz_sls_rr_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_sensornode_r_1k_hz_sls_rr_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_sensornode_r_1k_hz_sls_rr_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +int can1_pwm_duty_cycle_pack( + uint8_t *dst_p, + const struct can1_pwm_duty_cycle_t *src_p, + size_t size) +{ + if (size < 7u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 7); + + dst_p[0] |= pack_left_shift_u8(src_p->dc_drs, 0u, 0xffu); + dst_p[1] |= pack_left_shift_u8(src_p->dc_assi_y, 0u, 0xffu); + dst_p[2] |= pack_left_shift_u8(src_p->dc_assi_b, 0u, 0xffu); + dst_p[3] |= pack_left_shift_u8(src_p->dc_bl, 0u, 0xffu); + dst_p[4] |= pack_left_shift_u8(src_p->dc_fans_dt, 0u, 0xffu); + dst_p[5] |= pack_left_shift_u8(src_p->dc_fans_bat, 0u, 0xffu); + dst_p[6] |= pack_left_shift_u8(src_p->dc_sbx, 0u, 0xffu); + + return (7); +} + +int can1_pwm_duty_cycle_unpack( + struct can1_pwm_duty_cycle_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 7u) { + return (-EINVAL); + } + + dst_p->dc_drs = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->dc_assi_y = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->dc_assi_b = unpack_right_shift_u8(src_p[2], 0u, 0xffu); + dst_p->dc_bl = unpack_right_shift_u8(src_p[3], 0u, 0xffu); + dst_p->dc_fans_dt = unpack_right_shift_u8(src_p[4], 0u, 0xffu); + dst_p->dc_fans_bat = unpack_right_shift_u8(src_p[5], 0u, 0xffu); + dst_p->dc_sbx = unpack_right_shift_u8(src_p[6], 0u, 0xffu); + + return (0); +} + +int can1_pwm_duty_cycle_init(struct can1_pwm_duty_cycle_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_pwm_duty_cycle_t)); + + return 0; +} + +uint8_t can1_pwm_duty_cycle_dc_drs_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pwm_duty_cycle_dc_drs_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pwm_duty_cycle_dc_drs_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_pwm_duty_cycle_dc_assi_y_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pwm_duty_cycle_dc_assi_y_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pwm_duty_cycle_dc_assi_y_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_pwm_duty_cycle_dc_assi_b_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pwm_duty_cycle_dc_assi_b_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pwm_duty_cycle_dc_assi_b_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_pwm_duty_cycle_dc_bl_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pwm_duty_cycle_dc_bl_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pwm_duty_cycle_dc_bl_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_pwm_duty_cycle_dc_fans_dt_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pwm_duty_cycle_dc_fans_dt_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pwm_duty_cycle_dc_fans_dt_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_pwm_duty_cycle_dc_fans_bat_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pwm_duty_cycle_dc_fans_bat_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pwm_duty_cycle_dc_fans_bat_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_pwm_duty_cycle_dc_sbx_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pwm_duty_cycle_dc_sbx_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pwm_duty_cycle_dc_sbx_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +int can1_pwm_config_pack( + uint8_t *dst_p, + const struct can1_pwm_config_t *src_p, + size_t size) +{ + if (size < 6u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 6); + + dst_p[0] |= pack_left_shift_u16(src_p->freq_pwm1_drs_lighting, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->freq_pwm1_drs_lighting, 8u, 0xffu); + dst_p[2] |= pack_left_shift_u16(src_p->freq_pwm3_fans, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(src_p->freq_pwm3_fans, 8u, 0xffu); + dst_p[4] |= pack_left_shift_u16(src_p->freq_pwm2_sbx, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u16(src_p->freq_pwm2_sbx, 8u, 0xffu); + + return (6); +} + +int can1_pwm_config_unpack( + struct can1_pwm_config_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 6u) { + return (-EINVAL); + } + + dst_p->freq_pwm1_drs_lighting = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->freq_pwm1_drs_lighting |= unpack_left_shift_u16(src_p[1], 8u, 0xffu); + dst_p->freq_pwm3_fans = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + dst_p->freq_pwm3_fans |= unpack_left_shift_u16(src_p[3], 8u, 0xffu); + dst_p->freq_pwm2_sbx = unpack_right_shift_u16(src_p[4], 0u, 0xffu); + dst_p->freq_pwm2_sbx |= unpack_left_shift_u16(src_p[5], 8u, 0xffu); + + return (0); +} + +int can1_pwm_config_init(struct can1_pwm_config_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_pwm_config_t)); + + return 0; +} + +uint16_t can1_pwm_config_freq_pwm1_drs_lighting_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_pwm_config_freq_pwm1_drs_lighting_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_pwm_config_freq_pwm1_drs_lighting_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_pwm_config_freq_pwm3_fans_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_pwm_config_freq_pwm3_fans_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_pwm_config_freq_pwm3_fans_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_pwm_config_freq_pwm2_sbx_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_pwm_config_freq_pwm2_sbx_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_pwm_config_freq_pwm2_sbx_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +int can1_dashboard_in_pack( + uint8_t *dst_p, + const struct can1_dashboard_in_t *src_p, + size_t size) +{ + if (size < 1u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 1); + + dst_p[0] |= pack_left_shift_u8(src_p->dashboard_r2_d_button, 0u, 0x01u); + dst_p[0] |= pack_left_shift_u8(src_p->dashboard_ts_activate_button, 1u, 0x02u); + dst_p[0] |= pack_left_shift_u8(src_p->dashboard_race_key, 2u, 0x04u); + dst_p[0] |= pack_left_shift_u8(src_p->dashboard_sdc_in, 3u, 0x08u); + dst_p[0] |= pack_left_shift_u8(src_p->dashboard_sdc_out, 4u, 0x10u); + + return (1); +} + +int can1_dashboard_in_unpack( + struct can1_dashboard_in_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 1u) { + return (-EINVAL); + } + + dst_p->dashboard_r2_d_button = unpack_right_shift_u8(src_p[0], 0u, 0x01u); + dst_p->dashboard_ts_activate_button = unpack_right_shift_u8(src_p[0], 1u, 0x02u); + dst_p->dashboard_race_key = unpack_right_shift_u8(src_p[0], 2u, 0x04u); + dst_p->dashboard_sdc_in = unpack_right_shift_u8(src_p[0], 3u, 0x08u); + dst_p->dashboard_sdc_out = unpack_right_shift_u8(src_p[0], 4u, 0x10u); + + return (0); +} + +int can1_dashboard_in_init(struct can1_dashboard_in_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_dashboard_in_t)); + + return 0; +} + +uint8_t can1_dashboard_in_dashboard_r2_d_button_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_dashboard_in_dashboard_r2_d_button_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_dashboard_in_dashboard_r2_d_button_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_dashboard_in_dashboard_ts_activate_button_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_dashboard_in_dashboard_ts_activate_button_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_dashboard_in_dashboard_ts_activate_button_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_dashboard_in_dashboard_race_key_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_dashboard_in_dashboard_race_key_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_dashboard_in_dashboard_race_key_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_dashboard_in_dashboard_sdc_in_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_dashboard_in_dashboard_sdc_in_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_dashboard_in_dashboard_sdc_in_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_dashboard_in_dashboard_sdc_out_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_dashboard_in_dashboard_sdc_out_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_dashboard_in_dashboard_sdc_out_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +int can1_ams_slave1_status_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_status_t *src_p, + size_t size) +{ + uint16_t ams_slave_status_max_temp; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u8(src_p->ams_slave_status_error, 7u, 0x80u); + dst_p[0] |= pack_left_shift_u8(src_p->ams_slave_status_id, 0u, 0x7fu); + dst_p[1] |= pack_left_shift_u8(src_p->ams_slave_status_temp_sensor, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_status_min_cell_volt, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_status_min_cell_volt, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_status_max_cell_volt, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_status_max_cell_volt, 0u, 0xffu); + ams_slave_status_max_temp = (uint16_t)src_p->ams_slave_status_max_temp; + dst_p[6] |= pack_right_shift_u16(ams_slave_status_max_temp, 8u, 0x0fu); + dst_p[7] |= pack_left_shift_u16(ams_slave_status_max_temp, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave1_status_unpack( + struct can1_ams_slave1_status_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint16_t ams_slave_status_max_temp; + + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_status_error = unpack_right_shift_u8(src_p[0], 7u, 0x80u); + dst_p->ams_slave_status_id = unpack_right_shift_u8(src_p[0], 0u, 0x7fu); + dst_p->ams_slave_status_temp_sensor = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ams_slave_status_min_cell_volt = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_status_min_cell_volt |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_status_max_cell_volt = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_status_max_cell_volt |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + ams_slave_status_max_temp = unpack_left_shift_u16(src_p[6], 8u, 0x0fu); + ams_slave_status_max_temp |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + if ((ams_slave_status_max_temp & (1u << 11)) != 0u) { + ams_slave_status_max_temp |= 0xf000u; + } + + dst_p->ams_slave_status_max_temp = (int16_t)ams_slave_status_max_temp; + + return (0); +} + +int can1_ams_slave1_status_init(struct can1_ams_slave1_status_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave1_status_t)); + + return 0; +} + +uint8_t can1_ams_slave1_status_ams_slave_status_error_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_slave1_status_ams_slave_status_error_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave1_status_ams_slave_status_error_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_ams_slave1_status_ams_slave_status_id_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_slave1_status_ams_slave_status_id_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave1_status_ams_slave_status_id_is_in_range(uint8_t value) +{ + return (value <= 127u); +} + +uint8_t can1_ams_slave1_status_ams_slave_status_temp_sensor_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_slave1_status_ams_slave_status_temp_sensor_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave1_status_ams_slave_status_temp_sensor_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint16_t can1_ams_slave1_status_ams_slave_status_min_cell_volt_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave1_status_ams_slave_status_min_cell_volt_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave1_status_ams_slave_status_min_cell_volt_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave1_status_ams_slave_status_max_cell_volt_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave1_status_ams_slave_status_max_cell_volt_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave1_status_ams_slave_status_max_cell_volt_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int16_t can1_ams_slave1_status_ams_slave_status_max_temp_encode(double value) +{ + return (int16_t)(value / 0.0625); +} + +double can1_ams_slave1_status_ams_slave_status_max_temp_decode(int16_t value) +{ + return ((double)value * 0.0625); +} + +bool can1_ams_slave1_status_ams_slave_status_max_temp_is_in_range(int16_t value) +{ + return ((value >= 0) && (value <= 16)); +} + +int can1_ams_slave2_log0_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log0_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v0, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v0, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v1, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v1, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v2, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v2, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v3, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v3, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave2_log0_unpack( + struct can1_ams_slave2_log0_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v0 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v0 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v1 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v1 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v2 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v2 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v3 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v3 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave2_log0_init(struct can1_ams_slave2_log0_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave2_log0_t)); + + return 0; +} + +uint16_t can1_ams_slave2_log0_ams_slave_id_v0_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave2_log0_ams_slave_id_v0_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave2_log0_ams_slave_id_v0_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave2_log0_ams_slave_id_v1_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave2_log0_ams_slave_id_v1_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave2_log0_ams_slave_id_v1_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave2_log0_ams_slave_id_v2_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave2_log0_ams_slave_id_v2_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave2_log0_ams_slave_id_v2_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave2_log0_ams_slave_id_v3_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave2_log0_ams_slave_id_v3_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave2_log0_ams_slave_id_v3_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave2_log1_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log1_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v4, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v4, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v5, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v5, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v6, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v6, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v7, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v7, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave2_log1_unpack( + struct can1_ams_slave2_log1_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v4 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v4 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v5 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v5 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v6 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v6 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v7 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v7 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave2_log1_init(struct can1_ams_slave2_log1_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave2_log1_t)); + + return 0; +} + +uint16_t can1_ams_slave2_log1_ams_slave_id_v4_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave2_log1_ams_slave_id_v4_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave2_log1_ams_slave_id_v4_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave2_log1_ams_slave_id_v5_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave2_log1_ams_slave_id_v5_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave2_log1_ams_slave_id_v5_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave2_log1_ams_slave_id_v6_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave2_log1_ams_slave_id_v6_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave2_log1_ams_slave_id_v6_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave2_log1_ams_slave_id_v7_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave2_log1_ams_slave_id_v7_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave2_log1_ams_slave_id_v7_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave2_log2_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log2_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v8, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v8, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v9, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v9, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v10, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v10, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v11, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v11, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave2_log2_unpack( + struct can1_ams_slave2_log2_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v8 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v8 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v9 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v9 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v10 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v10 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v11 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v11 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave2_log2_init(struct can1_ams_slave2_log2_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave2_log2_t)); + + return 0; +} + +uint16_t can1_ams_slave2_log2_ams_slave_id_v8_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave2_log2_ams_slave_id_v8_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave2_log2_ams_slave_id_v8_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave2_log2_ams_slave_id_v9_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave2_log2_ams_slave_id_v9_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave2_log2_ams_slave_id_v9_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave2_log2_ams_slave_id_v10_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave2_log2_ams_slave_id_v10_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave2_log2_ams_slave_id_v10_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave2_log2_ams_slave_id_v11_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave2_log2_ams_slave_id_v11_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave2_log2_ams_slave_id_v11_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave2_log3_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log3_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v12, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v12, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v13, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v13, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v14, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v14, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v15, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v15, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave2_log3_unpack( + struct can1_ams_slave2_log3_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v12 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v12 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v13 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v13 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v14 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v14 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v15 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v15 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave2_log3_init(struct can1_ams_slave2_log3_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave2_log3_t)); + + return 0; +} + +uint16_t can1_ams_slave2_log3_ams_slave_id_v12_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave2_log3_ams_slave_id_v12_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave2_log3_ams_slave_id_v12_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave2_log3_ams_slave_id_v13_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave2_log3_ams_slave_id_v13_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave2_log3_ams_slave_id_v13_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave2_log3_ams_slave_id_v14_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave2_log3_ams_slave_id_v14_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave2_log3_ams_slave_id_v14_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave2_log3_ams_slave_id_v15_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave2_log3_ams_slave_id_v15_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave2_log3_ams_slave_id_v15_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave2_log4_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log4_t *src_p, + size_t size) +{ + if (size < 6u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 6); + + dst_p[2] |= pack_right_shift_u32(src_p->ams_slave_id_failed_sensors, 24u, 0xffu); + dst_p[3] |= pack_right_shift_u32(src_p->ams_slave_id_failed_sensors, 16u, 0xffu); + dst_p[4] |= pack_right_shift_u32(src_p->ams_slave_id_failed_sensors, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u32(src_p->ams_slave_id_failed_sensors, 0u, 0xffu); + + return (6); +} + +int can1_ams_slave2_log4_unpack( + struct can1_ams_slave2_log4_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 6u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_failed_sensors = unpack_left_shift_u32(src_p[2], 24u, 0xffu); + dst_p->ams_slave_id_failed_sensors |= unpack_left_shift_u32(src_p[3], 16u, 0xffu); + dst_p->ams_slave_id_failed_sensors |= unpack_left_shift_u32(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_failed_sensors |= unpack_right_shift_u32(src_p[5], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave2_log4_init(struct can1_ams_slave2_log4_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave2_log4_t)); + + return 0; +} + +uint32_t can1_ams_slave2_log4_ams_slave_id_failed_sensors_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_ams_slave2_log4_ams_slave_id_failed_sensors_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_ams_slave2_log4_ams_slave_id_failed_sensors_is_in_range(uint32_t value) +{ + (void)value; + + return (true); +} + +int can1_ams_slave2_log5_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log5_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t0; + uint8_t ams_slave_id_t1; + uint8_t ams_slave_id_t2; + uint8_t ams_slave_id_t3; + uint8_t ams_slave_id_t4; + uint8_t ams_slave_id_t5; + uint8_t ams_slave_id_t6; + uint8_t ams_slave_id_t7; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + ams_slave_id_t0 = (uint8_t)src_p->ams_slave_id_t0; + dst_p[0] |= pack_left_shift_u8(ams_slave_id_t0, 0u, 0xffu); + ams_slave_id_t1 = (uint8_t)src_p->ams_slave_id_t1; + dst_p[1] |= pack_left_shift_u8(ams_slave_id_t1, 0u, 0xffu); + ams_slave_id_t2 = (uint8_t)src_p->ams_slave_id_t2; + dst_p[2] |= pack_left_shift_u8(ams_slave_id_t2, 0u, 0xffu); + ams_slave_id_t3 = (uint8_t)src_p->ams_slave_id_t3; + dst_p[3] |= pack_left_shift_u8(ams_slave_id_t3, 0u, 0xffu); + ams_slave_id_t4 = (uint8_t)src_p->ams_slave_id_t4; + dst_p[4] |= pack_left_shift_u8(ams_slave_id_t4, 0u, 0xffu); + ams_slave_id_t5 = (uint8_t)src_p->ams_slave_id_t5; + dst_p[5] |= pack_left_shift_u8(ams_slave_id_t5, 0u, 0xffu); + ams_slave_id_t6 = (uint8_t)src_p->ams_slave_id_t6; + dst_p[6] |= pack_left_shift_u8(ams_slave_id_t6, 0u, 0xffu); + ams_slave_id_t7 = (uint8_t)src_p->ams_slave_id_t7; + dst_p[7] |= pack_left_shift_u8(ams_slave_id_t7, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave2_log5_unpack( + struct can1_ams_slave2_log5_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t0; + uint8_t ams_slave_id_t1; + uint8_t ams_slave_id_t2; + uint8_t ams_slave_id_t3; + uint8_t ams_slave_id_t4; + uint8_t ams_slave_id_t5; + uint8_t ams_slave_id_t6; + uint8_t ams_slave_id_t7; + + if (size < 8u) { + return (-EINVAL); + } + + ams_slave_id_t0 = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->ams_slave_id_t0 = (int8_t)ams_slave_id_t0; + ams_slave_id_t1 = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_t1 = (int8_t)ams_slave_id_t1; + ams_slave_id_t2 = unpack_right_shift_u8(src_p[2], 0u, 0xffu); + dst_p->ams_slave_id_t2 = (int8_t)ams_slave_id_t2; + ams_slave_id_t3 = unpack_right_shift_u8(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_t3 = (int8_t)ams_slave_id_t3; + ams_slave_id_t4 = unpack_right_shift_u8(src_p[4], 0u, 0xffu); + dst_p->ams_slave_id_t4 = (int8_t)ams_slave_id_t4; + ams_slave_id_t5 = unpack_right_shift_u8(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_t5 = (int8_t)ams_slave_id_t5; + ams_slave_id_t6 = unpack_right_shift_u8(src_p[6], 0u, 0xffu); + dst_p->ams_slave_id_t6 = (int8_t)ams_slave_id_t6; + ams_slave_id_t7 = unpack_right_shift_u8(src_p[7], 0u, 0xffu); + dst_p->ams_slave_id_t7 = (int8_t)ams_slave_id_t7; + + return (0); +} + +int can1_ams_slave2_log5_init(struct can1_ams_slave2_log5_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave2_log5_t)); + + return 0; +} + +int8_t can1_ams_slave2_log5_ams_slave_id_t0_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave2_log5_ams_slave_id_t0_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave2_log5_ams_slave_id_t0_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave2_log5_ams_slave_id_t1_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave2_log5_ams_slave_id_t1_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave2_log5_ams_slave_id_t1_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave2_log5_ams_slave_id_t2_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave2_log5_ams_slave_id_t2_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave2_log5_ams_slave_id_t2_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave2_log5_ams_slave_id_t3_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave2_log5_ams_slave_id_t3_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave2_log5_ams_slave_id_t3_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave2_log5_ams_slave_id_t4_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave2_log5_ams_slave_id_t4_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave2_log5_ams_slave_id_t4_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave2_log5_ams_slave_id_t5_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave2_log5_ams_slave_id_t5_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave2_log5_ams_slave_id_t5_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave2_log5_ams_slave_id_t6_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave2_log5_ams_slave_id_t6_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave2_log5_ams_slave_id_t6_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave2_log5_ams_slave_id_t7_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave2_log5_ams_slave_id_t7_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave2_log5_ams_slave_id_t7_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int can1_ams_slave5_log6_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log6_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t8; + uint8_t ams_slave_id_t9; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + ams_slave_id_t8 = (uint8_t)src_p->ams_slave_id_t8; + dst_p[0] |= pack_left_shift_u8(ams_slave_id_t8, 0u, 0xffu); + ams_slave_id_t9 = (uint8_t)src_p->ams_slave_id_t9; + dst_p[1] |= pack_left_shift_u8(ams_slave_id_t9, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave5_log6_unpack( + struct can1_ams_slave5_log6_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t8; + uint8_t ams_slave_id_t9; + + if (size < 8u) { + return (-EINVAL); + } + + ams_slave_id_t8 = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->ams_slave_id_t8 = (int8_t)ams_slave_id_t8; + ams_slave_id_t9 = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_t9 = (int8_t)ams_slave_id_t9; + + return (0); +} + +int can1_ams_slave5_log6_init(struct can1_ams_slave5_log6_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave5_log6_t)); + + return 0; +} + +int8_t can1_ams_slave5_log6_ams_slave_id_t8_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave5_log6_ams_slave_id_t8_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave5_log6_ams_slave_id_t8_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave5_log6_ams_slave_id_t9_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave5_log6_ams_slave_id_t9_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave5_log6_ams_slave_id_t9_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int can1_ams_slave4_log6_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log6_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t8; + uint8_t ams_slave_id_t9; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + ams_slave_id_t8 = (uint8_t)src_p->ams_slave_id_t8; + dst_p[0] |= pack_left_shift_u8(ams_slave_id_t8, 0u, 0xffu); + ams_slave_id_t9 = (uint8_t)src_p->ams_slave_id_t9; + dst_p[1] |= pack_left_shift_u8(ams_slave_id_t9, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave4_log6_unpack( + struct can1_ams_slave4_log6_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t8; + uint8_t ams_slave_id_t9; + + if (size < 8u) { + return (-EINVAL); + } + + ams_slave_id_t8 = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->ams_slave_id_t8 = (int8_t)ams_slave_id_t8; + ams_slave_id_t9 = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_t9 = (int8_t)ams_slave_id_t9; + + return (0); +} + +int can1_ams_slave4_log6_init(struct can1_ams_slave4_log6_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave4_log6_t)); + + return 0; +} + +int8_t can1_ams_slave4_log6_ams_slave_id_t8_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave4_log6_ams_slave_id_t8_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave4_log6_ams_slave_id_t8_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave4_log6_ams_slave_id_t9_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave4_log6_ams_slave_id_t9_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave4_log6_ams_slave_id_t9_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int can1_ams_slave3_log6_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log6_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t8; + uint8_t ams_slave_id_t9; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + ams_slave_id_t8 = (uint8_t)src_p->ams_slave_id_t8; + dst_p[0] |= pack_left_shift_u8(ams_slave_id_t8, 0u, 0xffu); + ams_slave_id_t9 = (uint8_t)src_p->ams_slave_id_t9; + dst_p[1] |= pack_left_shift_u8(ams_slave_id_t9, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave3_log6_unpack( + struct can1_ams_slave3_log6_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t8; + uint8_t ams_slave_id_t9; + + if (size < 8u) { + return (-EINVAL); + } + + ams_slave_id_t8 = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->ams_slave_id_t8 = (int8_t)ams_slave_id_t8; + ams_slave_id_t9 = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_t9 = (int8_t)ams_slave_id_t9; + + return (0); +} + +int can1_ams_slave3_log6_init(struct can1_ams_slave3_log6_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave3_log6_t)); + + return 0; +} + +int8_t can1_ams_slave3_log6_ams_slave_id_t8_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave3_log6_ams_slave_id_t8_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave3_log6_ams_slave_id_t8_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave3_log6_ams_slave_id_t9_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave3_log6_ams_slave_id_t9_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave3_log6_ams_slave_id_t9_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int can1_ams_slave2_log6_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_log6_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t8; + uint8_t ams_slave_id_t9; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + ams_slave_id_t8 = (uint8_t)src_p->ams_slave_id_t8; + dst_p[0] |= pack_left_shift_u8(ams_slave_id_t8, 0u, 0xffu); + ams_slave_id_t9 = (uint8_t)src_p->ams_slave_id_t9; + dst_p[1] |= pack_left_shift_u8(ams_slave_id_t9, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave2_log6_unpack( + struct can1_ams_slave2_log6_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t8; + uint8_t ams_slave_id_t9; + + if (size < 8u) { + return (-EINVAL); + } + + ams_slave_id_t8 = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->ams_slave_id_t8 = (int8_t)ams_slave_id_t8; + ams_slave_id_t9 = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_t9 = (int8_t)ams_slave_id_t9; + + return (0); +} + +int can1_ams_slave2_log6_init(struct can1_ams_slave2_log6_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave2_log6_t)); + + return 0; +} + +int8_t can1_ams_slave2_log6_ams_slave_id_t8_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave2_log6_ams_slave_id_t8_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave2_log6_ams_slave_id_t8_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave2_log6_ams_slave_id_t9_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave2_log6_ams_slave_id_t9_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave2_log6_ams_slave_id_t9_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int can1_ams_slave1_log6_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log6_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t8; + uint8_t ams_slave_id_t9; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + ams_slave_id_t8 = (uint8_t)src_p->ams_slave_id_t8; + dst_p[0] |= pack_left_shift_u8(ams_slave_id_t8, 0u, 0xffu); + ams_slave_id_t9 = (uint8_t)src_p->ams_slave_id_t9; + dst_p[1] |= pack_left_shift_u8(ams_slave_id_t9, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave1_log6_unpack( + struct can1_ams_slave1_log6_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t8; + uint8_t ams_slave_id_t9; + + if (size < 8u) { + return (-EINVAL); + } + + ams_slave_id_t8 = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->ams_slave_id_t8 = (int8_t)ams_slave_id_t8; + ams_slave_id_t9 = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_t9 = (int8_t)ams_slave_id_t9; + + return (0); +} + +int can1_ams_slave1_log6_init(struct can1_ams_slave1_log6_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave1_log6_t)); + + return 0; +} + +int8_t can1_ams_slave1_log6_ams_slave_id_t8_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave1_log6_ams_slave_id_t8_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave1_log6_ams_slave_id_t8_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave1_log6_ams_slave_id_t9_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave1_log6_ams_slave_id_t9_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave1_log6_ams_slave_id_t9_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int can1_ams_slave5_log5_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log5_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t0; + uint8_t ams_slave_id_t1; + uint8_t ams_slave_id_t2; + uint8_t ams_slave_id_t3; + uint8_t ams_slave_id_t4; + uint8_t ams_slave_id_t5; + uint8_t ams_slave_id_t6; + uint8_t ams_slave_id_t7; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + ams_slave_id_t0 = (uint8_t)src_p->ams_slave_id_t0; + dst_p[0] |= pack_left_shift_u8(ams_slave_id_t0, 0u, 0xffu); + ams_slave_id_t1 = (uint8_t)src_p->ams_slave_id_t1; + dst_p[1] |= pack_left_shift_u8(ams_slave_id_t1, 0u, 0xffu); + ams_slave_id_t2 = (uint8_t)src_p->ams_slave_id_t2; + dst_p[2] |= pack_left_shift_u8(ams_slave_id_t2, 0u, 0xffu); + ams_slave_id_t3 = (uint8_t)src_p->ams_slave_id_t3; + dst_p[3] |= pack_left_shift_u8(ams_slave_id_t3, 0u, 0xffu); + ams_slave_id_t4 = (uint8_t)src_p->ams_slave_id_t4; + dst_p[4] |= pack_left_shift_u8(ams_slave_id_t4, 0u, 0xffu); + ams_slave_id_t5 = (uint8_t)src_p->ams_slave_id_t5; + dst_p[5] |= pack_left_shift_u8(ams_slave_id_t5, 0u, 0xffu); + ams_slave_id_t6 = (uint8_t)src_p->ams_slave_id_t6; + dst_p[6] |= pack_left_shift_u8(ams_slave_id_t6, 0u, 0xffu); + ams_slave_id_t7 = (uint8_t)src_p->ams_slave_id_t7; + dst_p[7] |= pack_left_shift_u8(ams_slave_id_t7, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave5_log5_unpack( + struct can1_ams_slave5_log5_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t0; + uint8_t ams_slave_id_t1; + uint8_t ams_slave_id_t2; + uint8_t ams_slave_id_t3; + uint8_t ams_slave_id_t4; + uint8_t ams_slave_id_t5; + uint8_t ams_slave_id_t6; + uint8_t ams_slave_id_t7; + + if (size < 8u) { + return (-EINVAL); + } + + ams_slave_id_t0 = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->ams_slave_id_t0 = (int8_t)ams_slave_id_t0; + ams_slave_id_t1 = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_t1 = (int8_t)ams_slave_id_t1; + ams_slave_id_t2 = unpack_right_shift_u8(src_p[2], 0u, 0xffu); + dst_p->ams_slave_id_t2 = (int8_t)ams_slave_id_t2; + ams_slave_id_t3 = unpack_right_shift_u8(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_t3 = (int8_t)ams_slave_id_t3; + ams_slave_id_t4 = unpack_right_shift_u8(src_p[4], 0u, 0xffu); + dst_p->ams_slave_id_t4 = (int8_t)ams_slave_id_t4; + ams_slave_id_t5 = unpack_right_shift_u8(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_t5 = (int8_t)ams_slave_id_t5; + ams_slave_id_t6 = unpack_right_shift_u8(src_p[6], 0u, 0xffu); + dst_p->ams_slave_id_t6 = (int8_t)ams_slave_id_t6; + ams_slave_id_t7 = unpack_right_shift_u8(src_p[7], 0u, 0xffu); + dst_p->ams_slave_id_t7 = (int8_t)ams_slave_id_t7; + + return (0); +} + +int can1_ams_slave5_log5_init(struct can1_ams_slave5_log5_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave5_log5_t)); + + return 0; +} + +int8_t can1_ams_slave5_log5_ams_slave_id_t0_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave5_log5_ams_slave_id_t0_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave5_log5_ams_slave_id_t0_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave5_log5_ams_slave_id_t1_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave5_log5_ams_slave_id_t1_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave5_log5_ams_slave_id_t1_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave5_log5_ams_slave_id_t2_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave5_log5_ams_slave_id_t2_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave5_log5_ams_slave_id_t2_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave5_log5_ams_slave_id_t3_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave5_log5_ams_slave_id_t3_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave5_log5_ams_slave_id_t3_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave5_log5_ams_slave_id_t4_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave5_log5_ams_slave_id_t4_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave5_log5_ams_slave_id_t4_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave5_log5_ams_slave_id_t5_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave5_log5_ams_slave_id_t5_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave5_log5_ams_slave_id_t5_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave5_log5_ams_slave_id_t6_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave5_log5_ams_slave_id_t6_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave5_log5_ams_slave_id_t6_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave5_log5_ams_slave_id_t7_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave5_log5_ams_slave_id_t7_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave5_log5_ams_slave_id_t7_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int can1_ams_slave4_log5_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log5_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t0; + uint8_t ams_slave_id_t1; + uint8_t ams_slave_id_t2; + uint8_t ams_slave_id_t3; + uint8_t ams_slave_id_t4; + uint8_t ams_slave_id_t5; + uint8_t ams_slave_id_t6; + uint8_t ams_slave_id_t7; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + ams_slave_id_t0 = (uint8_t)src_p->ams_slave_id_t0; + dst_p[0] |= pack_left_shift_u8(ams_slave_id_t0, 0u, 0xffu); + ams_slave_id_t1 = (uint8_t)src_p->ams_slave_id_t1; + dst_p[1] |= pack_left_shift_u8(ams_slave_id_t1, 0u, 0xffu); + ams_slave_id_t2 = (uint8_t)src_p->ams_slave_id_t2; + dst_p[2] |= pack_left_shift_u8(ams_slave_id_t2, 0u, 0xffu); + ams_slave_id_t3 = (uint8_t)src_p->ams_slave_id_t3; + dst_p[3] |= pack_left_shift_u8(ams_slave_id_t3, 0u, 0xffu); + ams_slave_id_t4 = (uint8_t)src_p->ams_slave_id_t4; + dst_p[4] |= pack_left_shift_u8(ams_slave_id_t4, 0u, 0xffu); + ams_slave_id_t5 = (uint8_t)src_p->ams_slave_id_t5; + dst_p[5] |= pack_left_shift_u8(ams_slave_id_t5, 0u, 0xffu); + ams_slave_id_t6 = (uint8_t)src_p->ams_slave_id_t6; + dst_p[6] |= pack_left_shift_u8(ams_slave_id_t6, 0u, 0xffu); + ams_slave_id_t7 = (uint8_t)src_p->ams_slave_id_t7; + dst_p[7] |= pack_left_shift_u8(ams_slave_id_t7, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave4_log5_unpack( + struct can1_ams_slave4_log5_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t0; + uint8_t ams_slave_id_t1; + uint8_t ams_slave_id_t2; + uint8_t ams_slave_id_t3; + uint8_t ams_slave_id_t4; + uint8_t ams_slave_id_t5; + uint8_t ams_slave_id_t6; + uint8_t ams_slave_id_t7; + + if (size < 8u) { + return (-EINVAL); + } + + ams_slave_id_t0 = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->ams_slave_id_t0 = (int8_t)ams_slave_id_t0; + ams_slave_id_t1 = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_t1 = (int8_t)ams_slave_id_t1; + ams_slave_id_t2 = unpack_right_shift_u8(src_p[2], 0u, 0xffu); + dst_p->ams_slave_id_t2 = (int8_t)ams_slave_id_t2; + ams_slave_id_t3 = unpack_right_shift_u8(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_t3 = (int8_t)ams_slave_id_t3; + ams_slave_id_t4 = unpack_right_shift_u8(src_p[4], 0u, 0xffu); + dst_p->ams_slave_id_t4 = (int8_t)ams_slave_id_t4; + ams_slave_id_t5 = unpack_right_shift_u8(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_t5 = (int8_t)ams_slave_id_t5; + ams_slave_id_t6 = unpack_right_shift_u8(src_p[6], 0u, 0xffu); + dst_p->ams_slave_id_t6 = (int8_t)ams_slave_id_t6; + ams_slave_id_t7 = unpack_right_shift_u8(src_p[7], 0u, 0xffu); + dst_p->ams_slave_id_t7 = (int8_t)ams_slave_id_t7; + + return (0); +} + +int can1_ams_slave4_log5_init(struct can1_ams_slave4_log5_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave4_log5_t)); + + return 0; +} + +int8_t can1_ams_slave4_log5_ams_slave_id_t0_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave4_log5_ams_slave_id_t0_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave4_log5_ams_slave_id_t0_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave4_log5_ams_slave_id_t1_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave4_log5_ams_slave_id_t1_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave4_log5_ams_slave_id_t1_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave4_log5_ams_slave_id_t2_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave4_log5_ams_slave_id_t2_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave4_log5_ams_slave_id_t2_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave4_log5_ams_slave_id_t3_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave4_log5_ams_slave_id_t3_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave4_log5_ams_slave_id_t3_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave4_log5_ams_slave_id_t4_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave4_log5_ams_slave_id_t4_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave4_log5_ams_slave_id_t4_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave4_log5_ams_slave_id_t5_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave4_log5_ams_slave_id_t5_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave4_log5_ams_slave_id_t5_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave4_log5_ams_slave_id_t6_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave4_log5_ams_slave_id_t6_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave4_log5_ams_slave_id_t6_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave4_log5_ams_slave_id_t7_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave4_log5_ams_slave_id_t7_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave4_log5_ams_slave_id_t7_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int can1_ams_slave3_log5_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log5_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t0; + uint8_t ams_slave_id_t1; + uint8_t ams_slave_id_t2; + uint8_t ams_slave_id_t3; + uint8_t ams_slave_id_t4; + uint8_t ams_slave_id_t5; + uint8_t ams_slave_id_t6; + uint8_t ams_slave_id_t7; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + ams_slave_id_t0 = (uint8_t)src_p->ams_slave_id_t0; + dst_p[0] |= pack_left_shift_u8(ams_slave_id_t0, 0u, 0xffu); + ams_slave_id_t1 = (uint8_t)src_p->ams_slave_id_t1; + dst_p[1] |= pack_left_shift_u8(ams_slave_id_t1, 0u, 0xffu); + ams_slave_id_t2 = (uint8_t)src_p->ams_slave_id_t2; + dst_p[2] |= pack_left_shift_u8(ams_slave_id_t2, 0u, 0xffu); + ams_slave_id_t3 = (uint8_t)src_p->ams_slave_id_t3; + dst_p[3] |= pack_left_shift_u8(ams_slave_id_t3, 0u, 0xffu); + ams_slave_id_t4 = (uint8_t)src_p->ams_slave_id_t4; + dst_p[4] |= pack_left_shift_u8(ams_slave_id_t4, 0u, 0xffu); + ams_slave_id_t5 = (uint8_t)src_p->ams_slave_id_t5; + dst_p[5] |= pack_left_shift_u8(ams_slave_id_t5, 0u, 0xffu); + ams_slave_id_t6 = (uint8_t)src_p->ams_slave_id_t6; + dst_p[6] |= pack_left_shift_u8(ams_slave_id_t6, 0u, 0xffu); + ams_slave_id_t7 = (uint8_t)src_p->ams_slave_id_t7; + dst_p[7] |= pack_left_shift_u8(ams_slave_id_t7, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave3_log5_unpack( + struct can1_ams_slave3_log5_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t0; + uint8_t ams_slave_id_t1; + uint8_t ams_slave_id_t2; + uint8_t ams_slave_id_t3; + uint8_t ams_slave_id_t4; + uint8_t ams_slave_id_t5; + uint8_t ams_slave_id_t6; + uint8_t ams_slave_id_t7; + + if (size < 8u) { + return (-EINVAL); + } + + ams_slave_id_t0 = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->ams_slave_id_t0 = (int8_t)ams_slave_id_t0; + ams_slave_id_t1 = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_t1 = (int8_t)ams_slave_id_t1; + ams_slave_id_t2 = unpack_right_shift_u8(src_p[2], 0u, 0xffu); + dst_p->ams_slave_id_t2 = (int8_t)ams_slave_id_t2; + ams_slave_id_t3 = unpack_right_shift_u8(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_t3 = (int8_t)ams_slave_id_t3; + ams_slave_id_t4 = unpack_right_shift_u8(src_p[4], 0u, 0xffu); + dst_p->ams_slave_id_t4 = (int8_t)ams_slave_id_t4; + ams_slave_id_t5 = unpack_right_shift_u8(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_t5 = (int8_t)ams_slave_id_t5; + ams_slave_id_t6 = unpack_right_shift_u8(src_p[6], 0u, 0xffu); + dst_p->ams_slave_id_t6 = (int8_t)ams_slave_id_t6; + ams_slave_id_t7 = unpack_right_shift_u8(src_p[7], 0u, 0xffu); + dst_p->ams_slave_id_t7 = (int8_t)ams_slave_id_t7; + + return (0); +} + +int can1_ams_slave3_log5_init(struct can1_ams_slave3_log5_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave3_log5_t)); + + return 0; +} + +int8_t can1_ams_slave3_log5_ams_slave_id_t0_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave3_log5_ams_slave_id_t0_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave3_log5_ams_slave_id_t0_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave3_log5_ams_slave_id_t1_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave3_log5_ams_slave_id_t1_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave3_log5_ams_slave_id_t1_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave3_log5_ams_slave_id_t2_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave3_log5_ams_slave_id_t2_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave3_log5_ams_slave_id_t2_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave3_log5_ams_slave_id_t3_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave3_log5_ams_slave_id_t3_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave3_log5_ams_slave_id_t3_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave3_log5_ams_slave_id_t4_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave3_log5_ams_slave_id_t4_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave3_log5_ams_slave_id_t4_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave3_log5_ams_slave_id_t5_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave3_log5_ams_slave_id_t5_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave3_log5_ams_slave_id_t5_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave3_log5_ams_slave_id_t6_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave3_log5_ams_slave_id_t6_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave3_log5_ams_slave_id_t6_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave3_log5_ams_slave_id_t7_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave3_log5_ams_slave_id_t7_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave3_log5_ams_slave_id_t7_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int can1_ams_slave1_log5_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log5_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t0; + uint8_t ams_slave_id_t1; + uint8_t ams_slave_id_t2; + uint8_t ams_slave_id_t3; + uint8_t ams_slave_id_t4; + uint8_t ams_slave_id_t5; + uint8_t ams_slave_id_t6; + uint8_t ams_slave_id_t7; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + ams_slave_id_t0 = (uint8_t)src_p->ams_slave_id_t0; + dst_p[0] |= pack_left_shift_u8(ams_slave_id_t0, 0u, 0xffu); + ams_slave_id_t1 = (uint8_t)src_p->ams_slave_id_t1; + dst_p[1] |= pack_left_shift_u8(ams_slave_id_t1, 0u, 0xffu); + ams_slave_id_t2 = (uint8_t)src_p->ams_slave_id_t2; + dst_p[2] |= pack_left_shift_u8(ams_slave_id_t2, 0u, 0xffu); + ams_slave_id_t3 = (uint8_t)src_p->ams_slave_id_t3; + dst_p[3] |= pack_left_shift_u8(ams_slave_id_t3, 0u, 0xffu); + ams_slave_id_t4 = (uint8_t)src_p->ams_slave_id_t4; + dst_p[4] |= pack_left_shift_u8(ams_slave_id_t4, 0u, 0xffu); + ams_slave_id_t5 = (uint8_t)src_p->ams_slave_id_t5; + dst_p[5] |= pack_left_shift_u8(ams_slave_id_t5, 0u, 0xffu); + ams_slave_id_t6 = (uint8_t)src_p->ams_slave_id_t6; + dst_p[6] |= pack_left_shift_u8(ams_slave_id_t6, 0u, 0xffu); + ams_slave_id_t7 = (uint8_t)src_p->ams_slave_id_t7; + dst_p[7] |= pack_left_shift_u8(ams_slave_id_t7, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave1_log5_unpack( + struct can1_ams_slave1_log5_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t0; + uint8_t ams_slave_id_t1; + uint8_t ams_slave_id_t2; + uint8_t ams_slave_id_t3; + uint8_t ams_slave_id_t4; + uint8_t ams_slave_id_t5; + uint8_t ams_slave_id_t6; + uint8_t ams_slave_id_t7; + + if (size < 8u) { + return (-EINVAL); + } + + ams_slave_id_t0 = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->ams_slave_id_t0 = (int8_t)ams_slave_id_t0; + ams_slave_id_t1 = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_t1 = (int8_t)ams_slave_id_t1; + ams_slave_id_t2 = unpack_right_shift_u8(src_p[2], 0u, 0xffu); + dst_p->ams_slave_id_t2 = (int8_t)ams_slave_id_t2; + ams_slave_id_t3 = unpack_right_shift_u8(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_t3 = (int8_t)ams_slave_id_t3; + ams_slave_id_t4 = unpack_right_shift_u8(src_p[4], 0u, 0xffu); + dst_p->ams_slave_id_t4 = (int8_t)ams_slave_id_t4; + ams_slave_id_t5 = unpack_right_shift_u8(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_t5 = (int8_t)ams_slave_id_t5; + ams_slave_id_t6 = unpack_right_shift_u8(src_p[6], 0u, 0xffu); + dst_p->ams_slave_id_t6 = (int8_t)ams_slave_id_t6; + ams_slave_id_t7 = unpack_right_shift_u8(src_p[7], 0u, 0xffu); + dst_p->ams_slave_id_t7 = (int8_t)ams_slave_id_t7; + + return (0); +} + +int can1_ams_slave1_log5_init(struct can1_ams_slave1_log5_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave1_log5_t)); + + return 0; +} + +int8_t can1_ams_slave1_log5_ams_slave_id_t0_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave1_log5_ams_slave_id_t0_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave1_log5_ams_slave_id_t0_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave1_log5_ams_slave_id_t1_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave1_log5_ams_slave_id_t1_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave1_log5_ams_slave_id_t1_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave1_log5_ams_slave_id_t2_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave1_log5_ams_slave_id_t2_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave1_log5_ams_slave_id_t2_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave1_log5_ams_slave_id_t3_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave1_log5_ams_slave_id_t3_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave1_log5_ams_slave_id_t3_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave1_log5_ams_slave_id_t4_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave1_log5_ams_slave_id_t4_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave1_log5_ams_slave_id_t4_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave1_log5_ams_slave_id_t5_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave1_log5_ams_slave_id_t5_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave1_log5_ams_slave_id_t5_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave1_log5_ams_slave_id_t6_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave1_log5_ams_slave_id_t6_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave1_log5_ams_slave_id_t6_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave1_log5_ams_slave_id_t7_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave1_log5_ams_slave_id_t7_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave1_log5_ams_slave_id_t7_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int can1_ams_slave5_log4_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log4_t *src_p, + size_t size) +{ + if (size < 6u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 6); + + dst_p[2] |= pack_right_shift_u32(src_p->ams_slave_id_failed_sensors, 24u, 0xffu); + dst_p[3] |= pack_right_shift_u32(src_p->ams_slave_id_failed_sensors, 16u, 0xffu); + dst_p[4] |= pack_right_shift_u32(src_p->ams_slave_id_failed_sensors, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u32(src_p->ams_slave_id_failed_sensors, 0u, 0xffu); + + return (6); +} + +int can1_ams_slave5_log4_unpack( + struct can1_ams_slave5_log4_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 6u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_failed_sensors = unpack_left_shift_u32(src_p[2], 24u, 0xffu); + dst_p->ams_slave_id_failed_sensors |= unpack_left_shift_u32(src_p[3], 16u, 0xffu); + dst_p->ams_slave_id_failed_sensors |= unpack_left_shift_u32(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_failed_sensors |= unpack_right_shift_u32(src_p[5], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave5_log4_init(struct can1_ams_slave5_log4_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave5_log4_t)); + + return 0; +} + +uint32_t can1_ams_slave5_log4_ams_slave_id_failed_sensors_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_ams_slave5_log4_ams_slave_id_failed_sensors_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_ams_slave5_log4_ams_slave_id_failed_sensors_is_in_range(uint32_t value) +{ + (void)value; + + return (true); +} + +int can1_ams_slave4_log4_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log4_t *src_p, + size_t size) +{ + if (size < 6u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 6); + + dst_p[2] |= pack_right_shift_u32(src_p->ams_slave_id_failed_sensors, 24u, 0xffu); + dst_p[3] |= pack_right_shift_u32(src_p->ams_slave_id_failed_sensors, 16u, 0xffu); + dst_p[4] |= pack_right_shift_u32(src_p->ams_slave_id_failed_sensors, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u32(src_p->ams_slave_id_failed_sensors, 0u, 0xffu); + + return (6); +} + +int can1_ams_slave4_log4_unpack( + struct can1_ams_slave4_log4_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 6u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_failed_sensors = unpack_left_shift_u32(src_p[2], 24u, 0xffu); + dst_p->ams_slave_id_failed_sensors |= unpack_left_shift_u32(src_p[3], 16u, 0xffu); + dst_p->ams_slave_id_failed_sensors |= unpack_left_shift_u32(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_failed_sensors |= unpack_right_shift_u32(src_p[5], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave4_log4_init(struct can1_ams_slave4_log4_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave4_log4_t)); + + return 0; +} + +uint32_t can1_ams_slave4_log4_ams_slave_id_failed_sensors_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_ams_slave4_log4_ams_slave_id_failed_sensors_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_ams_slave4_log4_ams_slave_id_failed_sensors_is_in_range(uint32_t value) +{ + (void)value; + + return (true); +} + +int can1_ams_slave3_log4_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log4_t *src_p, + size_t size) +{ + if (size < 6u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 6); + + dst_p[2] |= pack_right_shift_u32(src_p->ams_slave_id_failed_sensors, 24u, 0xffu); + dst_p[3] |= pack_right_shift_u32(src_p->ams_slave_id_failed_sensors, 16u, 0xffu); + dst_p[4] |= pack_right_shift_u32(src_p->ams_slave_id_failed_sensors, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u32(src_p->ams_slave_id_failed_sensors, 0u, 0xffu); + + return (6); +} + +int can1_ams_slave3_log4_unpack( + struct can1_ams_slave3_log4_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 6u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_failed_sensors = unpack_left_shift_u32(src_p[2], 24u, 0xffu); + dst_p->ams_slave_id_failed_sensors |= unpack_left_shift_u32(src_p[3], 16u, 0xffu); + dst_p->ams_slave_id_failed_sensors |= unpack_left_shift_u32(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_failed_sensors |= unpack_right_shift_u32(src_p[5], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave3_log4_init(struct can1_ams_slave3_log4_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave3_log4_t)); + + return 0; +} + +uint32_t can1_ams_slave3_log4_ams_slave_id_failed_sensors_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_ams_slave3_log4_ams_slave_id_failed_sensors_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_ams_slave3_log4_ams_slave_id_failed_sensors_is_in_range(uint32_t value) +{ + (void)value; + + return (true); +} + +int can1_ams_slave1_log4_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log4_t *src_p, + size_t size) +{ + if (size < 6u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 6); + + dst_p[2] |= pack_right_shift_u32(src_p->ams_slave_id_failed_sensors, 24u, 0xffu); + dst_p[3] |= pack_right_shift_u32(src_p->ams_slave_id_failed_sensors, 16u, 0xffu); + dst_p[4] |= pack_right_shift_u32(src_p->ams_slave_id_failed_sensors, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u32(src_p->ams_slave_id_failed_sensors, 0u, 0xffu); + + return (6); +} + +int can1_ams_slave1_log4_unpack( + struct can1_ams_slave1_log4_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 6u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_failed_sensors = unpack_left_shift_u32(src_p[2], 24u, 0xffu); + dst_p->ams_slave_id_failed_sensors |= unpack_left_shift_u32(src_p[3], 16u, 0xffu); + dst_p->ams_slave_id_failed_sensors |= unpack_left_shift_u32(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_failed_sensors |= unpack_right_shift_u32(src_p[5], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave1_log4_init(struct can1_ams_slave1_log4_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave1_log4_t)); + + return 0; +} + +uint32_t can1_ams_slave1_log4_ams_slave_id_failed_sensors_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_ams_slave1_log4_ams_slave_id_failed_sensors_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_ams_slave1_log4_ams_slave_id_failed_sensors_is_in_range(uint32_t value) +{ + (void)value; + + return (true); +} + +int can1_ams_slave5_log3_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log3_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v12, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v12, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v13, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v13, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v14, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v14, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v15, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v15, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave5_log3_unpack( + struct can1_ams_slave5_log3_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v12 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v12 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v13 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v13 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v14 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v14 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v15 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v15 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave5_log3_init(struct can1_ams_slave5_log3_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave5_log3_t)); + + return 0; +} + +uint16_t can1_ams_slave5_log3_ams_slave_id_v12_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave5_log3_ams_slave_id_v12_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave5_log3_ams_slave_id_v12_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave5_log3_ams_slave_id_v13_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave5_log3_ams_slave_id_v13_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave5_log3_ams_slave_id_v13_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave5_log3_ams_slave_id_v14_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave5_log3_ams_slave_id_v14_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave5_log3_ams_slave_id_v14_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave5_log3_ams_slave_id_v15_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave5_log3_ams_slave_id_v15_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave5_log3_ams_slave_id_v15_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave4_log3_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log3_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v12, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v12, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v13, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v13, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v14, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v14, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v15, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v15, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave4_log3_unpack( + struct can1_ams_slave4_log3_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v12 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v12 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v13 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v13 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v14 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v14 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v15 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v15 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave4_log3_init(struct can1_ams_slave4_log3_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave4_log3_t)); + + return 0; +} + +uint16_t can1_ams_slave4_log3_ams_slave_id_v12_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave4_log3_ams_slave_id_v12_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave4_log3_ams_slave_id_v12_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave4_log3_ams_slave_id_v13_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave4_log3_ams_slave_id_v13_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave4_log3_ams_slave_id_v13_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave4_log3_ams_slave_id_v14_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave4_log3_ams_slave_id_v14_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave4_log3_ams_slave_id_v14_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave4_log3_ams_slave_id_v15_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave4_log3_ams_slave_id_v15_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave4_log3_ams_slave_id_v15_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave3_log3_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log3_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v12, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v12, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v13, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v13, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v14, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v14, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v15, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v15, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave3_log3_unpack( + struct can1_ams_slave3_log3_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v12 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v12 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v13 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v13 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v14 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v14 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v15 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v15 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave3_log3_init(struct can1_ams_slave3_log3_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave3_log3_t)); + + return 0; +} + +uint16_t can1_ams_slave3_log3_ams_slave_id_v12_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave3_log3_ams_slave_id_v12_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave3_log3_ams_slave_id_v12_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave3_log3_ams_slave_id_v13_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave3_log3_ams_slave_id_v13_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave3_log3_ams_slave_id_v13_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave3_log3_ams_slave_id_v14_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave3_log3_ams_slave_id_v14_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave3_log3_ams_slave_id_v14_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave3_log3_ams_slave_id_v15_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave3_log3_ams_slave_id_v15_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave3_log3_ams_slave_id_v15_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave1_log3_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log3_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v12, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v12, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v13, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v13, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v14, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v14, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v15, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v15, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave1_log3_unpack( + struct can1_ams_slave1_log3_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v12 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v12 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v13 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v13 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v14 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v14 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v15 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v15 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave1_log3_init(struct can1_ams_slave1_log3_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave1_log3_t)); + + return 0; +} + +uint16_t can1_ams_slave1_log3_ams_slave_id_v12_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave1_log3_ams_slave_id_v12_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave1_log3_ams_slave_id_v12_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave1_log3_ams_slave_id_v13_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave1_log3_ams_slave_id_v13_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave1_log3_ams_slave_id_v13_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave1_log3_ams_slave_id_v14_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave1_log3_ams_slave_id_v14_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave1_log3_ams_slave_id_v14_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave1_log3_ams_slave_id_v15_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave1_log3_ams_slave_id_v15_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave1_log3_ams_slave_id_v15_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave5_log2_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log2_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v8, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v8, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v9, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v9, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v10, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v10, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v11, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v11, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave5_log2_unpack( + struct can1_ams_slave5_log2_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v8 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v8 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v9 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v9 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v10 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v10 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v11 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v11 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave5_log2_init(struct can1_ams_slave5_log2_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave5_log2_t)); + + return 0; +} + +uint16_t can1_ams_slave5_log2_ams_slave_id_v8_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave5_log2_ams_slave_id_v8_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave5_log2_ams_slave_id_v8_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave5_log2_ams_slave_id_v9_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave5_log2_ams_slave_id_v9_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave5_log2_ams_slave_id_v9_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave5_log2_ams_slave_id_v10_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave5_log2_ams_slave_id_v10_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave5_log2_ams_slave_id_v10_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave5_log2_ams_slave_id_v11_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave5_log2_ams_slave_id_v11_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave5_log2_ams_slave_id_v11_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave4_log2_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log2_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v8, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v8, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v9, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v9, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v10, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v10, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v11, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v11, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave4_log2_unpack( + struct can1_ams_slave4_log2_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v8 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v8 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v9 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v9 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v10 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v10 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v11 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v11 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave4_log2_init(struct can1_ams_slave4_log2_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave4_log2_t)); + + return 0; +} + +uint16_t can1_ams_slave4_log2_ams_slave_id_v8_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave4_log2_ams_slave_id_v8_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave4_log2_ams_slave_id_v8_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave4_log2_ams_slave_id_v9_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave4_log2_ams_slave_id_v9_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave4_log2_ams_slave_id_v9_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave4_log2_ams_slave_id_v10_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave4_log2_ams_slave_id_v10_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave4_log2_ams_slave_id_v10_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave4_log2_ams_slave_id_v11_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave4_log2_ams_slave_id_v11_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave4_log2_ams_slave_id_v11_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave3_log2_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log2_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v8, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v8, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v9, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v9, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v10, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v10, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v11, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v11, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave3_log2_unpack( + struct can1_ams_slave3_log2_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v8 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v8 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v9 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v9 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v10 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v10 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v11 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v11 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave3_log2_init(struct can1_ams_slave3_log2_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave3_log2_t)); + + return 0; +} + +uint16_t can1_ams_slave3_log2_ams_slave_id_v8_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave3_log2_ams_slave_id_v8_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave3_log2_ams_slave_id_v8_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave3_log2_ams_slave_id_v9_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave3_log2_ams_slave_id_v9_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave3_log2_ams_slave_id_v9_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave3_log2_ams_slave_id_v10_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave3_log2_ams_slave_id_v10_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave3_log2_ams_slave_id_v10_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave3_log2_ams_slave_id_v11_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave3_log2_ams_slave_id_v11_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave3_log2_ams_slave_id_v11_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave1_log2_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log2_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v8, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v8, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v9, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v9, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v10, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v10, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v11, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v11, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave1_log2_unpack( + struct can1_ams_slave1_log2_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v8 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v8 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v9 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v9 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v10 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v10 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v11 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v11 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave1_log2_init(struct can1_ams_slave1_log2_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave1_log2_t)); + + return 0; +} + +uint16_t can1_ams_slave1_log2_ams_slave_id_v8_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave1_log2_ams_slave_id_v8_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave1_log2_ams_slave_id_v8_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave1_log2_ams_slave_id_v9_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave1_log2_ams_slave_id_v9_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave1_log2_ams_slave_id_v9_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave1_log2_ams_slave_id_v10_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave1_log2_ams_slave_id_v10_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave1_log2_ams_slave_id_v10_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave1_log2_ams_slave_id_v11_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave1_log2_ams_slave_id_v11_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave1_log2_ams_slave_id_v11_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave5_log1_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log1_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v4, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v4, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v5, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v5, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v6, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v6, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v7, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v7, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave5_log1_unpack( + struct can1_ams_slave5_log1_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v4 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v4 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v5 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v5 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v6 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v6 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v7 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v7 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave5_log1_init(struct can1_ams_slave5_log1_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave5_log1_t)); + + return 0; +} + +uint16_t can1_ams_slave5_log1_ams_slave_id_v4_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave5_log1_ams_slave_id_v4_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave5_log1_ams_slave_id_v4_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave5_log1_ams_slave_id_v5_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave5_log1_ams_slave_id_v5_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave5_log1_ams_slave_id_v5_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave5_log1_ams_slave_id_v6_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave5_log1_ams_slave_id_v6_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave5_log1_ams_slave_id_v6_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave5_log1_ams_slave_id_v7_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave5_log1_ams_slave_id_v7_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave5_log1_ams_slave_id_v7_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave4_log1_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log1_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v4, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v4, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v5, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v5, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v6, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v6, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v7, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v7, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave4_log1_unpack( + struct can1_ams_slave4_log1_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v4 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v4 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v5 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v5 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v6 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v6 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v7 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v7 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave4_log1_init(struct can1_ams_slave4_log1_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave4_log1_t)); + + return 0; +} + +uint16_t can1_ams_slave4_log1_ams_slave_id_v4_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave4_log1_ams_slave_id_v4_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave4_log1_ams_slave_id_v4_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave4_log1_ams_slave_id_v5_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave4_log1_ams_slave_id_v5_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave4_log1_ams_slave_id_v5_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave4_log1_ams_slave_id_v6_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave4_log1_ams_slave_id_v6_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave4_log1_ams_slave_id_v6_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave4_log1_ams_slave_id_v7_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave4_log1_ams_slave_id_v7_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave4_log1_ams_slave_id_v7_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave3_log1_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log1_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v4, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v4, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v5, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v5, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v6, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v6, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v7, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v7, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave3_log1_unpack( + struct can1_ams_slave3_log1_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v4 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v4 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v5 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v5 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v6 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v6 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v7 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v7 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave3_log1_init(struct can1_ams_slave3_log1_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave3_log1_t)); + + return 0; +} + +uint16_t can1_ams_slave3_log1_ams_slave_id_v4_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave3_log1_ams_slave_id_v4_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave3_log1_ams_slave_id_v4_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave3_log1_ams_slave_id_v5_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave3_log1_ams_slave_id_v5_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave3_log1_ams_slave_id_v5_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave3_log1_ams_slave_id_v6_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave3_log1_ams_slave_id_v6_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave3_log1_ams_slave_id_v6_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave3_log1_ams_slave_id_v7_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave3_log1_ams_slave_id_v7_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave3_log1_ams_slave_id_v7_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave1_log1_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log1_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v4, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v4, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v5, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v5, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v6, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v6, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v7, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v7, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave1_log1_unpack( + struct can1_ams_slave1_log1_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v4 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v4 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v5 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v5 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v6 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v6 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v7 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v7 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave1_log1_init(struct can1_ams_slave1_log1_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave1_log1_t)); + + return 0; +} + +uint16_t can1_ams_slave1_log1_ams_slave_id_v4_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave1_log1_ams_slave_id_v4_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave1_log1_ams_slave_id_v4_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave1_log1_ams_slave_id_v5_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave1_log1_ams_slave_id_v5_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave1_log1_ams_slave_id_v5_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave1_log1_ams_slave_id_v6_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave1_log1_ams_slave_id_v6_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave1_log1_ams_slave_id_v6_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave1_log1_ams_slave_id_v7_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave1_log1_ams_slave_id_v7_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave1_log1_ams_slave_id_v7_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave5_log0_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_log0_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v0, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v0, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v1, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v1, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v2, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v2, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v3, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v3, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave5_log0_unpack( + struct can1_ams_slave5_log0_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v0 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v0 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v1 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v1 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v2 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v2 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v3 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v3 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave5_log0_init(struct can1_ams_slave5_log0_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave5_log0_t)); + + return 0; +} + +uint16_t can1_ams_slave5_log0_ams_slave_id_v0_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave5_log0_ams_slave_id_v0_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave5_log0_ams_slave_id_v0_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave5_log0_ams_slave_id_v1_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave5_log0_ams_slave_id_v1_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave5_log0_ams_slave_id_v1_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave5_log0_ams_slave_id_v2_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave5_log0_ams_slave_id_v2_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave5_log0_ams_slave_id_v2_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave5_log0_ams_slave_id_v3_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave5_log0_ams_slave_id_v3_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave5_log0_ams_slave_id_v3_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave4_log0_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_log0_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v0, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v0, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v1, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v1, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v2, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v2, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v3, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v3, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave4_log0_unpack( + struct can1_ams_slave4_log0_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v0 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v0 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v1 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v1 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v2 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v2 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v3 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v3 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave4_log0_init(struct can1_ams_slave4_log0_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave4_log0_t)); + + return 0; +} + +uint16_t can1_ams_slave4_log0_ams_slave_id_v0_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave4_log0_ams_slave_id_v0_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave4_log0_ams_slave_id_v0_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave4_log0_ams_slave_id_v1_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave4_log0_ams_slave_id_v1_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave4_log0_ams_slave_id_v1_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave4_log0_ams_slave_id_v2_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave4_log0_ams_slave_id_v2_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave4_log0_ams_slave_id_v2_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave4_log0_ams_slave_id_v3_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave4_log0_ams_slave_id_v3_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave4_log0_ams_slave_id_v3_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave3_log0_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_log0_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v0, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v0, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v1, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v1, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v2, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v2, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v3, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v3, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave3_log0_unpack( + struct can1_ams_slave3_log0_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v0 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v0 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v1 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v1 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v2 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v2 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v3 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v3 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave3_log0_init(struct can1_ams_slave3_log0_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave3_log0_t)); + + return 0; +} + +uint16_t can1_ams_slave3_log0_ams_slave_id_v0_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave3_log0_ams_slave_id_v0_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave3_log0_ams_slave_id_v0_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave3_log0_ams_slave_id_v1_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave3_log0_ams_slave_id_v1_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave3_log0_ams_slave_id_v1_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave3_log0_ams_slave_id_v2_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave3_log0_ams_slave_id_v2_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave3_log0_ams_slave_id_v2_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave3_log0_ams_slave_id_v3_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave3_log0_ams_slave_id_v3_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave3_log0_ams_slave_id_v3_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave1_log0_pack( + uint8_t *dst_p, + const struct can1_ams_slave1_log0_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v0, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v0, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v1, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v1, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v2, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v2, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v3, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v3, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave1_log0_unpack( + struct can1_ams_slave1_log0_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v0 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v0 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v1 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v1 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v2 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v2 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v3 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v3 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave1_log0_init(struct can1_ams_slave1_log0_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave1_log0_t)); + + return 0; +} + +uint16_t can1_ams_slave1_log0_ams_slave_id_v0_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave1_log0_ams_slave_id_v0_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave1_log0_ams_slave_id_v0_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave1_log0_ams_slave_id_v1_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave1_log0_ams_slave_id_v1_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave1_log0_ams_slave_id_v1_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave1_log0_ams_slave_id_v2_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave1_log0_ams_slave_id_v2_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave1_log0_ams_slave_id_v2_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave1_log0_ams_slave_id_v3_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave1_log0_ams_slave_id_v3_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave1_log0_ams_slave_id_v3_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_pdu_heartbeat_pack( + uint8_t *dst_p, + const struct can1_pdu_heartbeat_t *src_p, + size_t size) +{ + uint8_t pdu_heartbeat; + + if (size < 1u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 1); + + pdu_heartbeat = (uint8_t)src_p->pdu_heartbeat; + dst_p[0] |= pack_left_shift_u8(pdu_heartbeat, 0u, 0x01u); + + return (1); +} + +int can1_pdu_heartbeat_unpack( + struct can1_pdu_heartbeat_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint8_t pdu_heartbeat; + + if (size < 1u) { + return (-EINVAL); + } + + pdu_heartbeat = unpack_right_shift_u8(src_p[0], 0u, 0x01u); + + if ((pdu_heartbeat & (1u << 0)) != 0u) { + pdu_heartbeat |= 0xfeu; + } + + dst_p->pdu_heartbeat = (int8_t)pdu_heartbeat; + + return (0); +} + +int can1_pdu_heartbeat_init(struct can1_pdu_heartbeat_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_pdu_heartbeat_t)); + + return 0; +} + +int8_t can1_pdu_heartbeat_pdu_heartbeat_encode(double value) +{ + return (int8_t)(value); +} + +double can1_pdu_heartbeat_pdu_heartbeat_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_pdu_heartbeat_pdu_heartbeat_is_in_range(int8_t value) +{ + return ((value >= -1) && (value <= 0)); +} + +int can1_ftcu_pneumatik_pack( + uint8_t *dst_p, + const struct can1_ftcu_pneumatik_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u16(src_p->ftcu_tank_pressure_1, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->ftcu_tank_pressure_1, 8u, 0x0fu); + dst_p[2] |= pack_left_shift_u16(src_p->ftcu_tank_pressure_2, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(src_p->ftcu_tank_pressure_2, 8u, 0x0fu); + + return (8); +} + +int can1_ftcu_pneumatik_unpack( + struct can1_ftcu_pneumatik_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ftcu_tank_pressure_1 = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->ftcu_tank_pressure_1 |= unpack_left_shift_u16(src_p[1], 8u, 0x0fu); + dst_p->ftcu_tank_pressure_2 = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + dst_p->ftcu_tank_pressure_2 |= unpack_left_shift_u16(src_p[3], 8u, 0x0fu); + + return (0); +} + +int can1_ftcu_pneumatik_init(struct can1_ftcu_pneumatik_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ftcu_pneumatik_t)); + + return 0; +} + +uint16_t can1_ftcu_pneumatik_ftcu_tank_pressure_1_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_ftcu_pneumatik_ftcu_tank_pressure_1_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_ftcu_pneumatik_ftcu_tank_pressure_1_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint16_t can1_ftcu_pneumatik_ftcu_tank_pressure_2_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_ftcu_pneumatik_ftcu_tank_pressure_2_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_ftcu_pneumatik_ftcu_tank_pressure_2_is_in_range(uint16_t value) +{ + return (value <= 40950u); +} + +int can1_acu_tx_commands_pack( + uint8_t *dst_p, + const struct can1_acu_tx_commands_t *src_p, + size_t size) +{ + uint8_t abx_steering_angle_left; + uint8_t abx_steering_angle_right; + + if (size < 6u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 6); + + dst_p[0] |= pack_left_shift_u8(src_p->abx_speed_fl, 0u, 0xffu); + dst_p[1] |= pack_left_shift_u8(src_p->abx_speed_fr, 0u, 0xffu); + dst_p[2] |= pack_left_shift_u8(src_p->abx_speed_rl, 0u, 0xffu); + dst_p[3] |= pack_left_shift_u8(src_p->abx_speed_rr, 0u, 0xffu); + abx_steering_angle_left = (uint8_t)src_p->abx_steering_angle_left; + dst_p[4] |= pack_left_shift_u8(abx_steering_angle_left, 0u, 0xffu); + abx_steering_angle_right = (uint8_t)src_p->abx_steering_angle_right; + dst_p[5] |= pack_left_shift_u8(abx_steering_angle_right, 0u, 0xffu); + + return (6); +} + +int can1_acu_tx_commands_unpack( + struct can1_acu_tx_commands_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint8_t abx_steering_angle_left; + uint8_t abx_steering_angle_right; + + if (size < 6u) { + return (-EINVAL); + } + + dst_p->abx_speed_fl = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->abx_speed_fr = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->abx_speed_rl = unpack_right_shift_u8(src_p[2], 0u, 0xffu); + dst_p->abx_speed_rr = unpack_right_shift_u8(src_p[3], 0u, 0xffu); + abx_steering_angle_left = unpack_right_shift_u8(src_p[4], 0u, 0xffu); + dst_p->abx_steering_angle_left = (int8_t)abx_steering_angle_left; + abx_steering_angle_right = unpack_right_shift_u8(src_p[5], 0u, 0xffu); + dst_p->abx_steering_angle_right = (int8_t)abx_steering_angle_right; + + return (0); +} + +int can1_acu_tx_commands_init(struct can1_acu_tx_commands_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_acu_tx_commands_t)); + + return 0; +} + +uint8_t can1_acu_tx_commands_abx_speed_fl_encode(double value) +{ + return (uint8_t)(value / 0.2); +} + +double can1_acu_tx_commands_abx_speed_fl_decode(uint8_t value) +{ + return ((double)value * 0.2); +} + +bool can1_acu_tx_commands_abx_speed_fl_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_acu_tx_commands_abx_speed_fr_encode(double value) +{ + return (uint8_t)(value / 0.2); +} + +double can1_acu_tx_commands_abx_speed_fr_decode(uint8_t value) +{ + return ((double)value * 0.2); +} + +bool can1_acu_tx_commands_abx_speed_fr_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_acu_tx_commands_abx_speed_rl_encode(double value) +{ + return (uint8_t)(value / 0.2); +} + +double can1_acu_tx_commands_abx_speed_rl_decode(uint8_t value) +{ + return ((double)value * 0.2); +} + +bool can1_acu_tx_commands_abx_speed_rl_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_acu_tx_commands_abx_speed_rr_encode(double value) +{ + return (uint8_t)(value / 0.2); +} + +double can1_acu_tx_commands_abx_speed_rr_decode(uint8_t value) +{ + return ((double)value * 0.2); +} + +bool can1_acu_tx_commands_abx_speed_rr_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_acu_tx_commands_abx_steering_angle_left_encode(double value) +{ + return (int8_t)(value / 0.0156863); +} + +double can1_acu_tx_commands_abx_steering_angle_left_decode(int8_t value) +{ + return ((double)value * 0.0156863); +} + +bool can1_acu_tx_commands_abx_steering_angle_left_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_acu_tx_commands_abx_steering_angle_right_encode(double value) +{ + return (int8_t)(value / 0.0156863); +} + +double can1_acu_tx_commands_abx_steering_angle_right_decode(int8_t value) +{ + return ((double)value * 0.0156863); +} + +bool can1_acu_tx_commands_abx_steering_angle_right_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int can1_acu_rx_commands_pack( + uint8_t *dst_p, + const struct can1_acu_rx_commands_t *src_p, + size_t size) +{ + uint8_t acu_steering_angle_left; + uint8_t acu_steering_angle_right; + + if (size < 4u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 4); + + dst_p[0] |= pack_left_shift_u8(src_p->acu_speed_target_left, 0u, 0xffu); + dst_p[1] |= pack_left_shift_u8(src_p->acu_speed_target_right, 0u, 0xffu); + acu_steering_angle_right = (uint8_t)src_p->acu_steering_angle_right; + dst_p[2] |= pack_left_shift_u8(acu_steering_angle_right, 0u, 0xffu); + acu_steering_angle_left = (uint8_t)src_p->acu_steering_angle_left; + dst_p[3] |= pack_left_shift_u8(acu_steering_angle_left, 0u, 0xffu); + + return (4); +} + +int can1_acu_rx_commands_unpack( + struct can1_acu_rx_commands_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint8_t acu_steering_angle_left; + uint8_t acu_steering_angle_right; + + if (size < 4u) { + return (-EINVAL); + } + + dst_p->acu_speed_target_left = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->acu_speed_target_right = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + acu_steering_angle_right = unpack_right_shift_u8(src_p[2], 0u, 0xffu); + dst_p->acu_steering_angle_right = (int8_t)acu_steering_angle_right; + acu_steering_angle_left = unpack_right_shift_u8(src_p[3], 0u, 0xffu); + dst_p->acu_steering_angle_left = (int8_t)acu_steering_angle_left; + + return (0); +} + +int can1_acu_rx_commands_init(struct can1_acu_rx_commands_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_acu_rx_commands_t)); + + return 0; +} + +uint8_t can1_acu_rx_commands_acu_speed_target_left_encode(double value) +{ + return (uint8_t)(value / 1.2); +} + +double can1_acu_rx_commands_acu_speed_target_left_decode(uint8_t value) +{ + return ((double)value * 1.2); +} + +bool can1_acu_rx_commands_acu_speed_target_left_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_acu_rx_commands_acu_speed_target_right_encode(double value) +{ + return (uint8_t)(value / 1.2); +} + +double can1_acu_rx_commands_acu_speed_target_right_decode(uint8_t value) +{ + return ((double)value * 1.2); +} + +bool can1_acu_rx_commands_acu_speed_target_right_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_acu_rx_commands_acu_steering_angle_right_encode(double value) +{ + return (int8_t)(value / 0.016); +} + +double can1_acu_rx_commands_acu_steering_angle_right_decode(int8_t value) +{ + return ((double)value * 0.016); +} + +bool can1_acu_rx_commands_acu_steering_angle_right_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_acu_rx_commands_acu_steering_angle_left_encode(double value) +{ + return (int8_t)(value / 0.016); +} + +double can1_acu_rx_commands_acu_steering_angle_left_decode(int8_t value) +{ + return ((double)value * 0.016); +} + +bool can1_acu_rx_commands_acu_steering_angle_left_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int can1_acu_rx_pack( + uint8_t *dst_p, + const struct can1_acu_rx_t *src_p, + size_t size) +{ + if (size < 3u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 3); + + dst_p[0] |= pack_left_shift_u8(src_p->acu_as_mission_complete, 0u, 0x01u); + dst_p[0] |= pack_left_shift_u8(src_p->acu_as_ok, 1u, 0x02u); + dst_p[0] |= pack_left_shift_u8(src_p->acu_drs, 2u, 0x04u); + dst_p[0] |= pack_left_shift_u8(src_p->acu_lap_count, 3u, 0x78u); + dst_p[1] |= pack_left_shift_u8(src_p->acu_cones_all, 0u, 0xffu); + dst_p[2] |= pack_left_shift_u8(src_p->acu_cones_actual, 0u, 0xffu); + + return (3); +} + +int can1_acu_rx_unpack( + struct can1_acu_rx_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 3u) { + return (-EINVAL); + } + + dst_p->acu_as_mission_complete = unpack_right_shift_u8(src_p[0], 0u, 0x01u); + dst_p->acu_as_ok = unpack_right_shift_u8(src_p[0], 1u, 0x02u); + dst_p->acu_drs = unpack_right_shift_u8(src_p[0], 2u, 0x04u); + dst_p->acu_lap_count = unpack_right_shift_u8(src_p[0], 3u, 0x78u); + dst_p->acu_cones_all = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->acu_cones_actual = unpack_right_shift_u8(src_p[2], 0u, 0xffu); + + return (0); +} + +int can1_acu_rx_init(struct can1_acu_rx_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_acu_rx_t)); + + return 0; +} + +uint8_t can1_acu_rx_acu_as_mission_complete_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_acu_rx_acu_as_mission_complete_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_acu_rx_acu_as_mission_complete_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_acu_rx_acu_as_ok_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_acu_rx_acu_as_ok_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_acu_rx_acu_as_ok_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_acu_rx_acu_drs_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_acu_rx_acu_drs_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_acu_rx_acu_drs_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_acu_rx_acu_lap_count_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_acu_rx_acu_lap_count_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_acu_rx_acu_lap_count_is_in_range(uint8_t value) +{ + return (value <= 15u); +} + +uint8_t can1_acu_rx_acu_cones_all_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_acu_rx_acu_cones_all_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_acu_rx_acu_cones_all_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_acu_rx_acu_cones_actual_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_acu_rx_acu_cones_actual_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_acu_rx_acu_cones_actual_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +int can1_ams_slave0_log0_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_log0_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v0, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v0, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v1, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v1, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v2, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v2, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v3, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v3, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave0_log0_unpack( + struct can1_ams_slave0_log0_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v0 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v0 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v1 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v1 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v2 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v2 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v3 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v3 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave0_log0_init(struct can1_ams_slave0_log0_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave0_log0_t)); + + return 0; +} + +uint16_t can1_ams_slave0_log0_ams_slave_id_v0_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave0_log0_ams_slave_id_v0_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave0_log0_ams_slave_id_v0_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave0_log0_ams_slave_id_v1_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave0_log0_ams_slave_id_v1_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave0_log0_ams_slave_id_v1_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave0_log0_ams_slave_id_v2_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave0_log0_ams_slave_id_v2_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave0_log0_ams_slave_id_v2_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave0_log0_ams_slave_id_v3_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave0_log0_ams_slave_id_v3_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave0_log0_ams_slave_id_v3_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave0_log1_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_log1_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v4, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v4, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v5, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v5, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v6, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v6, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v7, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v7, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave0_log1_unpack( + struct can1_ams_slave0_log1_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v4 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v4 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v5 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v5 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v6 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v6 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v7 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v7 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave0_log1_init(struct can1_ams_slave0_log1_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave0_log1_t)); + + return 0; +} + +uint16_t can1_ams_slave0_log1_ams_slave_id_v4_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave0_log1_ams_slave_id_v4_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave0_log1_ams_slave_id_v4_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave0_log1_ams_slave_id_v5_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave0_log1_ams_slave_id_v5_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave0_log1_ams_slave_id_v5_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave0_log1_ams_slave_id_v6_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave0_log1_ams_slave_id_v6_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave0_log1_ams_slave_id_v6_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave0_log1_ams_slave_id_v7_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave0_log1_ams_slave_id_v7_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave0_log1_ams_slave_id_v7_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave0_log3_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_log3_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_right_shift_u16(src_p->ams_slave_id_v12, 8u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ams_slave_id_v12, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_id_v13, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_id_v13, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_id_v14, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_id_v14, 0u, 0xffu); + dst_p[6] |= pack_right_shift_u16(src_p->ams_slave_id_v15, 8u, 0xffu); + dst_p[7] |= pack_left_shift_u16(src_p->ams_slave_id_v15, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave0_log3_unpack( + struct can1_ams_slave0_log3_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_v12 = unpack_left_shift_u16(src_p[0], 8u, 0xffu); + dst_p->ams_slave_id_v12 |= unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_v13 = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_id_v13 |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_v14 = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_v14 |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_v15 = unpack_left_shift_u16(src_p[6], 8u, 0xffu); + dst_p->ams_slave_id_v15 |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave0_log3_init(struct can1_ams_slave0_log3_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave0_log3_t)); + + return 0; +} + +uint16_t can1_ams_slave0_log3_ams_slave_id_v12_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave0_log3_ams_slave_id_v12_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave0_log3_ams_slave_id_v12_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave0_log3_ams_slave_id_v13_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave0_log3_ams_slave_id_v13_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave0_log3_ams_slave_id_v13_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave0_log3_ams_slave_id_v14_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave0_log3_ams_slave_id_v14_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave0_log3_ams_slave_id_v14_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave0_log3_ams_slave_id_v15_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave0_log3_ams_slave_id_v15_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave0_log3_ams_slave_id_v15_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int can1_ams_slave0_log4_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_log4_t *src_p, + size_t size) +{ + if (size < 6u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 6); + + dst_p[2] |= pack_right_shift_u32(src_p->ams_slave_id_failed_sensors, 24u, 0xffu); + dst_p[3] |= pack_right_shift_u32(src_p->ams_slave_id_failed_sensors, 16u, 0xffu); + dst_p[4] |= pack_right_shift_u32(src_p->ams_slave_id_failed_sensors, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u32(src_p->ams_slave_id_failed_sensors, 0u, 0xffu); + + return (6); +} + +int can1_ams_slave0_log4_unpack( + struct can1_ams_slave0_log4_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 6u) { + return (-EINVAL); + } + + dst_p->ams_slave_id_failed_sensors = unpack_left_shift_u32(src_p[2], 24u, 0xffu); + dst_p->ams_slave_id_failed_sensors |= unpack_left_shift_u32(src_p[3], 16u, 0xffu); + dst_p->ams_slave_id_failed_sensors |= unpack_left_shift_u32(src_p[4], 8u, 0xffu); + dst_p->ams_slave_id_failed_sensors |= unpack_right_shift_u32(src_p[5], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave0_log4_init(struct can1_ams_slave0_log4_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave0_log4_t)); + + return 0; +} + +uint32_t can1_ams_slave0_log4_ams_slave_id_failed_sensors_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_ams_slave0_log4_ams_slave_id_failed_sensors_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_ams_slave0_log4_ams_slave_id_failed_sensors_is_in_range(uint32_t value) +{ + (void)value; + + return (true); +} + +int can1_ams_slave0_log5_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_log5_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t0; + uint8_t ams_slave_id_t1; + uint8_t ams_slave_id_t2; + uint8_t ams_slave_id_t3; + uint8_t ams_slave_id_t4; + uint8_t ams_slave_id_t5; + uint8_t ams_slave_id_t6; + uint8_t ams_slave_id_t7; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + ams_slave_id_t0 = (uint8_t)src_p->ams_slave_id_t0; + dst_p[0] |= pack_left_shift_u8(ams_slave_id_t0, 0u, 0xffu); + ams_slave_id_t1 = (uint8_t)src_p->ams_slave_id_t1; + dst_p[1] |= pack_left_shift_u8(ams_slave_id_t1, 0u, 0xffu); + ams_slave_id_t2 = (uint8_t)src_p->ams_slave_id_t2; + dst_p[2] |= pack_left_shift_u8(ams_slave_id_t2, 0u, 0xffu); + ams_slave_id_t3 = (uint8_t)src_p->ams_slave_id_t3; + dst_p[3] |= pack_left_shift_u8(ams_slave_id_t3, 0u, 0xffu); + ams_slave_id_t4 = (uint8_t)src_p->ams_slave_id_t4; + dst_p[4] |= pack_left_shift_u8(ams_slave_id_t4, 0u, 0xffu); + ams_slave_id_t5 = (uint8_t)src_p->ams_slave_id_t5; + dst_p[5] |= pack_left_shift_u8(ams_slave_id_t5, 0u, 0xffu); + ams_slave_id_t6 = (uint8_t)src_p->ams_slave_id_t6; + dst_p[6] |= pack_left_shift_u8(ams_slave_id_t6, 0u, 0xffu); + ams_slave_id_t7 = (uint8_t)src_p->ams_slave_id_t7; + dst_p[7] |= pack_left_shift_u8(ams_slave_id_t7, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave0_log5_unpack( + struct can1_ams_slave0_log5_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t0; + uint8_t ams_slave_id_t1; + uint8_t ams_slave_id_t2; + uint8_t ams_slave_id_t3; + uint8_t ams_slave_id_t4; + uint8_t ams_slave_id_t5; + uint8_t ams_slave_id_t6; + uint8_t ams_slave_id_t7; + + if (size < 8u) { + return (-EINVAL); + } + + ams_slave_id_t0 = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->ams_slave_id_t0 = (int8_t)ams_slave_id_t0; + ams_slave_id_t1 = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_t1 = (int8_t)ams_slave_id_t1; + ams_slave_id_t2 = unpack_right_shift_u8(src_p[2], 0u, 0xffu); + dst_p->ams_slave_id_t2 = (int8_t)ams_slave_id_t2; + ams_slave_id_t3 = unpack_right_shift_u8(src_p[3], 0u, 0xffu); + dst_p->ams_slave_id_t3 = (int8_t)ams_slave_id_t3; + ams_slave_id_t4 = unpack_right_shift_u8(src_p[4], 0u, 0xffu); + dst_p->ams_slave_id_t4 = (int8_t)ams_slave_id_t4; + ams_slave_id_t5 = unpack_right_shift_u8(src_p[5], 0u, 0xffu); + dst_p->ams_slave_id_t5 = (int8_t)ams_slave_id_t5; + ams_slave_id_t6 = unpack_right_shift_u8(src_p[6], 0u, 0xffu); + dst_p->ams_slave_id_t6 = (int8_t)ams_slave_id_t6; + ams_slave_id_t7 = unpack_right_shift_u8(src_p[7], 0u, 0xffu); + dst_p->ams_slave_id_t7 = (int8_t)ams_slave_id_t7; + + return (0); +} + +int can1_ams_slave0_log5_init(struct can1_ams_slave0_log5_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave0_log5_t)); + + return 0; +} + +int8_t can1_ams_slave0_log5_ams_slave_id_t0_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave0_log5_ams_slave_id_t0_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave0_log5_ams_slave_id_t0_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave0_log5_ams_slave_id_t1_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave0_log5_ams_slave_id_t1_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave0_log5_ams_slave_id_t1_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave0_log5_ams_slave_id_t2_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave0_log5_ams_slave_id_t2_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave0_log5_ams_slave_id_t2_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave0_log5_ams_slave_id_t3_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave0_log5_ams_slave_id_t3_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave0_log5_ams_slave_id_t3_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave0_log5_ams_slave_id_t4_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave0_log5_ams_slave_id_t4_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave0_log5_ams_slave_id_t4_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave0_log5_ams_slave_id_t5_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave0_log5_ams_slave_id_t5_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave0_log5_ams_slave_id_t5_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave0_log5_ams_slave_id_t6_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave0_log5_ams_slave_id_t6_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave0_log5_ams_slave_id_t6_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave0_log5_ams_slave_id_t7_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave0_log5_ams_slave_id_t7_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave0_log5_ams_slave_id_t7_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int can1_ams_slave0_log6_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_log6_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t8; + uint8_t ams_slave_id_t9; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + ams_slave_id_t8 = (uint8_t)src_p->ams_slave_id_t8; + dst_p[0] |= pack_left_shift_u8(ams_slave_id_t8, 0u, 0xffu); + ams_slave_id_t9 = (uint8_t)src_p->ams_slave_id_t9; + dst_p[1] |= pack_left_shift_u8(ams_slave_id_t9, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave0_log6_unpack( + struct can1_ams_slave0_log6_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint8_t ams_slave_id_t8; + uint8_t ams_slave_id_t9; + + if (size < 8u) { + return (-EINVAL); + } + + ams_slave_id_t8 = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->ams_slave_id_t8 = (int8_t)ams_slave_id_t8; + ams_slave_id_t9 = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ams_slave_id_t9 = (int8_t)ams_slave_id_t9; + + return (0); +} + +int can1_ams_slave0_log6_init(struct can1_ams_slave0_log6_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave0_log6_t)); + + return 0; +} + +int8_t can1_ams_slave0_log6_ams_slave_id_t8_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave0_log6_ams_slave_id_t8_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave0_log6_ams_slave_id_t8_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_slave0_log6_ams_slave_id_t9_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_slave0_log6_ams_slave_id_t9_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave0_log6_ams_slave_id_t9_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int can1_acu_tx_pack( + uint8_t *dst_p, + const struct can1_acu_tx_t *src_p, + size_t size) +{ + if (size < 2u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 2); + + dst_p[0] |= pack_left_shift_u8(src_p->acu_as_mission, 0u, 0x07u); + dst_p[0] |= pack_left_shift_u8(src_p->acu_as_state, 3u, 0x38u); + dst_p[0] |= pack_left_shift_u8(src_p->acu_power_off, 6u, 0x40u); + dst_p[0] |= pack_left_shift_u8(src_p->acu_reset, 7u, 0x80u); + dst_p[1] |= pack_left_shift_u8(src_p->acu_allow_torque, 0u, 0x01u); + dst_p[1] |= pack_left_shift_u8(src_p->abx_con_mon_error, 1u, 0x1eu); + + return (2); +} + +int can1_acu_tx_unpack( + struct can1_acu_tx_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 2u) { + return (-EINVAL); + } + + dst_p->acu_as_mission = unpack_right_shift_u8(src_p[0], 0u, 0x07u); + dst_p->acu_as_state = unpack_right_shift_u8(src_p[0], 3u, 0x38u); + dst_p->acu_power_off = unpack_right_shift_u8(src_p[0], 6u, 0x40u); + dst_p->acu_reset = unpack_right_shift_u8(src_p[0], 7u, 0x80u); + dst_p->acu_allow_torque = unpack_right_shift_u8(src_p[1], 0u, 0x01u); + dst_p->abx_con_mon_error = unpack_right_shift_u8(src_p[1], 1u, 0x1eu); + + return (0); +} + +int can1_acu_tx_init(struct can1_acu_tx_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_acu_tx_t)); + + return 0; +} + +uint8_t can1_acu_tx_acu_as_mission_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_acu_tx_acu_as_mission_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_acu_tx_acu_as_mission_is_in_range(uint8_t value) +{ + return (value <= 7u); +} + +uint8_t can1_acu_tx_acu_as_state_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_acu_tx_acu_as_state_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_acu_tx_acu_as_state_is_in_range(uint8_t value) +{ + return (value <= 5u); +} + +uint8_t can1_acu_tx_acu_power_off_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_acu_tx_acu_power_off_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_acu_tx_acu_power_off_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_acu_tx_acu_reset_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_acu_tx_acu_reset_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_acu_tx_acu_reset_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_acu_tx_acu_allow_torque_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_acu_tx_acu_allow_torque_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_acu_tx_acu_allow_torque_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_acu_tx_abx_con_mon_error_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_acu_tx_abx_con_mon_error_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_acu_tx_abx_con_mon_error_is_in_range(uint8_t value) +{ + return (value <= 15u); +} + +int can1_ams_slave5_status_pack( + uint8_t *dst_p, + const struct can1_ams_slave5_status_t *src_p, + size_t size) +{ + uint16_t ams_slave_status_max_temp; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u8(src_p->ams_slave_status_error, 7u, 0x80u); + dst_p[0] |= pack_left_shift_u8(src_p->ams_slave_status_id, 0u, 0x7fu); + dst_p[1] |= pack_left_shift_u8(src_p->ams_slave_status_temp_sensor, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_status_min_cell_volt, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_status_min_cell_volt, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_status_max_cell_volt, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_status_max_cell_volt, 0u, 0xffu); + ams_slave_status_max_temp = (uint16_t)src_p->ams_slave_status_max_temp; + dst_p[6] |= pack_right_shift_u16(ams_slave_status_max_temp, 8u, 0x0fu); + dst_p[7] |= pack_left_shift_u16(ams_slave_status_max_temp, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave5_status_unpack( + struct can1_ams_slave5_status_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint16_t ams_slave_status_max_temp; + + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_status_error = unpack_right_shift_u8(src_p[0], 7u, 0x80u); + dst_p->ams_slave_status_id = unpack_right_shift_u8(src_p[0], 0u, 0x7fu); + dst_p->ams_slave_status_temp_sensor = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ams_slave_status_min_cell_volt = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_status_min_cell_volt |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_status_max_cell_volt = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_status_max_cell_volt |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + ams_slave_status_max_temp = unpack_left_shift_u16(src_p[6], 8u, 0x0fu); + ams_slave_status_max_temp |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + if ((ams_slave_status_max_temp & (1u << 11)) != 0u) { + ams_slave_status_max_temp |= 0xf000u; + } + + dst_p->ams_slave_status_max_temp = (int16_t)ams_slave_status_max_temp; + + return (0); +} + +int can1_ams_slave5_status_init(struct can1_ams_slave5_status_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave5_status_t)); + + return 0; +} + +uint8_t can1_ams_slave5_status_ams_slave_status_error_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_slave5_status_ams_slave_status_error_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave5_status_ams_slave_status_error_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_ams_slave5_status_ams_slave_status_id_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_slave5_status_ams_slave_status_id_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave5_status_ams_slave_status_id_is_in_range(uint8_t value) +{ + return (value <= 127u); +} + +uint8_t can1_ams_slave5_status_ams_slave_status_temp_sensor_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_slave5_status_ams_slave_status_temp_sensor_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave5_status_ams_slave_status_temp_sensor_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint16_t can1_ams_slave5_status_ams_slave_status_min_cell_volt_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave5_status_ams_slave_status_min_cell_volt_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave5_status_ams_slave_status_min_cell_volt_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave5_status_ams_slave_status_max_cell_volt_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave5_status_ams_slave_status_max_cell_volt_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave5_status_ams_slave_status_max_cell_volt_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int16_t can1_ams_slave5_status_ams_slave_status_max_temp_encode(double value) +{ + return (int16_t)(value / 0.0625); +} + +double can1_ams_slave5_status_ams_slave_status_max_temp_decode(int16_t value) +{ + return ((double)value * 0.0625); +} + +bool can1_ams_slave5_status_ams_slave_status_max_temp_is_in_range(int16_t value) +{ + return ((value >= 0) && (value <= 16)); +} + +int can1_ams_slave4_status_pack( + uint8_t *dst_p, + const struct can1_ams_slave4_status_t *src_p, + size_t size) +{ + uint16_t ams_slave_status_max_temp; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u8(src_p->ams_slave_status_error, 7u, 0x80u); + dst_p[0] |= pack_left_shift_u8(src_p->ams_slave_status_id, 0u, 0x7fu); + dst_p[1] |= pack_left_shift_u8(src_p->ams_slave_status_temp_sensor, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_status_min_cell_volt, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_status_min_cell_volt, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_status_max_cell_volt, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_status_max_cell_volt, 0u, 0xffu); + ams_slave_status_max_temp = (uint16_t)src_p->ams_slave_status_max_temp; + dst_p[6] |= pack_right_shift_u16(ams_slave_status_max_temp, 8u, 0x0fu); + dst_p[7] |= pack_left_shift_u16(ams_slave_status_max_temp, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave4_status_unpack( + struct can1_ams_slave4_status_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint16_t ams_slave_status_max_temp; + + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_status_error = unpack_right_shift_u8(src_p[0], 7u, 0x80u); + dst_p->ams_slave_status_id = unpack_right_shift_u8(src_p[0], 0u, 0x7fu); + dst_p->ams_slave_status_temp_sensor = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ams_slave_status_min_cell_volt = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_status_min_cell_volt |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_status_max_cell_volt = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_status_max_cell_volt |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + ams_slave_status_max_temp = unpack_left_shift_u16(src_p[6], 8u, 0x0fu); + ams_slave_status_max_temp |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + if ((ams_slave_status_max_temp & (1u << 11)) != 0u) { + ams_slave_status_max_temp |= 0xf000u; + } + + dst_p->ams_slave_status_max_temp = (int16_t)ams_slave_status_max_temp; + + return (0); +} + +int can1_ams_slave4_status_init(struct can1_ams_slave4_status_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave4_status_t)); + + return 0; +} + +uint8_t can1_ams_slave4_status_ams_slave_status_error_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_slave4_status_ams_slave_status_error_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave4_status_ams_slave_status_error_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_ams_slave4_status_ams_slave_status_id_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_slave4_status_ams_slave_status_id_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave4_status_ams_slave_status_id_is_in_range(uint8_t value) +{ + return (value <= 127u); +} + +uint8_t can1_ams_slave4_status_ams_slave_status_temp_sensor_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_slave4_status_ams_slave_status_temp_sensor_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave4_status_ams_slave_status_temp_sensor_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint16_t can1_ams_slave4_status_ams_slave_status_min_cell_volt_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave4_status_ams_slave_status_min_cell_volt_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave4_status_ams_slave_status_min_cell_volt_is_in_range(uint16_t value) +{ + return (value <= 1000u); +} + +uint16_t can1_ams_slave4_status_ams_slave_status_max_cell_volt_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave4_status_ams_slave_status_max_cell_volt_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave4_status_ams_slave_status_max_cell_volt_is_in_range(uint16_t value) +{ + return (value <= 1000u); +} + +int16_t can1_ams_slave4_status_ams_slave_status_max_temp_encode(double value) +{ + return (int16_t)(value / 0.0625); +} + +double can1_ams_slave4_status_ams_slave_status_max_temp_decode(int16_t value) +{ + return ((double)value * 0.0625); +} + +bool can1_ams_slave4_status_ams_slave_status_max_temp_is_in_range(int16_t value) +{ + return ((value >= 0) && (value <= 16)); +} + +int can1_ams_slave3_status_pack( + uint8_t *dst_p, + const struct can1_ams_slave3_status_t *src_p, + size_t size) +{ + uint16_t ams_slave_status_max_temp; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u8(src_p->ams_slave_status_error, 7u, 0x80u); + dst_p[0] |= pack_left_shift_u8(src_p->ams_slave_status_id, 0u, 0x7fu); + dst_p[1] |= pack_left_shift_u8(src_p->ams_slave_status_temp_sensor, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_status_min_cell_volt, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_status_min_cell_volt, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_status_max_cell_volt, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_status_max_cell_volt, 0u, 0xffu); + ams_slave_status_max_temp = (uint16_t)src_p->ams_slave_status_max_temp; + dst_p[6] |= pack_right_shift_u16(ams_slave_status_max_temp, 8u, 0x0fu); + dst_p[7] |= pack_left_shift_u16(ams_slave_status_max_temp, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave3_status_unpack( + struct can1_ams_slave3_status_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint16_t ams_slave_status_max_temp; + + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_status_error = unpack_right_shift_u8(src_p[0], 7u, 0x80u); + dst_p->ams_slave_status_id = unpack_right_shift_u8(src_p[0], 0u, 0x7fu); + dst_p->ams_slave_status_temp_sensor = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ams_slave_status_min_cell_volt = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_status_min_cell_volt |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_status_max_cell_volt = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_status_max_cell_volt |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + ams_slave_status_max_temp = unpack_left_shift_u16(src_p[6], 8u, 0x0fu); + ams_slave_status_max_temp |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + if ((ams_slave_status_max_temp & (1u << 11)) != 0u) { + ams_slave_status_max_temp |= 0xf000u; + } + + dst_p->ams_slave_status_max_temp = (int16_t)ams_slave_status_max_temp; + + return (0); +} + +int can1_ams_slave3_status_init(struct can1_ams_slave3_status_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave3_status_t)); + + return 0; +} + +uint8_t can1_ams_slave3_status_ams_slave_status_error_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_slave3_status_ams_slave_status_error_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave3_status_ams_slave_status_error_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_ams_slave3_status_ams_slave_status_id_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_slave3_status_ams_slave_status_id_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave3_status_ams_slave_status_id_is_in_range(uint8_t value) +{ + return (value <= 127u); +} + +uint8_t can1_ams_slave3_status_ams_slave_status_temp_sensor_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_slave3_status_ams_slave_status_temp_sensor_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave3_status_ams_slave_status_temp_sensor_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint16_t can1_ams_slave3_status_ams_slave_status_min_cell_volt_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave3_status_ams_slave_status_min_cell_volt_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave3_status_ams_slave_status_min_cell_volt_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave3_status_ams_slave_status_max_cell_volt_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave3_status_ams_slave_status_max_cell_volt_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave3_status_ams_slave_status_max_cell_volt_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int16_t can1_ams_slave3_status_ams_slave_status_max_temp_encode(double value) +{ + return (int16_t)(value / 0.0625); +} + +double can1_ams_slave3_status_ams_slave_status_max_temp_decode(int16_t value) +{ + return ((double)value * 0.0625); +} + +bool can1_ams_slave3_status_ams_slave_status_max_temp_is_in_range(int16_t value) +{ + return ((value >= 0) && (value <= 16)); +} + +int can1_ams_slave2_status_pack( + uint8_t *dst_p, + const struct can1_ams_slave2_status_t *src_p, + size_t size) +{ + uint16_t ams_slave_status_max_temp; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u8(src_p->ams_slave_status_error, 7u, 0x80u); + dst_p[0] |= pack_left_shift_u8(src_p->ams_slave_status_id, 0u, 0x7fu); + dst_p[1] |= pack_left_shift_u8(src_p->ams_slave_status_temp_sensor, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_status_min_cell_volt, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_status_min_cell_volt, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_status_max_cell_volt, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_status_max_cell_volt, 0u, 0xffu); + ams_slave_status_max_temp = (uint16_t)src_p->ams_slave_status_max_temp; + dst_p[6] |= pack_right_shift_u16(ams_slave_status_max_temp, 8u, 0x0fu); + dst_p[7] |= pack_left_shift_u16(ams_slave_status_max_temp, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave2_status_unpack( + struct can1_ams_slave2_status_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint16_t ams_slave_status_max_temp; + + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_status_error = unpack_right_shift_u8(src_p[0], 7u, 0x80u); + dst_p->ams_slave_status_id = unpack_right_shift_u8(src_p[0], 0u, 0x7fu); + dst_p->ams_slave_status_temp_sensor = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ams_slave_status_min_cell_volt = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_status_min_cell_volt |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_status_max_cell_volt = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_status_max_cell_volt |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + ams_slave_status_max_temp = unpack_left_shift_u16(src_p[6], 8u, 0x0fu); + ams_slave_status_max_temp |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + if ((ams_slave_status_max_temp & (1u << 11)) != 0u) { + ams_slave_status_max_temp |= 0xf000u; + } + + dst_p->ams_slave_status_max_temp = (int16_t)ams_slave_status_max_temp; + + return (0); +} + +int can1_ams_slave2_status_init(struct can1_ams_slave2_status_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave2_status_t)); + + return 0; +} + +uint8_t can1_ams_slave2_status_ams_slave_status_error_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_slave2_status_ams_slave_status_error_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave2_status_ams_slave_status_error_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_ams_slave2_status_ams_slave_status_id_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_slave2_status_ams_slave_status_id_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave2_status_ams_slave_status_id_is_in_range(uint8_t value) +{ + return (value <= 127u); +} + +uint8_t can1_ams_slave2_status_ams_slave_status_temp_sensor_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_slave2_status_ams_slave_status_temp_sensor_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave2_status_ams_slave_status_temp_sensor_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint16_t can1_ams_slave2_status_ams_slave_status_min_cell_volt_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave2_status_ams_slave_status_min_cell_volt_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave2_status_ams_slave_status_min_cell_volt_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave2_status_ams_slave_status_max_cell_volt_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave2_status_ams_slave_status_max_cell_volt_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave2_status_ams_slave_status_max_cell_volt_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int16_t can1_ams_slave2_status_ams_slave_status_max_temp_encode(double value) +{ + return (int16_t)(value / 0.0625); +} + +double can1_ams_slave2_status_ams_slave_status_max_temp_decode(int16_t value) +{ + return ((double)value * 0.0625); +} + +bool can1_ams_slave2_status_ams_slave_status_max_temp_is_in_range(int16_t value) +{ + return ((value >= 0) && (value <= 16)); +} + +int can1_ams_error_pack( + uint8_t *dst_p, + const struct can1_ams_error_t *src_p, + size_t size) +{ + uint8_t ams_error_arg; + uint8_t ams_error_kind; + + if (size < 2u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 2); + + ams_error_kind = (uint8_t)src_p->ams_error_kind; + dst_p[0] |= pack_left_shift_u8(ams_error_kind, 0u, 0xffu); + ams_error_arg = (uint8_t)src_p->ams_error_arg; + dst_p[1] |= pack_left_shift_u8(ams_error_arg, 0u, 0xffu); + + return (2); +} + +int can1_ams_error_unpack( + struct can1_ams_error_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint8_t ams_error_arg; + uint8_t ams_error_kind; + + if (size < 2u) { + return (-EINVAL); + } + + ams_error_kind = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->ams_error_kind = (int8_t)ams_error_kind; + ams_error_arg = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ams_error_arg = (int8_t)ams_error_arg; + + return (0); +} + +int can1_ams_error_init(struct can1_ams_error_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_error_t)); + + return 0; +} + +int8_t can1_ams_error_ams_error_kind_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_error_ams_error_kind_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_error_ams_error_kind_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int8_t can1_ams_error_ams_error_arg_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ams_error_ams_error_arg_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ams_error_ams_error_arg_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +int can1_ftcu_cooling_pack( + uint8_t *dst_p, + const struct can1_ftcu_cooling_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u8(src_p->ftcu_water_pressure_2, 0u, 0xffu); + dst_p[1] |= pack_left_shift_u8(src_p->ftcu_water_pressure_1, 0u, 0xffu); + dst_p[2] |= pack_left_shift_u16(src_p->ftcu_water_temperature_1, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(src_p->ftcu_water_temperature_1, 8u, 0x03u); + dst_p[3] |= pack_left_shift_u16(src_p->ftcu_water_temperature_2, 2u, 0xfcu); + dst_p[4] |= pack_right_shift_u16(src_p->ftcu_water_temperature_2, 6u, 0x0fu); + dst_p[4] |= pack_left_shift_u16(src_p->ftcu_flow_rate, 4u, 0xf0u); + dst_p[5] |= pack_right_shift_u16(src_p->ftcu_flow_rate, 4u, 0x3fu); + + return (8); +} + +int can1_ftcu_cooling_unpack( + struct can1_ftcu_cooling_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ftcu_water_pressure_2 = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->ftcu_water_pressure_1 = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ftcu_water_temperature_1 = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + dst_p->ftcu_water_temperature_1 |= unpack_left_shift_u16(src_p[3], 8u, 0x03u); + dst_p->ftcu_water_temperature_2 = unpack_right_shift_u16(src_p[3], 2u, 0xfcu); + dst_p->ftcu_water_temperature_2 |= unpack_left_shift_u16(src_p[4], 6u, 0x0fu); + dst_p->ftcu_flow_rate = unpack_right_shift_u16(src_p[4], 4u, 0xf0u); + dst_p->ftcu_flow_rate |= unpack_left_shift_u16(src_p[5], 4u, 0x3fu); + + return (0); +} + +int can1_ftcu_cooling_init(struct can1_ftcu_cooling_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ftcu_cooling_t)); + + return 0; +} + +uint8_t can1_ftcu_cooling_ftcu_water_pressure_2_encode(double value) +{ + return (uint8_t)(value / 0.01); +} + +double can1_ftcu_cooling_ftcu_water_pressure_2_decode(uint8_t value) +{ + return ((double)value * 0.01); +} + +bool can1_ftcu_cooling_ftcu_water_pressure_2_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_ftcu_cooling_ftcu_water_pressure_1_encode(double value) +{ + return (uint8_t)(value / 0.01); +} + +double can1_ftcu_cooling_ftcu_water_pressure_1_decode(uint8_t value) +{ + return ((double)value * 0.01); +} + +bool can1_ftcu_cooling_ftcu_water_pressure_1_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_ftcu_cooling_ftcu_water_temperature_1_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_ftcu_cooling_ftcu_water_temperature_1_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_ftcu_cooling_ftcu_water_temperature_1_is_in_range(uint16_t value) +{ + return (value <= 1023u); +} + +uint16_t can1_ftcu_cooling_ftcu_water_temperature_2_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_ftcu_cooling_ftcu_water_temperature_2_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_ftcu_cooling_ftcu_water_temperature_2_is_in_range(uint16_t value) +{ + return (value <= 1023u); +} + +uint16_t can1_ftcu_cooling_ftcu_flow_rate_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_ftcu_cooling_ftcu_flow_rate_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_ftcu_cooling_ftcu_flow_rate_is_in_range(uint16_t value) +{ + return (value <= 1023u); +} + +int can1_ftcu_brake_t_pack( + uint8_t *dst_p, + const struct can1_ftcu_brake_t_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u16(src_p->ftcu_brake_t_fl, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->ftcu_brake_t_fl, 8u, 0xffu); + dst_p[2] |= pack_left_shift_u16(src_p->ftcu_brake_t_fr, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(src_p->ftcu_brake_t_fr, 8u, 0xffu); + dst_p[4] |= pack_left_shift_u16(src_p->ftcu_brake_t_rl, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u16(src_p->ftcu_brake_t_rl, 8u, 0xffu); + dst_p[6] |= pack_left_shift_u16(src_p->ftcu_brake_t_rr, 0u, 0xffu); + dst_p[7] |= pack_right_shift_u16(src_p->ftcu_brake_t_rr, 8u, 0xffu); + + return (8); +} + +int can1_ftcu_brake_t_unpack( + struct can1_ftcu_brake_t_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ftcu_brake_t_fl = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->ftcu_brake_t_fl |= unpack_left_shift_u16(src_p[1], 8u, 0xffu); + dst_p->ftcu_brake_t_fr = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + dst_p->ftcu_brake_t_fr |= unpack_left_shift_u16(src_p[3], 8u, 0xffu); + dst_p->ftcu_brake_t_rl = unpack_right_shift_u16(src_p[4], 0u, 0xffu); + dst_p->ftcu_brake_t_rl |= unpack_left_shift_u16(src_p[5], 8u, 0xffu); + dst_p->ftcu_brake_t_rr = unpack_right_shift_u16(src_p[6], 0u, 0xffu); + dst_p->ftcu_brake_t_rr |= unpack_left_shift_u16(src_p[7], 8u, 0xffu); + + return (0); +} + +int can1_ftcu_brake_t_init(struct can1_ftcu_brake_t_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ftcu_brake_t_t)); + + return 0; +} + +uint16_t can1_ftcu_brake_t_ftcu_brake_t_fl_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_ftcu_brake_t_ftcu_brake_t_fl_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_ftcu_brake_t_ftcu_brake_t_fl_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_ftcu_brake_t_ftcu_brake_t_fr_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_ftcu_brake_t_ftcu_brake_t_fr_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_ftcu_brake_t_ftcu_brake_t_fr_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_ftcu_brake_t_ftcu_brake_t_rl_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_ftcu_brake_t_ftcu_brake_t_rl_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_ftcu_brake_t_ftcu_brake_t_rl_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_ftcu_brake_t_ftcu_brake_t_rr_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_ftcu_brake_t_ftcu_brake_t_rr_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_ftcu_brake_t_ftcu_brake_t_rr_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +int can1_ftcu_wheelspeed_pack( + uint8_t *dst_p, + const struct can1_ftcu_wheelspeed_t *src_p, + size_t size) +{ + uint16_t ftcu_wheelspeed_fl; + uint16_t ftcu_wheelspeed_fr; + uint16_t ftcu_wheelspeed_rl; + uint16_t ftcu_wheelspeed_rr; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + ftcu_wheelspeed_fl = (uint16_t)src_p->ftcu_wheelspeed_fl; + dst_p[0] |= pack_left_shift_u16(ftcu_wheelspeed_fl, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(ftcu_wheelspeed_fl, 8u, 0x0fu); + ftcu_wheelspeed_fr = (uint16_t)src_p->ftcu_wheelspeed_fr; + dst_p[1] |= pack_left_shift_u16(ftcu_wheelspeed_fr, 4u, 0xf0u); + dst_p[2] |= pack_right_shift_u16(ftcu_wheelspeed_fr, 4u, 0xffu); + ftcu_wheelspeed_rl = (uint16_t)src_p->ftcu_wheelspeed_rl; + dst_p[3] |= pack_left_shift_u16(ftcu_wheelspeed_rl, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(ftcu_wheelspeed_rl, 8u, 0x0fu); + ftcu_wheelspeed_rr = (uint16_t)src_p->ftcu_wheelspeed_rr; + dst_p[4] |= pack_left_shift_u16(ftcu_wheelspeed_rr, 4u, 0xf0u); + dst_p[5] |= pack_right_shift_u16(ftcu_wheelspeed_rr, 4u, 0xffu); + dst_p[6] |= pack_left_shift_u16(src_p->ftcu_distance_session, 0u, 0xffu); + dst_p[7] |= pack_right_shift_u16(src_p->ftcu_distance_session, 8u, 0xffu); + + return (8); +} + +int can1_ftcu_wheelspeed_unpack( + struct can1_ftcu_wheelspeed_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint16_t ftcu_wheelspeed_fl; + uint16_t ftcu_wheelspeed_fr; + uint16_t ftcu_wheelspeed_rl; + uint16_t ftcu_wheelspeed_rr; + + if (size < 8u) { + return (-EINVAL); + } + + ftcu_wheelspeed_fl = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + ftcu_wheelspeed_fl |= unpack_left_shift_u16(src_p[1], 8u, 0x0fu); + + if ((ftcu_wheelspeed_fl & (1u << 11)) != 0u) { + ftcu_wheelspeed_fl |= 0xf000u; + } + + dst_p->ftcu_wheelspeed_fl = (int16_t)ftcu_wheelspeed_fl; + ftcu_wheelspeed_fr = unpack_right_shift_u16(src_p[1], 4u, 0xf0u); + ftcu_wheelspeed_fr |= unpack_left_shift_u16(src_p[2], 4u, 0xffu); + + if ((ftcu_wheelspeed_fr & (1u << 11)) != 0u) { + ftcu_wheelspeed_fr |= 0xf000u; + } + + dst_p->ftcu_wheelspeed_fr = (int16_t)ftcu_wheelspeed_fr; + ftcu_wheelspeed_rl = unpack_right_shift_u16(src_p[3], 0u, 0xffu); + ftcu_wheelspeed_rl |= unpack_left_shift_u16(src_p[4], 8u, 0x0fu); + + if ((ftcu_wheelspeed_rl & (1u << 11)) != 0u) { + ftcu_wheelspeed_rl |= 0xf000u; + } + + dst_p->ftcu_wheelspeed_rl = (int16_t)ftcu_wheelspeed_rl; + ftcu_wheelspeed_rr = unpack_right_shift_u16(src_p[4], 4u, 0xf0u); + ftcu_wheelspeed_rr |= unpack_left_shift_u16(src_p[5], 4u, 0xffu); + + if ((ftcu_wheelspeed_rr & (1u << 11)) != 0u) { + ftcu_wheelspeed_rr |= 0xf000u; + } + + dst_p->ftcu_wheelspeed_rr = (int16_t)ftcu_wheelspeed_rr; + dst_p->ftcu_distance_session = unpack_right_shift_u16(src_p[6], 0u, 0xffu); + dst_p->ftcu_distance_session |= unpack_left_shift_u16(src_p[7], 8u, 0xffu); + + return (0); +} + +int can1_ftcu_wheelspeed_init(struct can1_ftcu_wheelspeed_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ftcu_wheelspeed_t)); + + return 0; +} + +int16_t can1_ftcu_wheelspeed_ftcu_wheelspeed_fl_encode(double value) +{ + return (int16_t)(value / 0.05); +} + +double can1_ftcu_wheelspeed_ftcu_wheelspeed_fl_decode(int16_t value) +{ + return ((double)value * 0.05); +} + +bool can1_ftcu_wheelspeed_ftcu_wheelspeed_fl_is_in_range(int16_t value) +{ + return ((value >= -2048) && (value <= 2047)); +} + +int16_t can1_ftcu_wheelspeed_ftcu_wheelspeed_fr_encode(double value) +{ + return (int16_t)(value / 0.05); +} + +double can1_ftcu_wheelspeed_ftcu_wheelspeed_fr_decode(int16_t value) +{ + return ((double)value * 0.05); +} + +bool can1_ftcu_wheelspeed_ftcu_wheelspeed_fr_is_in_range(int16_t value) +{ + return ((value >= -2048) && (value <= 2047)); +} + +int16_t can1_ftcu_wheelspeed_ftcu_wheelspeed_rl_encode(double value) +{ + return (int16_t)(value / 0.05); +} + +double can1_ftcu_wheelspeed_ftcu_wheelspeed_rl_decode(int16_t value) +{ + return ((double)value * 0.05); +} + +bool can1_ftcu_wheelspeed_ftcu_wheelspeed_rl_is_in_range(int16_t value) +{ + return ((value >= -2048) && (value <= 2047)); +} + +int16_t can1_ftcu_wheelspeed_ftcu_wheelspeed_rr_encode(double value) +{ + return (int16_t)(value / 0.05); +} + +double can1_ftcu_wheelspeed_ftcu_wheelspeed_rr_decode(int16_t value) +{ + return ((double)value * 0.05); +} + +bool can1_ftcu_wheelspeed_ftcu_wheelspeed_rr_is_in_range(int16_t value) +{ + return ((value >= -2048) && (value <= 2047)); +} + +uint16_t can1_ftcu_wheelspeed_ftcu_distance_session_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_ftcu_wheelspeed_ftcu_distance_session_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_ftcu_wheelspeed_ftcu_distance_session_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +int can1_ftcu_timings_pack( + uint8_t *dst_p, + const struct can1_ftcu_timings_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u16(src_p->ftcu_laptime_best, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->ftcu_laptime_best, 8u, 0xffu); + dst_p[2] |= pack_left_shift_u16(src_p->ftcu_laptime_last, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(src_p->ftcu_laptime_last, 8u, 0xffu); + dst_p[4] |= pack_left_shift_u16(src_p->ftcu_sectortime_best, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u16(src_p->ftcu_sectortime_best, 8u, 0xffu); + dst_p[6] |= pack_left_shift_u16(src_p->ftcu_sectortime_last, 0u, 0xffu); + dst_p[7] |= pack_right_shift_u16(src_p->ftcu_sectortime_last, 8u, 0xffu); + + return (8); +} + +int can1_ftcu_timings_unpack( + struct can1_ftcu_timings_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ftcu_laptime_best = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->ftcu_laptime_best |= unpack_left_shift_u16(src_p[1], 8u, 0xffu); + dst_p->ftcu_laptime_last = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + dst_p->ftcu_laptime_last |= unpack_left_shift_u16(src_p[3], 8u, 0xffu); + dst_p->ftcu_sectortime_best = unpack_right_shift_u16(src_p[4], 0u, 0xffu); + dst_p->ftcu_sectortime_best |= unpack_left_shift_u16(src_p[5], 8u, 0xffu); + dst_p->ftcu_sectortime_last = unpack_right_shift_u16(src_p[6], 0u, 0xffu); + dst_p->ftcu_sectortime_last |= unpack_left_shift_u16(src_p[7], 8u, 0xffu); + + return (0); +} + +int can1_ftcu_timings_init(struct can1_ftcu_timings_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ftcu_timings_t)); + + return 0; +} + +uint16_t can1_ftcu_timings_ftcu_laptime_best_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_ftcu_timings_ftcu_laptime_best_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_ftcu_timings_ftcu_laptime_best_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_ftcu_timings_ftcu_laptime_last_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_ftcu_timings_ftcu_laptime_last_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_ftcu_timings_ftcu_laptime_last_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_ftcu_timings_ftcu_sectortime_best_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_ftcu_timings_ftcu_sectortime_best_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_ftcu_timings_ftcu_sectortime_best_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_ftcu_timings_ftcu_sectortime_last_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_ftcu_timings_ftcu_sectortime_last_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_ftcu_timings_ftcu_sectortime_last_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +int can1_ftcu_driver_pack( + uint8_t *dst_p, + const struct can1_ftcu_driver_t *src_p, + size_t size) +{ + uint8_t ftcu_steering_angle; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u8(src_p->ftcu_apps_percent, 0u, 0xffu); + dst_p[1] |= pack_left_shift_u16(src_p->ftcu_brake_pressure_f, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ftcu_brake_pressure_f, 8u, 0x0fu); + dst_p[2] |= pack_left_shift_u16(src_p->ftcu_brake_pressure_r, 4u, 0xf0u); + dst_p[3] |= pack_right_shift_u16(src_p->ftcu_brake_pressure_r, 4u, 0xffu); + ftcu_steering_angle = (uint8_t)src_p->ftcu_steering_angle; + dst_p[4] |= pack_left_shift_u8(ftcu_steering_angle, 0u, 0xffu); + dst_p[5] |= pack_left_shift_u8(src_p->ftcu_speed, 0u, 0xffu); + dst_p[6] |= pack_left_shift_u8(src_p->ftcu_lapcounter, 0u, 0xffu); + dst_p[7] |= pack_left_shift_u8(src_p->ftcu_sectorcounter, 0u, 0xffu); + + return (8); +} + +int can1_ftcu_driver_unpack( + struct can1_ftcu_driver_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint8_t ftcu_steering_angle; + + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ftcu_apps_percent = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->ftcu_brake_pressure_f = unpack_right_shift_u16(src_p[1], 0u, 0xffu); + dst_p->ftcu_brake_pressure_f |= unpack_left_shift_u16(src_p[2], 8u, 0x0fu); + dst_p->ftcu_brake_pressure_r = unpack_right_shift_u16(src_p[2], 4u, 0xf0u); + dst_p->ftcu_brake_pressure_r |= unpack_left_shift_u16(src_p[3], 4u, 0xffu); + ftcu_steering_angle = unpack_right_shift_u8(src_p[4], 0u, 0xffu); + dst_p->ftcu_steering_angle = (int8_t)ftcu_steering_angle; + dst_p->ftcu_speed = unpack_right_shift_u8(src_p[5], 0u, 0xffu); + dst_p->ftcu_lapcounter = unpack_right_shift_u8(src_p[6], 0u, 0xffu); + dst_p->ftcu_sectorcounter = unpack_right_shift_u8(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_ftcu_driver_init(struct can1_ftcu_driver_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ftcu_driver_t)); + + return 0; +} + +uint8_t can1_ftcu_driver_ftcu_apps_percent_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ftcu_driver_ftcu_apps_percent_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ftcu_driver_ftcu_apps_percent_is_in_range(uint8_t value) +{ + return (value <= 100u); +} + +uint16_t can1_ftcu_driver_ftcu_brake_pressure_f_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_ftcu_driver_ftcu_brake_pressure_f_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_ftcu_driver_ftcu_brake_pressure_f_is_in_range(uint16_t value) +{ + return (value <= 1600u); +} + +uint16_t can1_ftcu_driver_ftcu_brake_pressure_r_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_ftcu_driver_ftcu_brake_pressure_r_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_ftcu_driver_ftcu_brake_pressure_r_is_in_range(uint16_t value) +{ + return (value <= 1600u); +} + +int8_t can1_ftcu_driver_ftcu_steering_angle_encode(double value) +{ + return (int8_t)(value); +} + +double can1_ftcu_driver_ftcu_steering_angle_decode(int8_t value) +{ + return ((double)value); +} + +bool can1_ftcu_driver_ftcu_steering_angle_is_in_range(int8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_ftcu_driver_ftcu_speed_encode(double value) +{ + return (uint8_t)(value / 0.2); +} + +double can1_ftcu_driver_ftcu_speed_decode(uint8_t value) +{ + return ((double)value * 0.2); +} + +bool can1_ftcu_driver_ftcu_speed_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_ftcu_driver_ftcu_lapcounter_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ftcu_driver_ftcu_lapcounter_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ftcu_driver_ftcu_lapcounter_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_ftcu_driver_ftcu_sectorcounter_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ftcu_driver_ftcu_sectorcounter_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ftcu_driver_ftcu_sectorcounter_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +int can1_tts_rr_pack( + uint8_t *dst_p, + const struct can1_tts_rr_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u16(src_p->tts_outer_left, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->tts_outer_left, 8u, 0x0fu); + dst_p[1] |= pack_left_shift_u16(src_p->tts_center_left, 4u, 0xf0u); + dst_p[2] |= pack_right_shift_u16(src_p->tts_center_left, 4u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->tts_center, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->tts_center, 8u, 0x0fu); + dst_p[4] |= pack_left_shift_u16(src_p->tts_center_right, 4u, 0xf0u); + dst_p[5] |= pack_right_shift_u16(src_p->tts_center_right, 4u, 0xffu); + dst_p[6] |= pack_left_shift_u16(src_p->tts_outet_right, 0u, 0xffu); + dst_p[7] |= pack_right_shift_u16(src_p->tts_outet_right, 8u, 0x0fu); + dst_p[7] |= pack_left_shift_u8(src_p->tts_status, 4u, 0xf0u); + + return (8); +} + +int can1_tts_rr_unpack( + struct can1_tts_rr_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->tts_outer_left = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->tts_outer_left |= unpack_left_shift_u16(src_p[1], 8u, 0x0fu); + dst_p->tts_center_left = unpack_right_shift_u16(src_p[1], 4u, 0xf0u); + dst_p->tts_center_left |= unpack_left_shift_u16(src_p[2], 4u, 0xffu); + dst_p->tts_center = unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->tts_center |= unpack_left_shift_u16(src_p[4], 8u, 0x0fu); + dst_p->tts_center_right = unpack_right_shift_u16(src_p[4], 4u, 0xf0u); + dst_p->tts_center_right |= unpack_left_shift_u16(src_p[5], 4u, 0xffu); + dst_p->tts_outet_right = unpack_right_shift_u16(src_p[6], 0u, 0xffu); + dst_p->tts_outet_right |= unpack_left_shift_u16(src_p[7], 8u, 0x0fu); + dst_p->tts_status = unpack_right_shift_u8(src_p[7], 4u, 0xf0u); + + return (0); +} + +int can1_tts_rr_init(struct can1_tts_rr_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_tts_rr_t)); + + return 0; +} + +uint16_t can1_tts_rr_tts_outer_left_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_tts_rr_tts_outer_left_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_tts_rr_tts_outer_left_is_in_range(uint16_t value) +{ + return (value <= 3547u); +} + +uint16_t can1_tts_rr_tts_center_left_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_tts_rr_tts_center_left_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_tts_rr_tts_center_left_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint16_t can1_tts_rr_tts_center_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_tts_rr_tts_center_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_tts_rr_tts_center_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint16_t can1_tts_rr_tts_center_right_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_tts_rr_tts_center_right_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_tts_rr_tts_center_right_is_in_range(uint16_t value) +{ + return (value <= 3547u); +} + +uint16_t can1_tts_rr_tts_outet_right_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_tts_rr_tts_outet_right_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_tts_rr_tts_outet_right_is_in_range(uint16_t value) +{ + return (value <= 3547u); +} + +uint8_t can1_tts_rr_tts_status_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_tts_rr_tts_status_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_tts_rr_tts_status_is_in_range(uint8_t value) +{ + return (value <= 15u); +} + +int can1_tts_rl_pack( + uint8_t *dst_p, + const struct can1_tts_rl_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u16(src_p->tts_outer_left, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->tts_outer_left, 8u, 0x0fu); + dst_p[1] |= pack_left_shift_u16(src_p->tts_center_left, 4u, 0xf0u); + dst_p[2] |= pack_right_shift_u16(src_p->tts_center_left, 4u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->tts_center, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->tts_center, 8u, 0x0fu); + dst_p[4] |= pack_left_shift_u16(src_p->tts_center_right, 4u, 0xf0u); + dst_p[5] |= pack_right_shift_u16(src_p->tts_center_right, 4u, 0xffu); + dst_p[6] |= pack_left_shift_u16(src_p->tts_outer_right, 0u, 0xffu); + dst_p[7] |= pack_right_shift_u16(src_p->tts_outer_right, 8u, 0x0fu); + dst_p[7] |= pack_left_shift_u8(src_p->tts_status, 4u, 0xf0u); + + return (8); +} + +int can1_tts_rl_unpack( + struct can1_tts_rl_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->tts_outer_left = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->tts_outer_left |= unpack_left_shift_u16(src_p[1], 8u, 0x0fu); + dst_p->tts_center_left = unpack_right_shift_u16(src_p[1], 4u, 0xf0u); + dst_p->tts_center_left |= unpack_left_shift_u16(src_p[2], 4u, 0xffu); + dst_p->tts_center = unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->tts_center |= unpack_left_shift_u16(src_p[4], 8u, 0x0fu); + dst_p->tts_center_right = unpack_right_shift_u16(src_p[4], 4u, 0xf0u); + dst_p->tts_center_right |= unpack_left_shift_u16(src_p[5], 4u, 0xffu); + dst_p->tts_outer_right = unpack_right_shift_u16(src_p[6], 0u, 0xffu); + dst_p->tts_outer_right |= unpack_left_shift_u16(src_p[7], 8u, 0x0fu); + dst_p->tts_status = unpack_right_shift_u8(src_p[7], 4u, 0xf0u); + + return (0); +} + +int can1_tts_rl_init(struct can1_tts_rl_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_tts_rl_t)); + + return 0; +} + +uint16_t can1_tts_rl_tts_outer_left_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_tts_rl_tts_outer_left_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_tts_rl_tts_outer_left_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint16_t can1_tts_rl_tts_center_left_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_tts_rl_tts_center_left_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_tts_rl_tts_center_left_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint16_t can1_tts_rl_tts_center_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_tts_rl_tts_center_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_tts_rl_tts_center_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint16_t can1_tts_rl_tts_center_right_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_tts_rl_tts_center_right_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_tts_rl_tts_center_right_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint16_t can1_tts_rl_tts_outer_right_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_tts_rl_tts_outer_right_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_tts_rl_tts_outer_right_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint8_t can1_tts_rl_tts_status_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_tts_rl_tts_status_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_tts_rl_tts_status_is_in_range(uint8_t value) +{ + return (value <= 15u); +} + +int can1_tts_fr_pack( + uint8_t *dst_p, + const struct can1_tts_fr_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u16(src_p->tts_outer_left, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->tts_outer_left, 8u, 0x0fu); + dst_p[1] |= pack_left_shift_u16(src_p->tts_center_left, 4u, 0xf0u); + dst_p[2] |= pack_right_shift_u16(src_p->tts_center_left, 4u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->tts_center, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->tts_center, 8u, 0x0fu); + dst_p[4] |= pack_left_shift_u16(src_p->tts_center_right, 4u, 0xf0u); + dst_p[5] |= pack_right_shift_u16(src_p->tts_center_right, 4u, 0xffu); + dst_p[6] |= pack_left_shift_u16(src_p->tts_outer_right, 0u, 0xffu); + dst_p[7] |= pack_right_shift_u16(src_p->tts_outer_right, 8u, 0x0fu); + dst_p[7] |= pack_left_shift_u8(src_p->tts_status, 4u, 0xf0u); + + return (8); +} + +int can1_tts_fr_unpack( + struct can1_tts_fr_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->tts_outer_left = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->tts_outer_left |= unpack_left_shift_u16(src_p[1], 8u, 0x0fu); + dst_p->tts_center_left = unpack_right_shift_u16(src_p[1], 4u, 0xf0u); + dst_p->tts_center_left |= unpack_left_shift_u16(src_p[2], 4u, 0xffu); + dst_p->tts_center = unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->tts_center |= unpack_left_shift_u16(src_p[4], 8u, 0x0fu); + dst_p->tts_center_right = unpack_right_shift_u16(src_p[4], 4u, 0xf0u); + dst_p->tts_center_right |= unpack_left_shift_u16(src_p[5], 4u, 0xffu); + dst_p->tts_outer_right = unpack_right_shift_u16(src_p[6], 0u, 0xffu); + dst_p->tts_outer_right |= unpack_left_shift_u16(src_p[7], 8u, 0x0fu); + dst_p->tts_status = unpack_right_shift_u8(src_p[7], 4u, 0xf0u); + + return (0); +} + +int can1_tts_fr_init(struct can1_tts_fr_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_tts_fr_t)); + + return 0; +} + +uint16_t can1_tts_fr_tts_outer_left_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_tts_fr_tts_outer_left_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_tts_fr_tts_outer_left_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint16_t can1_tts_fr_tts_center_left_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_tts_fr_tts_center_left_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_tts_fr_tts_center_left_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint16_t can1_tts_fr_tts_center_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_tts_fr_tts_center_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_tts_fr_tts_center_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint16_t can1_tts_fr_tts_center_right_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_tts_fr_tts_center_right_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_tts_fr_tts_center_right_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint16_t can1_tts_fr_tts_outer_right_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_tts_fr_tts_outer_right_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_tts_fr_tts_outer_right_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint8_t can1_tts_fr_tts_status_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_tts_fr_tts_status_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_tts_fr_tts_status_is_in_range(uint8_t value) +{ + return (value <= 15u); +} + +int can1_tts_fl_pack( + uint8_t *dst_p, + const struct can1_tts_fl_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u16(src_p->tts_outer_left, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->tts_outer_left, 8u, 0x0fu); + dst_p[1] |= pack_left_shift_u16(src_p->tts_center_left, 4u, 0xf0u); + dst_p[2] |= pack_right_shift_u16(src_p->tts_center_left, 4u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->tts_center, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->tts_center, 8u, 0x0fu); + dst_p[4] |= pack_left_shift_u16(src_p->tts_center_right, 4u, 0xf0u); + dst_p[5] |= pack_right_shift_u16(src_p->tts_center_right, 4u, 0xffu); + dst_p[6] |= pack_left_shift_u16(src_p->tts_outer_right, 0u, 0xffu); + dst_p[7] |= pack_right_shift_u16(src_p->tts_outer_right, 8u, 0x0fu); + dst_p[7] |= pack_left_shift_u8(src_p->tts_status, 4u, 0xf0u); + + return (8); +} + +int can1_tts_fl_unpack( + struct can1_tts_fl_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->tts_outer_left = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->tts_outer_left |= unpack_left_shift_u16(src_p[1], 8u, 0x0fu); + dst_p->tts_center_left = unpack_right_shift_u16(src_p[1], 4u, 0xf0u); + dst_p->tts_center_left |= unpack_left_shift_u16(src_p[2], 4u, 0xffu); + dst_p->tts_center = unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->tts_center |= unpack_left_shift_u16(src_p[4], 8u, 0x0fu); + dst_p->tts_center_right = unpack_right_shift_u16(src_p[4], 4u, 0xf0u); + dst_p->tts_center_right |= unpack_left_shift_u16(src_p[5], 4u, 0xffu); + dst_p->tts_outer_right = unpack_right_shift_u16(src_p[6], 0u, 0xffu); + dst_p->tts_outer_right |= unpack_left_shift_u16(src_p[7], 8u, 0x0fu); + dst_p->tts_status = unpack_right_shift_u8(src_p[7], 4u, 0xf0u); + + return (0); +} + +int can1_tts_fl_init(struct can1_tts_fl_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_tts_fl_t)); + + return 0; +} + +uint16_t can1_tts_fl_tts_outer_left_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_tts_fl_tts_outer_left_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_tts_fl_tts_outer_left_is_in_range(uint16_t value) +{ + return (value <= 3547u); +} + +uint16_t can1_tts_fl_tts_center_left_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_tts_fl_tts_center_left_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_tts_fl_tts_center_left_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint16_t can1_tts_fl_tts_center_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_tts_fl_tts_center_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_tts_fl_tts_center_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint16_t can1_tts_fl_tts_center_right_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_tts_fl_tts_center_right_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_tts_fl_tts_center_right_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint16_t can1_tts_fl_tts_outer_right_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_tts_fl_tts_outer_right_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_tts_fl_tts_outer_right_is_in_range(uint16_t value) +{ + return (value <= 4095u); +} + +uint8_t can1_tts_fl_tts_status_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_tts_fl_tts_status_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_tts_fl_tts_status_is_in_range(uint8_t value) +{ + return (value <= 15u); +} + +int can1_stw_param_set_pack( + uint8_t *dst_p, + const struct can1_stw_param_set_t *src_p, + size_t size) +{ + if (size < 6u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 6); + + dst_p[0] |= pack_left_shift_u16(src_p->stw_param_set, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->stw_param_set, 8u, 0xffu); + + switch (src_p->stw_param_set) { + + case 0: + dst_p[2] |= pack_left_shift_u32(src_p->stw_param_slim, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u32(src_p->stw_param_slim, 8u, 0xffu); + dst_p[4] |= pack_right_shift_u32(src_p->stw_param_slim, 16u, 0xffu); + dst_p[5] |= pack_right_shift_u32(src_p->stw_param_slim, 24u, 0xffu); + break; + + case 1: + dst_p[2] |= pack_left_shift_u32(src_p->stw_param_tlim, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u32(src_p->stw_param_tlim, 8u, 0xffu); + dst_p[4] |= pack_right_shift_u32(src_p->stw_param_tlim, 16u, 0xffu); + dst_p[5] |= pack_right_shift_u32(src_p->stw_param_tlim, 24u, 0xffu); + break; + + case 2: + dst_p[2] |= pack_left_shift_u32(src_p->stw_param_plim, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u32(src_p->stw_param_plim, 8u, 0xffu); + dst_p[4] |= pack_right_shift_u32(src_p->stw_param_plim, 16u, 0xffu); + dst_p[5] |= pack_right_shift_u32(src_p->stw_param_plim, 24u, 0xffu); + break; + + case 3: + dst_p[2] |= pack_left_shift_u32(src_p->stw_param_discipline, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u32(src_p->stw_param_discipline, 8u, 0xffu); + dst_p[4] |= pack_right_shift_u32(src_p->stw_param_discipline, 16u, 0xffu); + dst_p[5] |= pack_right_shift_u32(src_p->stw_param_discipline, 24u, 0xffu); + break; + + case 4: + dst_p[2] |= pack_left_shift_u32(src_p->stw_param_tv_on, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u32(src_p->stw_param_tv_on, 8u, 0xffu); + dst_p[4] |= pack_right_shift_u32(src_p->stw_param_tv_on, 16u, 0xffu); + dst_p[5] |= pack_right_shift_u32(src_p->stw_param_tv_on, 24u, 0xffu); + break; + + case 5: + dst_p[2] |= pack_left_shift_u32(src_p->stw_param_tc_on, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u32(src_p->stw_param_tc_on, 8u, 0xffu); + dst_p[4] |= pack_right_shift_u32(src_p->stw_param_tc_on, 16u, 0xffu); + dst_p[5] |= pack_right_shift_u32(src_p->stw_param_tc_on, 24u, 0xffu); + break; + + case 6: + dst_p[2] |= pack_left_shift_u32(src_p->stw_param_reku, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u32(src_p->stw_param_reku, 8u, 0xffu); + dst_p[4] |= pack_right_shift_u32(src_p->stw_param_reku, 16u, 0xffu); + dst_p[5] |= pack_right_shift_u32(src_p->stw_param_reku, 24u, 0xffu); + break; + + case 7: + dst_p[2] |= pack_left_shift_u32(src_p->stw_param_tc_p, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u32(src_p->stw_param_tc_p, 8u, 0xffu); + dst_p[4] |= pack_right_shift_u32(src_p->stw_param_tc_p, 16u, 0xffu); + dst_p[5] |= pack_right_shift_u32(src_p->stw_param_tc_p, 24u, 0xffu); + break; + + case 8: + dst_p[2] |= pack_left_shift_u32(src_p->stw_param_tc_i, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u32(src_p->stw_param_tc_i, 8u, 0xffu); + dst_p[4] |= pack_right_shift_u32(src_p->stw_param_tc_i, 16u, 0xffu); + dst_p[5] |= pack_right_shift_u32(src_p->stw_param_tc_i, 24u, 0xffu); + break; + + case 9: + dst_p[2] |= pack_left_shift_u32(src_p->stw_param_tc_mumax, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u32(src_p->stw_param_tc_mumax, 8u, 0xffu); + dst_p[4] |= pack_right_shift_u32(src_p->stw_param_tc_mumax, 16u, 0xffu); + dst_p[5] |= pack_right_shift_u32(src_p->stw_param_tc_mumax, 24u, 0xffu); + break; + + case 10: + dst_p[2] |= pack_left_shift_u32(src_p->stw_param_tc_slipref, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u32(src_p->stw_param_tc_slipref, 8u, 0xffu); + dst_p[4] |= pack_right_shift_u32(src_p->stw_param_tc_slipref, 16u, 0xffu); + dst_p[5] |= pack_right_shift_u32(src_p->stw_param_tc_slipref, 24u, 0xffu); + break; + + default: + break; + } + + return (6); +} + +int can1_stw_param_set_unpack( + struct can1_stw_param_set_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 6u) { + return (-EINVAL); + } + + dst_p->stw_param_set = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->stw_param_set |= unpack_left_shift_u16(src_p[1], 8u, 0xffu); + + switch (dst_p->stw_param_set) { + + case 0: + dst_p->stw_param_slim = unpack_right_shift_u32(src_p[2], 0u, 0xffu); + dst_p->stw_param_slim |= unpack_left_shift_u32(src_p[3], 8u, 0xffu); + dst_p->stw_param_slim |= unpack_left_shift_u32(src_p[4], 16u, 0xffu); + dst_p->stw_param_slim |= unpack_left_shift_u32(src_p[5], 24u, 0xffu); + break; + + case 1: + dst_p->stw_param_tlim = unpack_right_shift_u32(src_p[2], 0u, 0xffu); + dst_p->stw_param_tlim |= unpack_left_shift_u32(src_p[3], 8u, 0xffu); + dst_p->stw_param_tlim |= unpack_left_shift_u32(src_p[4], 16u, 0xffu); + dst_p->stw_param_tlim |= unpack_left_shift_u32(src_p[5], 24u, 0xffu); + break; + + case 2: + dst_p->stw_param_plim = unpack_right_shift_u32(src_p[2], 0u, 0xffu); + dst_p->stw_param_plim |= unpack_left_shift_u32(src_p[3], 8u, 0xffu); + dst_p->stw_param_plim |= unpack_left_shift_u32(src_p[4], 16u, 0xffu); + dst_p->stw_param_plim |= unpack_left_shift_u32(src_p[5], 24u, 0xffu); + break; + + case 3: + dst_p->stw_param_discipline = unpack_right_shift_u32(src_p[2], 0u, 0xffu); + dst_p->stw_param_discipline |= unpack_left_shift_u32(src_p[3], 8u, 0xffu); + dst_p->stw_param_discipline |= unpack_left_shift_u32(src_p[4], 16u, 0xffu); + dst_p->stw_param_discipline |= unpack_left_shift_u32(src_p[5], 24u, 0xffu); + break; + + case 4: + dst_p->stw_param_tv_on = unpack_right_shift_u32(src_p[2], 0u, 0xffu); + dst_p->stw_param_tv_on |= unpack_left_shift_u32(src_p[3], 8u, 0xffu); + dst_p->stw_param_tv_on |= unpack_left_shift_u32(src_p[4], 16u, 0xffu); + dst_p->stw_param_tv_on |= unpack_left_shift_u32(src_p[5], 24u, 0xffu); + break; + + case 5: + dst_p->stw_param_tc_on = unpack_right_shift_u32(src_p[2], 0u, 0xffu); + dst_p->stw_param_tc_on |= unpack_left_shift_u32(src_p[3], 8u, 0xffu); + dst_p->stw_param_tc_on |= unpack_left_shift_u32(src_p[4], 16u, 0xffu); + dst_p->stw_param_tc_on |= unpack_left_shift_u32(src_p[5], 24u, 0xffu); + break; + + case 6: + dst_p->stw_param_reku = unpack_right_shift_u32(src_p[2], 0u, 0xffu); + dst_p->stw_param_reku |= unpack_left_shift_u32(src_p[3], 8u, 0xffu); + dst_p->stw_param_reku |= unpack_left_shift_u32(src_p[4], 16u, 0xffu); + dst_p->stw_param_reku |= unpack_left_shift_u32(src_p[5], 24u, 0xffu); + break; + + case 7: + dst_p->stw_param_tc_p = unpack_right_shift_u32(src_p[2], 0u, 0xffu); + dst_p->stw_param_tc_p |= unpack_left_shift_u32(src_p[3], 8u, 0xffu); + dst_p->stw_param_tc_p |= unpack_left_shift_u32(src_p[4], 16u, 0xffu); + dst_p->stw_param_tc_p |= unpack_left_shift_u32(src_p[5], 24u, 0xffu); + break; + + case 8: + dst_p->stw_param_tc_i = unpack_right_shift_u32(src_p[2], 0u, 0xffu); + dst_p->stw_param_tc_i |= unpack_left_shift_u32(src_p[3], 8u, 0xffu); + dst_p->stw_param_tc_i |= unpack_left_shift_u32(src_p[4], 16u, 0xffu); + dst_p->stw_param_tc_i |= unpack_left_shift_u32(src_p[5], 24u, 0xffu); + break; + + case 9: + dst_p->stw_param_tc_mumax = unpack_right_shift_u32(src_p[2], 0u, 0xffu); + dst_p->stw_param_tc_mumax |= unpack_left_shift_u32(src_p[3], 8u, 0xffu); + dst_p->stw_param_tc_mumax |= unpack_left_shift_u32(src_p[4], 16u, 0xffu); + dst_p->stw_param_tc_mumax |= unpack_left_shift_u32(src_p[5], 24u, 0xffu); + break; + + case 10: + dst_p->stw_param_tc_slipref = unpack_right_shift_u32(src_p[2], 0u, 0xffu); + dst_p->stw_param_tc_slipref |= unpack_left_shift_u32(src_p[3], 8u, 0xffu); + dst_p->stw_param_tc_slipref |= unpack_left_shift_u32(src_p[4], 16u, 0xffu); + dst_p->stw_param_tc_slipref |= unpack_left_shift_u32(src_p[5], 24u, 0xffu); + break; + + default: + break; + } + + return (0); +} + +int can1_stw_param_set_init(struct can1_stw_param_set_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_stw_param_set_t)); + + return 0; +} + +uint16_t can1_stw_param_set_stw_param_set_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_stw_param_set_stw_param_set_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_stw_param_set_stw_param_set_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint32_t can1_stw_param_set_stw_param_tc_slipref_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_stw_param_set_stw_param_tc_slipref_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_stw_param_set_stw_param_tc_slipref_is_in_range(uint32_t value) +{ + return (value <= 1u); +} + +uint32_t can1_stw_param_set_stw_param_tc_mumax_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_stw_param_set_stw_param_tc_mumax_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_stw_param_set_stw_param_tc_mumax_is_in_range(uint32_t value) +{ + return (value <= 1u); +} + +uint32_t can1_stw_param_set_stw_param_tc_i_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_stw_param_set_stw_param_tc_i_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_stw_param_set_stw_param_tc_i_is_in_range(uint32_t value) +{ + return (value <= 1u); +} + +uint32_t can1_stw_param_set_stw_param_plim_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_stw_param_set_stw_param_plim_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_stw_param_set_stw_param_plim_is_in_range(uint32_t value) +{ + (void)value; + + return (true); +} + +uint32_t can1_stw_param_set_stw_param_tlim_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_stw_param_set_stw_param_tlim_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_stw_param_set_stw_param_tlim_is_in_range(uint32_t value) +{ + return (value <= 1u); +} + +uint32_t can1_stw_param_set_stw_param_tc_p_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_stw_param_set_stw_param_tc_p_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_stw_param_set_stw_param_tc_p_is_in_range(uint32_t value) +{ + return (value <= 1u); +} + +uint32_t can1_stw_param_set_stw_param_reku_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_stw_param_set_stw_param_reku_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_stw_param_set_stw_param_reku_is_in_range(uint32_t value) +{ + return (value <= 1u); +} + +uint32_t can1_stw_param_set_stw_param_tc_on_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_stw_param_set_stw_param_tc_on_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_stw_param_set_stw_param_tc_on_is_in_range(uint32_t value) +{ + return (value <= 1u); +} + +uint32_t can1_stw_param_set_stw_param_tv_on_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_stw_param_set_stw_param_tv_on_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_stw_param_set_stw_param_tv_on_is_in_range(uint32_t value) +{ + return (value <= 1u); +} + +uint32_t can1_stw_param_set_stw_param_discipline_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_stw_param_set_stw_param_discipline_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_stw_param_set_stw_param_discipline_is_in_range(uint32_t value) +{ + return (value <= 1u); +} + +uint32_t can1_stw_param_set_stw_param_slim_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_stw_param_set_stw_param_slim_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_stw_param_set_stw_param_slim_is_in_range(uint32_t value) +{ + return (value <= 1u); +} + +int can1_ams_slave0_status_pack( + uint8_t *dst_p, + const struct can1_ams_slave0_status_t *src_p, + size_t size) +{ + uint16_t ams_slave_status_max_temp; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u8(src_p->ams_slave_status_error, 7u, 0x80u); + dst_p[0] |= pack_left_shift_u8(src_p->ams_slave_status_id, 0u, 0x7fu); + dst_p[1] |= pack_left_shift_u8(src_p->ams_slave_status_temp_sensor, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->ams_slave_status_min_cell_volt, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->ams_slave_status_min_cell_volt, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->ams_slave_status_max_cell_volt, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->ams_slave_status_max_cell_volt, 0u, 0xffu); + ams_slave_status_max_temp = (uint16_t)src_p->ams_slave_status_max_temp; + dst_p[6] |= pack_right_shift_u16(ams_slave_status_max_temp, 8u, 0x0fu); + dst_p[7] |= pack_left_shift_u16(ams_slave_status_max_temp, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave0_status_unpack( + struct can1_ams_slave0_status_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint16_t ams_slave_status_max_temp; + + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_status_error = unpack_right_shift_u8(src_p[0], 7u, 0x80u); + dst_p->ams_slave_status_id = unpack_right_shift_u8(src_p[0], 0u, 0x7fu); + dst_p->ams_slave_status_temp_sensor = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ams_slave_status_min_cell_volt = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->ams_slave_status_min_cell_volt |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->ams_slave_status_max_cell_volt = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->ams_slave_status_max_cell_volt |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + ams_slave_status_max_temp = unpack_left_shift_u16(src_p[6], 8u, 0x0fu); + ams_slave_status_max_temp |= unpack_right_shift_u16(src_p[7], 0u, 0xffu); + + if ((ams_slave_status_max_temp & (1u << 11)) != 0u) { + ams_slave_status_max_temp |= 0xf000u; + } + + dst_p->ams_slave_status_max_temp = (int16_t)ams_slave_status_max_temp; + + return (0); +} + +int can1_ams_slave0_status_init(struct can1_ams_slave0_status_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave0_status_t)); + + return 0; +} + +uint8_t can1_ams_slave0_status_ams_slave_status_error_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_slave0_status_ams_slave_status_error_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave0_status_ams_slave_status_error_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_ams_slave0_status_ams_slave_status_id_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_slave0_status_ams_slave_status_id_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave0_status_ams_slave_status_id_is_in_range(uint8_t value) +{ + return (value <= 127u); +} + +uint8_t can1_ams_slave0_status_ams_slave_status_temp_sensor_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_slave0_status_ams_slave_status_temp_sensor_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave0_status_ams_slave_status_temp_sensor_is_in_range(uint8_t value) +{ + return (value <= 127u); +} + +uint16_t can1_ams_slave0_status_ams_slave_status_min_cell_volt_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave0_status_ams_slave_status_min_cell_volt_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave0_status_ams_slave_status_min_cell_volt_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +uint16_t can1_ams_slave0_status_ams_slave_status_max_cell_volt_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_slave0_status_ams_slave_status_max_cell_volt_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_slave0_status_ams_slave_status_max_cell_volt_is_in_range(uint16_t value) +{ + return (value <= 6553u); +} + +int16_t can1_ams_slave0_status_ams_slave_status_max_temp_encode(double value) +{ + return (int16_t)(value / 0.0625); +} + +double can1_ams_slave0_status_ams_slave_status_max_temp_decode(int16_t value) +{ + return ((double)value * 0.0625); +} + +bool can1_ams_slave0_status_ams_slave_status_max_temp_is_in_range(int16_t value) +{ + return ((value >= 0) && (value <= 16)); +} + +int can1_ssu_message_pack( + uint8_t *dst_p, + const struct can1_ssu_message_t *src_p, + size_t size) +{ + uint16_t ssu_air_temp; + uint16_t ssu_pressure; + + if (size < 4u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 4); + + ssu_pressure = (uint16_t)src_p->ssu_pressure; + dst_p[0] |= pack_left_shift_u16(ssu_pressure, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(ssu_pressure, 8u, 0xffu); + ssu_air_temp = (uint16_t)src_p->ssu_air_temp; + dst_p[2] |= pack_left_shift_u16(ssu_air_temp, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(ssu_air_temp, 8u, 0xffu); + + return (4); +} + +int can1_ssu_message_unpack( + struct can1_ssu_message_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint16_t ssu_air_temp; + uint16_t ssu_pressure; + + if (size < 4u) { + return (-EINVAL); + } + + ssu_pressure = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + ssu_pressure |= unpack_left_shift_u16(src_p[1], 8u, 0xffu); + dst_p->ssu_pressure = (int16_t)ssu_pressure; + ssu_air_temp = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + ssu_air_temp |= unpack_left_shift_u16(src_p[3], 8u, 0xffu); + dst_p->ssu_air_temp = (int16_t)ssu_air_temp; + + return (0); +} + +int can1_ssu_message_init(struct can1_ssu_message_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ssu_message_t)); + + return 0; +} + +int16_t can1_ssu_message_ssu_pressure_encode(double value) +{ + return (int16_t)(value); +} + +double can1_ssu_message_ssu_pressure_decode(int16_t value) +{ + return ((double)value); +} + +bool can1_ssu_message_ssu_pressure_is_in_range(int16_t value) +{ + (void)value; + + return (true); +} + +int16_t can1_ssu_message_ssu_air_temp_encode(double value) +{ + return (int16_t)(value / 0.1); +} + +double can1_ssu_message_ssu_air_temp_decode(int16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_ssu_message_ssu_air_temp_is_in_range(int16_t value) +{ + return ((value >= -200) && (value <= 800)); +} + +int can1_ams_status_pack( + uint8_t *dst_p, + const struct can1_ams_status_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u8(src_p->ams_state, 0u, 0x7fu); + dst_p[0] |= pack_left_shift_u8(src_p->sdc_closed, 7u, 0x80u); + dst_p[1] |= pack_left_shift_u8(src_p->soc, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u16(src_p->min_cell_volt, 8u, 0xffu); + dst_p[3] |= pack_left_shift_u16(src_p->min_cell_volt, 0u, 0xffu); + dst_p[4] |= pack_right_shift_u16(src_p->max_cell_temp, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u16(src_p->max_cell_temp, 0u, 0xffu); + dst_p[6] |= pack_left_shift_u8(src_p->ams_imd_state, 0u, 0x7fu); + dst_p[6] |= pack_left_shift_u8(src_p->ams_imd_ok, 7u, 0x80u); + + return (8); +} + +int can1_ams_status_unpack( + struct can1_ams_status_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_state = unpack_right_shift_u8(src_p[0], 0u, 0x7fu); + dst_p->sdc_closed = unpack_right_shift_u8(src_p[0], 7u, 0x80u); + dst_p->soc = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->min_cell_volt = unpack_left_shift_u16(src_p[2], 8u, 0xffu); + dst_p->min_cell_volt |= unpack_right_shift_u16(src_p[3], 0u, 0xffu); + dst_p->max_cell_temp = unpack_left_shift_u16(src_p[4], 8u, 0xffu); + dst_p->max_cell_temp |= unpack_right_shift_u16(src_p[5], 0u, 0xffu); + dst_p->ams_imd_state = unpack_right_shift_u8(src_p[6], 0u, 0x7fu); + dst_p->ams_imd_ok = unpack_right_shift_u8(src_p[6], 7u, 0x80u); + + return (0); +} + +int can1_ams_status_init(struct can1_ams_status_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_status_t)); + + return 0; +} + +uint8_t can1_ams_status_ams_state_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_status_ams_state_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_status_ams_state_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_ams_status_sdc_closed_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_status_sdc_closed_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_status_sdc_closed_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_ams_status_soc_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_status_soc_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_status_soc_is_in_range(uint8_t value) +{ + return (value <= 100u); +} + +uint16_t can1_ams_status_min_cell_volt_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_ams_status_min_cell_volt_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_ams_status_min_cell_volt_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_ams_status_max_cell_temp_encode(double value) +{ + return (uint16_t)(value / 0.0625); +} + +double can1_ams_status_max_cell_temp_decode(uint16_t value) +{ + return ((double)value * 0.0625); +} + +bool can1_ams_status_max_cell_temp_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_ams_status_ams_imd_state_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_status_ams_imd_state_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_status_ams_imd_state_is_in_range(uint8_t value) +{ + return (value <= 127u); +} + +uint8_t can1_ams_status_ams_imd_ok_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_status_ams_imd_ok_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_status_ams_imd_ok_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +int can1_ams_slave_panic_pack( + uint8_t *dst_p, + const struct can1_ams_slave_panic_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u8(src_p->ams_slave_panic_slave_id, 0u, 0xffu); + dst_p[1] |= pack_left_shift_u8(src_p->ams_slave_panic_kind, 0u, 0xffu); + dst_p[2] |= pack_right_shift_u32(src_p->ams_slave_panic_arg, 24u, 0xffu); + dst_p[3] |= pack_right_shift_u32(src_p->ams_slave_panic_arg, 16u, 0xffu); + dst_p[4] |= pack_right_shift_u32(src_p->ams_slave_panic_arg, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u32(src_p->ams_slave_panic_arg, 0u, 0xffu); + + return (8); +} + +int can1_ams_slave_panic_unpack( + struct can1_ams_slave_panic_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->ams_slave_panic_slave_id = unpack_right_shift_u8(src_p[0], 0u, 0xffu); + dst_p->ams_slave_panic_kind = unpack_right_shift_u8(src_p[1], 0u, 0xffu); + dst_p->ams_slave_panic_arg = unpack_left_shift_u32(src_p[2], 24u, 0xffu); + dst_p->ams_slave_panic_arg |= unpack_left_shift_u32(src_p[3], 16u, 0xffu); + dst_p->ams_slave_panic_arg |= unpack_left_shift_u32(src_p[4], 8u, 0xffu); + dst_p->ams_slave_panic_arg |= unpack_right_shift_u32(src_p[5], 0u, 0xffu); + + return (0); +} + +int can1_ams_slave_panic_init(struct can1_ams_slave_panic_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_slave_panic_t)); + + return 0; +} + +uint8_t can1_ams_slave_panic_ams_slave_panic_slave_id_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_slave_panic_ams_slave_panic_slave_id_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave_panic_ams_slave_panic_slave_id_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_ams_slave_panic_ams_slave_panic_kind_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_slave_panic_ams_slave_panic_kind_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_slave_panic_ams_slave_panic_kind_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint32_t can1_ams_slave_panic_ams_slave_panic_arg_encode(double value) +{ + return (uint32_t)(value); +} + +double can1_ams_slave_panic_ams_slave_panic_arg_decode(uint32_t value) +{ + return ((double)value); +} + +bool can1_ams_slave_panic_ams_slave_panic_arg_is_in_range(uint32_t value) +{ + (void)value; + + return (true); +} + +int can1_ams_in_pack( + uint8_t *dst_p, + const struct can1_ams_in_t *src_p, + size_t size) +{ + if (size < 1u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 1); + + dst_p[0] |= pack_left_shift_u8(src_p->ts_activate, 0u, 0x01u); + dst_p[0] |= pack_left_shift_u8(src_p->inverters_discharged, 1u, 0x02u); + dst_p[0] |= pack_left_shift_u8(src_p->lap_number, 2u, 0xfcu); + + return (1); +} + +int can1_ams_in_unpack( + struct can1_ams_in_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 1u) { + return (-EINVAL); + } + + dst_p->ts_activate = unpack_right_shift_u8(src_p[0], 0u, 0x01u); + dst_p->inverters_discharged = unpack_right_shift_u8(src_p[0], 1u, 0x02u); + dst_p->lap_number = unpack_right_shift_u8(src_p[0], 2u, 0xfcu); + + return (0); +} + +int can1_ams_in_init(struct can1_ams_in_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_ams_in_t)); + + return 0; +} + +uint8_t can1_ams_in_ts_activate_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_in_ts_activate_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_in_ts_activate_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_ams_in_inverters_discharged_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_in_inverters_discharged_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_in_inverters_discharged_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_ams_in_lap_number_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_ams_in_lap_number_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_ams_in_lap_number_is_in_range(uint8_t value) +{ + return (value <= 64u); +} + +int can1_shunt_current_pack( + uint8_t *dst_p, + const struct can1_shunt_current_t *src_p, + size_t size) +{ + uint32_t shunt_current; + + if (size < 6u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 6); + + shunt_current = (uint32_t)src_p->shunt_current; + dst_p[2] |= pack_right_shift_u32(shunt_current, 24u, 0xffu); + dst_p[3] |= pack_right_shift_u32(shunt_current, 16u, 0xffu); + dst_p[4] |= pack_right_shift_u32(shunt_current, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u32(shunt_current, 0u, 0xffu); + + return (6); +} + +int can1_shunt_current_unpack( + struct can1_shunt_current_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint32_t shunt_current; + + if (size < 6u) { + return (-EINVAL); + } + + shunt_current = unpack_left_shift_u32(src_p[2], 24u, 0xffu); + shunt_current |= unpack_left_shift_u32(src_p[3], 16u, 0xffu); + shunt_current |= unpack_left_shift_u32(src_p[4], 8u, 0xffu); + shunt_current |= unpack_right_shift_u32(src_p[5], 0u, 0xffu); + dst_p->shunt_current = (int32_t)shunt_current; + + return (0); +} + +int can1_shunt_current_init(struct can1_shunt_current_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_shunt_current_t)); + + return 0; +} + +int32_t can1_shunt_current_shunt_current_encode(double value) +{ + return (int32_t)(value / 0.001); +} + +double can1_shunt_current_shunt_current_decode(int32_t value) +{ + return ((double)value * 0.001); +} + +bool can1_shunt_current_shunt_current_is_in_range(int32_t value) +{ + return ((value >= -2000000000) && (value <= 2000000000)); +} + +int can1_shunt_voltage1_pack( + uint8_t *dst_p, + const struct can1_shunt_voltage1_t *src_p, + size_t size) +{ + uint32_t shunt_voltage1; + + if (size < 6u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 6); + + shunt_voltage1 = (uint32_t)src_p->shunt_voltage1; + dst_p[2] |= pack_right_shift_u32(shunt_voltage1, 24u, 0xffu); + dst_p[3] |= pack_right_shift_u32(shunt_voltage1, 16u, 0xffu); + dst_p[4] |= pack_right_shift_u32(shunt_voltage1, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u32(shunt_voltage1, 0u, 0xffu); + + return (6); +} + +int can1_shunt_voltage1_unpack( + struct can1_shunt_voltage1_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint32_t shunt_voltage1; + + if (size < 6u) { + return (-EINVAL); + } + + shunt_voltage1 = unpack_left_shift_u32(src_p[2], 24u, 0xffu); + shunt_voltage1 |= unpack_left_shift_u32(src_p[3], 16u, 0xffu); + shunt_voltage1 |= unpack_left_shift_u32(src_p[4], 8u, 0xffu); + shunt_voltage1 |= unpack_right_shift_u32(src_p[5], 0u, 0xffu); + dst_p->shunt_voltage1 = (int32_t)shunt_voltage1; + + return (0); +} + +int can1_shunt_voltage1_init(struct can1_shunt_voltage1_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_shunt_voltage1_t)); + + return 0; +} + +int32_t can1_shunt_voltage1_shunt_voltage1_encode(double value) +{ + return (int32_t)(value / 0.001); +} + +double can1_shunt_voltage1_shunt_voltage1_decode(int32_t value) +{ + return ((double)value * 0.001); +} + +bool can1_shunt_voltage1_shunt_voltage1_is_in_range(int32_t value) +{ + return ((value >= -2000000000) && (value <= 2000000000)); +} + +int can1_shunt_voltage2_pack( + uint8_t *dst_p, + const struct can1_shunt_voltage2_t *src_p, + size_t size) +{ + uint32_t shunt_voltage2; + + if (size < 6u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 6); + + shunt_voltage2 = (uint32_t)src_p->shunt_voltage2; + dst_p[2] |= pack_right_shift_u32(shunt_voltage2, 24u, 0xffu); + dst_p[3] |= pack_right_shift_u32(shunt_voltage2, 16u, 0xffu); + dst_p[4] |= pack_right_shift_u32(shunt_voltage2, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u32(shunt_voltage2, 0u, 0xffu); + + return (6); +} + +int can1_shunt_voltage2_unpack( + struct can1_shunt_voltage2_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint32_t shunt_voltage2; + + if (size < 6u) { + return (-EINVAL); + } + + shunt_voltage2 = unpack_left_shift_u32(src_p[2], 24u, 0xffu); + shunt_voltage2 |= unpack_left_shift_u32(src_p[3], 16u, 0xffu); + shunt_voltage2 |= unpack_left_shift_u32(src_p[4], 8u, 0xffu); + shunt_voltage2 |= unpack_right_shift_u32(src_p[5], 0u, 0xffu); + dst_p->shunt_voltage2 = (int32_t)shunt_voltage2; + + return (0); +} + +int can1_shunt_voltage2_init(struct can1_shunt_voltage2_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_shunt_voltage2_t)); + + return 0; +} + +int32_t can1_shunt_voltage2_shunt_voltage2_encode(double value) +{ + return (int32_t)(value / 0.001); +} + +double can1_shunt_voltage2_shunt_voltage2_decode(int32_t value) +{ + return ((double)value * 0.001); +} + +bool can1_shunt_voltage2_shunt_voltage2_is_in_range(int32_t value) +{ + return ((value >= -2000000000) && (value <= 2000000000)); +} + +int can1_shunt_voltage3_pack( + uint8_t *dst_p, + const struct can1_shunt_voltage3_t *src_p, + size_t size) +{ + uint32_t shunt_voltage3; + + if (size < 6u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 6); + + shunt_voltage3 = (uint32_t)src_p->shunt_voltage3; + dst_p[2] |= pack_right_shift_u32(shunt_voltage3, 24u, 0xffu); + dst_p[3] |= pack_right_shift_u32(shunt_voltage3, 16u, 0xffu); + dst_p[4] |= pack_right_shift_u32(shunt_voltage3, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u32(shunt_voltage3, 0u, 0xffu); + + return (6); +} + +int can1_shunt_voltage3_unpack( + struct can1_shunt_voltage3_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint32_t shunt_voltage3; + + if (size < 6u) { + return (-EINVAL); + } + + shunt_voltage3 = unpack_left_shift_u32(src_p[2], 24u, 0xffu); + shunt_voltage3 |= unpack_left_shift_u32(src_p[3], 16u, 0xffu); + shunt_voltage3 |= unpack_left_shift_u32(src_p[4], 8u, 0xffu); + shunt_voltage3 |= unpack_right_shift_u32(src_p[5], 0u, 0xffu); + dst_p->shunt_voltage3 = (int32_t)shunt_voltage3; + + return (0); +} + +int can1_shunt_voltage3_init(struct can1_shunt_voltage3_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_shunt_voltage3_t)); + + return 0; +} + +int32_t can1_shunt_voltage3_shunt_voltage3_encode(double value) +{ + return (int32_t)(value / 0.001); +} + +double can1_shunt_voltage3_shunt_voltage3_decode(int32_t value) +{ + return ((double)value * 0.001); +} + +bool can1_shunt_voltage3_shunt_voltage3_is_in_range(int32_t value) +{ + return ((value >= -2000000000) && (value <= 2000000000)); +} + +int can1_shunt_temperature_pack( + uint8_t *dst_p, + const struct can1_shunt_temperature_t *src_p, + size_t size) +{ + if (size < 6u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 6); + + dst_p[2] |= pack_right_shift_u32(src_p->shunt_temperature, 24u, 0xffu); + dst_p[3] |= pack_right_shift_u32(src_p->shunt_temperature, 16u, 0xffu); + dst_p[4] |= pack_right_shift_u32(src_p->shunt_temperature, 8u, 0xffu); + dst_p[5] |= pack_left_shift_u32(src_p->shunt_temperature, 0u, 0xffu); + + return (6); +} + +int can1_shunt_temperature_unpack( + struct can1_shunt_temperature_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 6u) { + return (-EINVAL); + } + + dst_p->shunt_temperature = unpack_left_shift_u32(src_p[2], 24u, 0xffu); + dst_p->shunt_temperature |= unpack_left_shift_u32(src_p[3], 16u, 0xffu); + dst_p->shunt_temperature |= unpack_left_shift_u32(src_p[4], 8u, 0xffu); + dst_p->shunt_temperature |= unpack_right_shift_u32(src_p[5], 0u, 0xffu); + + return (0); +} + +int can1_shunt_temperature_init(struct can1_shunt_temperature_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_shunt_temperature_t)); + + return 0; +} + +uint32_t can1_shunt_temperature_shunt_temperature_encode(double value) +{ + return (uint32_t)(value / 0.1); +} + +double can1_shunt_temperature_shunt_temperature_decode(uint32_t value) +{ + return ((double)value * 0.1); +} + +bool can1_shunt_temperature_shunt_temperature_is_in_range(uint32_t value) +{ + return (value <= 10000u); +} + +int can1_pdu_command_pack( + uint8_t *dst_p, + const struct can1_pdu_command_t *src_p, + size_t size) +{ + if (size < 7u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 7); + + dst_p[0] |= pack_left_shift_u8(src_p->pdu_enable_misc, 0u, 0x01u); + dst_p[0] |= pack_left_shift_u8(src_p->pdu_enable_sdc, 1u, 0x02u); + dst_p[0] |= pack_left_shift_u8(src_p->pdu_enable_inverter, 2u, 0x04u); + dst_p[0] |= pack_left_shift_u8(src_p->pdu_enable_ts_cooling, 3u, 0x08u); + dst_p[0] |= pack_left_shift_u8(src_p->pdu_enable_acc_cooling, 4u, 0x10u); + dst_p[0] |= pack_left_shift_u8(src_p->pdu_enable_lldar, 5u, 0x20u); + dst_p[0] |= pack_left_shift_u8(src_p->pdu_enable_drs, 6u, 0x40u); + dst_p[0] |= pack_left_shift_u8(src_p->pdu_enable_epsc, 7u, 0x80u); + dst_p[1] |= pack_left_shift_u8(src_p->pdu_enable_acu, 0u, 0x01u); + dst_p[1] |= pack_left_shift_u8(src_p->pdu_enable_ebs_a, 1u, 0x02u); + dst_p[1] |= pack_left_shift_u8(src_p->pdu_enable_ebs_b, 2u, 0x04u); + dst_p[1] |= pack_left_shift_u8(src_p->pdu_enable_ebs_c, 3u, 0x08u); + + return (7); +} + +int can1_pdu_command_unpack( + struct can1_pdu_command_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 7u) { + return (-EINVAL); + } + + dst_p->pdu_enable_misc = unpack_right_shift_u8(src_p[0], 0u, 0x01u); + dst_p->pdu_enable_sdc = unpack_right_shift_u8(src_p[0], 1u, 0x02u); + dst_p->pdu_enable_inverter = unpack_right_shift_u8(src_p[0], 2u, 0x04u); + dst_p->pdu_enable_ts_cooling = unpack_right_shift_u8(src_p[0], 3u, 0x08u); + dst_p->pdu_enable_acc_cooling = unpack_right_shift_u8(src_p[0], 4u, 0x10u); + dst_p->pdu_enable_lldar = unpack_right_shift_u8(src_p[0], 5u, 0x20u); + dst_p->pdu_enable_drs = unpack_right_shift_u8(src_p[0], 6u, 0x40u); + dst_p->pdu_enable_epsc = unpack_right_shift_u8(src_p[0], 7u, 0x80u); + dst_p->pdu_enable_acu = unpack_right_shift_u8(src_p[1], 0u, 0x01u); + dst_p->pdu_enable_ebs_a = unpack_right_shift_u8(src_p[1], 1u, 0x02u); + dst_p->pdu_enable_ebs_b = unpack_right_shift_u8(src_p[1], 2u, 0x04u); + dst_p->pdu_enable_ebs_c = unpack_right_shift_u8(src_p[1], 3u, 0x08u); + + return (0); +} + +int can1_pdu_command_init(struct can1_pdu_command_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_pdu_command_t)); + + return 0; +} + +uint8_t can1_pdu_command_pdu_enable_misc_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_command_pdu_enable_misc_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_command_pdu_enable_misc_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_command_pdu_enable_sdc_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_command_pdu_enable_sdc_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_command_pdu_enable_sdc_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_command_pdu_enable_inverter_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_command_pdu_enable_inverter_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_command_pdu_enable_inverter_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_command_pdu_enable_ts_cooling_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_command_pdu_enable_ts_cooling_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_command_pdu_enable_ts_cooling_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_command_pdu_enable_acc_cooling_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_command_pdu_enable_acc_cooling_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_command_pdu_enable_acc_cooling_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_command_pdu_enable_lldar_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_command_pdu_enable_lldar_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_command_pdu_enable_lldar_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_command_pdu_enable_drs_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_command_pdu_enable_drs_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_command_pdu_enable_drs_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_command_pdu_enable_epsc_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_command_pdu_enable_epsc_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_command_pdu_enable_epsc_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_command_pdu_enable_acu_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_command_pdu_enable_acu_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_command_pdu_enable_acu_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_command_pdu_enable_ebs_a_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_command_pdu_enable_ebs_a_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_command_pdu_enable_ebs_a_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_command_pdu_enable_ebs_b_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_command_pdu_enable_ebs_b_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_command_pdu_enable_ebs_b_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_command_pdu_enable_ebs_c_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_command_pdu_enable_ebs_c_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_command_pdu_enable_ebs_c_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +int can1_pdu_response_pack( + uint8_t *dst_p, + const struct can1_pdu_response_t *src_p, + size_t size) +{ + if (size < 7u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 7); + + dst_p[0] |= pack_left_shift_u8(src_p->pdu_alwayson_tx, 7u, 0x80u); + dst_p[0] |= pack_left_shift_u8(src_p->pdu_shutdown_circuit_tx, 6u, 0x40u); + dst_p[0] |= pack_left_shift_u8(src_p->pdu_lidar_tx, 5u, 0x20u); + dst_p[0] |= pack_left_shift_u8(src_p->pdu_acu_tx, 3u, 0x08u); + dst_p[0] |= pack_left_shift_u8(src_p->pdu_servos_regler_tx, 2u, 0x04u); + dst_p[0] |= pack_left_shift_u8(src_p->pdu_inverter_tx, 1u, 0x02u); + dst_p[1] |= pack_left_shift_u8(src_p->pdu_misc_tx, 7u, 0x80u); + dst_p[1] |= pack_left_shift_u8(src_p->pdu_servo_tx, 6u, 0x40u); + dst_p[1] |= pack_left_shift_u8(src_p->pdu_ebs_valve_1_tx, 5u, 0x20u); + dst_p[1] |= pack_left_shift_u8(src_p->pdu_ebs_valve_2_tx, 4u, 0x10u); + dst_p[1] |= pack_left_shift_u8(src_p->pdu_cs_valve_tx, 3u, 0x08u); + dst_p[1] |= pack_left_shift_u8(src_p->pdu_aggregat_tx, 1u, 0x02u); + dst_p[1] |= pack_left_shift_u8(src_p->pdu_steering_tx, 0u, 0x01u); + dst_p[2] |= pack_left_shift_u8(src_p->pdu_pwm_tsac_fans, 0u, 0xffu); + dst_p[3] |= pack_left_shift_u8(src_p->pdu_pwm_radiatot_fans_tx, 0u, 0xffu); + dst_p[4] |= pack_left_shift_u8(src_p->pdu_pwm_aggregat, 0u, 0xffu); + dst_p[5] |= pack_left_shift_u8(src_p->pdu_pwm_pump, 0u, 0xffu); + dst_p[6] |= pack_left_shift_u8(src_p->pdu_heartbeat_ok_tx, 0u, 0xffu); + + return (7); +} + +int can1_pdu_response_unpack( + struct can1_pdu_response_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 7u) { + return (-EINVAL); + } + + dst_p->pdu_alwayson_tx = unpack_right_shift_u8(src_p[0], 7u, 0x80u); + dst_p->pdu_shutdown_circuit_tx = unpack_right_shift_u8(src_p[0], 6u, 0x40u); + dst_p->pdu_lidar_tx = unpack_right_shift_u8(src_p[0], 5u, 0x20u); + dst_p->pdu_acu_tx = unpack_right_shift_u8(src_p[0], 3u, 0x08u); + dst_p->pdu_servos_regler_tx = unpack_right_shift_u8(src_p[0], 2u, 0x04u); + dst_p->pdu_inverter_tx = unpack_right_shift_u8(src_p[0], 1u, 0x02u); + dst_p->pdu_misc_tx = unpack_right_shift_u8(src_p[1], 7u, 0x80u); + dst_p->pdu_servo_tx = unpack_right_shift_u8(src_p[1], 6u, 0x40u); + dst_p->pdu_ebs_valve_1_tx = unpack_right_shift_u8(src_p[1], 5u, 0x20u); + dst_p->pdu_ebs_valve_2_tx = unpack_right_shift_u8(src_p[1], 4u, 0x10u); + dst_p->pdu_cs_valve_tx = unpack_right_shift_u8(src_p[1], 3u, 0x08u); + dst_p->pdu_aggregat_tx = unpack_right_shift_u8(src_p[1], 1u, 0x02u); + dst_p->pdu_steering_tx = unpack_right_shift_u8(src_p[1], 0u, 0x01u); + dst_p->pdu_pwm_tsac_fans = unpack_right_shift_u8(src_p[2], 0u, 0xffu); + dst_p->pdu_pwm_radiatot_fans_tx = unpack_right_shift_u8(src_p[3], 0u, 0xffu); + dst_p->pdu_pwm_aggregat = unpack_right_shift_u8(src_p[4], 0u, 0xffu); + dst_p->pdu_pwm_pump = unpack_right_shift_u8(src_p[5], 0u, 0xffu); + dst_p->pdu_heartbeat_ok_tx = unpack_right_shift_u8(src_p[6], 0u, 0xffu); + + return (0); +} + +int can1_pdu_response_init(struct can1_pdu_response_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_pdu_response_t)); + + return 0; +} + +uint8_t can1_pdu_response_pdu_alwayson_tx_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_response_pdu_alwayson_tx_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_response_pdu_alwayson_tx_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_response_pdu_shutdown_circuit_tx_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_response_pdu_shutdown_circuit_tx_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_response_pdu_shutdown_circuit_tx_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_response_pdu_lidar_tx_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_response_pdu_lidar_tx_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_response_pdu_lidar_tx_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_response_pdu_acu_tx_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_response_pdu_acu_tx_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_response_pdu_acu_tx_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_response_pdu_servos_regler_tx_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_response_pdu_servos_regler_tx_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_response_pdu_servos_regler_tx_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_response_pdu_inverter_tx_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_response_pdu_inverter_tx_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_response_pdu_inverter_tx_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_response_pdu_misc_tx_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_response_pdu_misc_tx_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_response_pdu_misc_tx_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_response_pdu_servo_tx_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_response_pdu_servo_tx_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_response_pdu_servo_tx_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_response_pdu_ebs_valve_1_tx_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_response_pdu_ebs_valve_1_tx_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_response_pdu_ebs_valve_1_tx_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_response_pdu_ebs_valve_2_tx_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_response_pdu_ebs_valve_2_tx_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_response_pdu_ebs_valve_2_tx_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_response_pdu_cs_valve_tx_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_response_pdu_cs_valve_tx_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_response_pdu_cs_valve_tx_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_response_pdu_aggregat_tx_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_response_pdu_aggregat_tx_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_response_pdu_aggregat_tx_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_response_pdu_steering_tx_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_response_pdu_steering_tx_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_response_pdu_steering_tx_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_pdu_response_pdu_pwm_tsac_fans_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_response_pdu_pwm_tsac_fans_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_response_pdu_pwm_tsac_fans_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_pdu_response_pdu_pwm_radiatot_fans_tx_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_response_pdu_pwm_radiatot_fans_tx_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_response_pdu_pwm_radiatot_fans_tx_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_pdu_response_pdu_pwm_aggregat_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_response_pdu_pwm_aggregat_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_response_pdu_pwm_aggregat_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_pdu_response_pdu_pwm_pump_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_response_pdu_pwm_pump_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_response_pdu_pwm_pump_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_pdu_response_pdu_heartbeat_ok_tx_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_pdu_response_pdu_heartbeat_ok_tx_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_pdu_response_pdu_heartbeat_ok_tx_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +int can1_as_mission_fb_pack( + uint8_t *dst_p, + const struct can1_as_mission_fb_t *src_p, + size_t size) +{ + if (size < 1u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 1); + + dst_p[0] |= pack_left_shift_u8(src_p->mission_selection, 0u, 0x07u); + + return (1); +} + +int can1_as_mission_fb_unpack( + struct can1_as_mission_fb_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 1u) { + return (-EINVAL); + } + + dst_p->mission_selection = unpack_right_shift_u8(src_p[0], 0u, 0x07u); + + return (0); +} + +int can1_as_mission_fb_init(struct can1_as_mission_fb_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_as_mission_fb_t)); + + return 0; +} + +uint8_t can1_as_mission_fb_mission_selection_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_as_mission_fb_mission_selection_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_as_mission_fb_mission_selection_is_in_range(uint8_t value) +{ + return ((value >= 1u) && (value <= 7u)); +} + +int can1_stw_mission_selected_pack( + uint8_t *dst_p, + const struct can1_stw_mission_selected_t *src_p, + size_t size) +{ + if (size < 1u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 1); + + dst_p[0] |= pack_left_shift_u8(src_p->mission_selection, 0u, 0x07u); + + return (1); +} + +int can1_stw_mission_selected_unpack( + struct can1_stw_mission_selected_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 1u) { + return (-EINVAL); + } + + dst_p->mission_selection = unpack_right_shift_u8(src_p[0], 0u, 0x07u); + + return (0); +} + +int can1_stw_mission_selected_init(struct can1_stw_mission_selected_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_stw_mission_selected_t)); + + return 0; +} + +uint8_t can1_stw_mission_selected_mission_selection_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_mission_selected_mission_selection_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_mission_selected_mission_selection_is_in_range(uint8_t value) +{ + return ((value >= 1u) && (value <= 7u)); +} + +int can1_epsc_out_pack( + uint8_t *dst_p, + const struct can1_epsc_out_t *src_p, + size_t size) +{ + uint16_t epsc_measured_rpm; + + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + epsc_measured_rpm = (uint16_t)src_p->epsc_measured_rpm; + dst_p[0] |= pack_left_shift_u16(epsc_measured_rpm, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(epsc_measured_rpm, 8u, 0xffu); + dst_p[2] |= pack_left_shift_u16(src_p->epsc_measured_steering_angle, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(src_p->epsc_measured_steering_angle, 8u, 0xffu); + dst_p[4] |= pack_left_shift_u16(src_p->epsc_measured_mosfet_temperature, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u16(src_p->epsc_measured_mosfet_temperature, 8u, 0x03u); + dst_p[5] |= pack_left_shift_u16(src_p->epsc_measured_voltage, 2u, 0xfcu); + dst_p[6] |= pack_right_shift_u16(src_p->epsc_measured_voltage, 6u, 0x0fu); + dst_p[7] |= pack_left_shift_u8(src_p->epsc_measured_current, 0u, 0xffu); + + return (8); +} + +int can1_epsc_out_unpack( + struct can1_epsc_out_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint16_t epsc_measured_rpm; + + if (size < 8u) { + return (-EINVAL); + } + + epsc_measured_rpm = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + epsc_measured_rpm |= unpack_left_shift_u16(src_p[1], 8u, 0xffu); + dst_p->epsc_measured_rpm = (int16_t)epsc_measured_rpm; + dst_p->epsc_measured_steering_angle = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + dst_p->epsc_measured_steering_angle |= unpack_left_shift_u16(src_p[3], 8u, 0xffu); + dst_p->epsc_measured_mosfet_temperature = unpack_right_shift_u16(src_p[4], 0u, 0xffu); + dst_p->epsc_measured_mosfet_temperature |= unpack_left_shift_u16(src_p[5], 8u, 0x03u); + dst_p->epsc_measured_voltage = unpack_right_shift_u16(src_p[5], 2u, 0xfcu); + dst_p->epsc_measured_voltage |= unpack_left_shift_u16(src_p[6], 6u, 0x0fu); + dst_p->epsc_measured_current = unpack_right_shift_u8(src_p[7], 0u, 0xffu); + + return (0); +} + +int can1_epsc_out_init(struct can1_epsc_out_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_epsc_out_t)); + + return 0; +} + +int16_t can1_epsc_out_epsc_measured_rpm_encode(double value) +{ + return (int16_t)(value / 0.1); +} + +double can1_epsc_out_epsc_measured_rpm_decode(int16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_epsc_out_epsc_measured_rpm_is_in_range(int16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_epsc_out_epsc_measured_steering_angle_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_epsc_out_epsc_measured_steering_angle_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_epsc_out_epsc_measured_steering_angle_is_in_range(uint16_t value) +{ + return (value <= 36000u); +} + +uint16_t can1_epsc_out_epsc_measured_mosfet_temperature_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_epsc_out_epsc_measured_mosfet_temperature_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_epsc_out_epsc_measured_mosfet_temperature_is_in_range(uint16_t value) +{ + return (value <= 1023u); +} + +uint16_t can1_epsc_out_epsc_measured_voltage_encode(double value) +{ + return (uint16_t)(value / 0.1); +} + +double can1_epsc_out_epsc_measured_voltage_decode(uint16_t value) +{ + return ((double)value * 0.1); +} + +bool can1_epsc_out_epsc_measured_voltage_is_in_range(uint16_t value) +{ + return (value <= 1023u); +} + +uint8_t can1_epsc_out_epsc_measured_current_encode(double value) +{ + return (uint8_t)(value / 0.1); +} + +double can1_epsc_out_epsc_measured_current_decode(uint8_t value) +{ + return ((double)value * 0.1); +} + +bool can1_epsc_out_epsc_measured_current_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +int can1_epsc_steering_in_pack( + uint8_t *dst_p, + const struct can1_epsc_steering_in_t *src_p, + size_t size) +{ + uint16_t epsc_desired_steering_angle; + + if (size < 2u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 2); + + epsc_desired_steering_angle = (uint16_t)src_p->epsc_desired_steering_angle; + dst_p[0] |= pack_left_shift_u16(epsc_desired_steering_angle, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(epsc_desired_steering_angle, 8u, 0x03u); + + return (2); +} + +int can1_epsc_steering_in_unpack( + struct can1_epsc_steering_in_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + uint16_t epsc_desired_steering_angle; + + if (size < 2u) { + return (-EINVAL); + } + + epsc_desired_steering_angle = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + epsc_desired_steering_angle |= unpack_left_shift_u16(src_p[1], 8u, 0x03u); + + if ((epsc_desired_steering_angle & (1u << 9)) != 0u) { + epsc_desired_steering_angle |= 0xfc00u; + } + + dst_p->epsc_desired_steering_angle = (int16_t)epsc_desired_steering_angle; + + return (0); +} + +int can1_epsc_steering_in_init(struct can1_epsc_steering_in_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_epsc_steering_in_t)); + + return 0; +} + +int16_t can1_epsc_steering_in_epsc_desired_steering_angle_encode(double value) +{ + return (int16_t)(value); +} + +double can1_epsc_steering_in_epsc_desired_steering_angle_decode(int16_t value) +{ + return ((double)value); +} + +bool can1_epsc_steering_in_epsc_desired_steering_angle_is_in_range(int16_t value) +{ + return ((value >= 0) && (value <= 0)); +} + +int can1_stw_buttons_pack( + uint8_t *dst_p, + const struct can1_stw_buttons_t *src_p, + size_t size) +{ + if (size < 1u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 1); + + dst_p[0] |= pack_left_shift_u8(src_p->stw_button_drs, 0u, 0x01u); + dst_p[0] |= pack_left_shift_u8(src_p->stw_button_1, 1u, 0x02u); + dst_p[0] |= pack_left_shift_u8(src_p->stw_button_2, 2u, 0x04u); + dst_p[0] |= pack_left_shift_u8(src_p->stw_button_3, 3u, 0x08u); + dst_p[0] |= pack_left_shift_u8(src_p->stw_button_4, 4u, 0x10u); + + return (1); +} + +int can1_stw_buttons_unpack( + struct can1_stw_buttons_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 1u) { + return (-EINVAL); + } + + dst_p->stw_button_drs = unpack_right_shift_u8(src_p[0], 0u, 0x01u); + dst_p->stw_button_1 = unpack_right_shift_u8(src_p[0], 1u, 0x02u); + dst_p->stw_button_2 = unpack_right_shift_u8(src_p[0], 2u, 0x04u); + dst_p->stw_button_3 = unpack_right_shift_u8(src_p[0], 3u, 0x08u); + dst_p->stw_button_4 = unpack_right_shift_u8(src_p[0], 4u, 0x10u); + + return (0); +} + +int can1_stw_buttons_init(struct can1_stw_buttons_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_stw_buttons_t)); + + return 0; +} + +uint8_t can1_stw_buttons_stw_button_drs_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_buttons_stw_button_drs_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_buttons_stw_button_drs_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_stw_buttons_stw_button_1_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_buttons_stw_button_1_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_buttons_stw_button_1_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_stw_buttons_stw_button_2_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_buttons_stw_button_2_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_buttons_stw_button_2_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_stw_buttons_stw_button_3_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_buttons_stw_button_3_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_buttons_stw_button_3_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_stw_buttons_stw_button_4_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_buttons_stw_button_4_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_buttons_stw_button_4_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +int can1_stw_status_pack( + uint8_t *dst_p, + const struct can1_stw_status_t *src_p, + size_t size) +{ + if (size < 7u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 7); + + dst_p[0] |= pack_left_shift_u8(src_p->lap_count, 0u, 0x3fu); + dst_p[0] |= pack_left_shift_u8(src_p->err_pdu, 6u, 0x40u); + dst_p[0] |= pack_left_shift_u8(src_p->err_res, 7u, 0x80u); + dst_p[1] |= pack_left_shift_u8(src_p->r2_d_progress, 0u, 0x0fu); + dst_p[1] |= pack_left_shift_u8(src_p->as_state_stw, 4u, 0x70u); + dst_p[1] |= pack_left_shift_u8(src_p->err_as, 7u, 0x80u); + dst_p[2] |= pack_left_shift_u8(src_p->err_app_sp, 0u, 0x01u); + dst_p[2] |= pack_left_shift_u8(src_p->err_s_bspd, 1u, 0x02u); + dst_p[2] |= pack_left_shift_u8(src_p->err_scs, 2u, 0x04u); + dst_p[2] |= pack_left_shift_u8(src_p->err_con_mon, 3u, 0x08u); + dst_p[2] |= pack_left_shift_u8(src_p->err_ini_chk, 4u, 0x10u); + dst_p[2] |= pack_left_shift_u8(src_p->err_inv2, 5u, 0x20u); + dst_p[2] |= pack_left_shift_u8(src_p->err_inv1, 6u, 0x40u); + dst_p[2] |= pack_left_shift_u8(src_p->err_ams, 7u, 0x80u); + dst_p[3] |= pack_left_shift_u8(src_p->err_sdc, 0u, 0x01u); + dst_p[3] |= pack_left_shift_u8(src_p->sdc_status, 1u, 0x1eu); + dst_p[3] |= pack_left_shift_u8(src_p->inv2_ready, 5u, 0x20u); + dst_p[3] |= pack_left_shift_u8(src_p->inv1_ready, 6u, 0x40u); + dst_p[4] |= pack_left_shift_u16(src_p->energy_per_lap, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u16(src_p->energy_per_lap, 8u, 0xffu); + dst_p[6] |= pack_left_shift_u8(src_p->ini_chk_state, 0u, 0xffu); + + return (7); +} + +int can1_stw_status_unpack( + struct can1_stw_status_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 7u) { + return (-EINVAL); + } + + dst_p->lap_count = unpack_right_shift_u8(src_p[0], 0u, 0x3fu); + dst_p->err_pdu = unpack_right_shift_u8(src_p[0], 6u, 0x40u); + dst_p->err_res = unpack_right_shift_u8(src_p[0], 7u, 0x80u); + dst_p->r2_d_progress = unpack_right_shift_u8(src_p[1], 0u, 0x0fu); + dst_p->as_state_stw = unpack_right_shift_u8(src_p[1], 4u, 0x70u); + dst_p->err_as = unpack_right_shift_u8(src_p[1], 7u, 0x80u); + dst_p->err_app_sp = unpack_right_shift_u8(src_p[2], 0u, 0x01u); + dst_p->err_s_bspd = unpack_right_shift_u8(src_p[2], 1u, 0x02u); + dst_p->err_scs = unpack_right_shift_u8(src_p[2], 2u, 0x04u); + dst_p->err_con_mon = unpack_right_shift_u8(src_p[2], 3u, 0x08u); + dst_p->err_ini_chk = unpack_right_shift_u8(src_p[2], 4u, 0x10u); + dst_p->err_inv2 = unpack_right_shift_u8(src_p[2], 5u, 0x20u); + dst_p->err_inv1 = unpack_right_shift_u8(src_p[2], 6u, 0x40u); + dst_p->err_ams = unpack_right_shift_u8(src_p[2], 7u, 0x80u); + dst_p->err_sdc = unpack_right_shift_u8(src_p[3], 0u, 0x01u); + dst_p->sdc_status = unpack_right_shift_u8(src_p[3], 1u, 0x1eu); + dst_p->inv2_ready = unpack_right_shift_u8(src_p[3], 5u, 0x20u); + dst_p->inv1_ready = unpack_right_shift_u8(src_p[3], 6u, 0x40u); + dst_p->energy_per_lap = unpack_right_shift_u16(src_p[4], 0u, 0xffu); + dst_p->energy_per_lap |= unpack_left_shift_u16(src_p[5], 8u, 0xffu); + dst_p->ini_chk_state = unpack_right_shift_u8(src_p[6], 0u, 0xffu); + + return (0); +} + +int can1_stw_status_init(struct can1_stw_status_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_stw_status_t)); + + return 0; +} + +uint8_t can1_stw_status_lap_count_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_status_lap_count_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_status_lap_count_is_in_range(uint8_t value) +{ + return (value <= 64u); +} + +uint8_t can1_stw_status_err_pdu_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_status_err_pdu_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_status_err_pdu_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_stw_status_err_res_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_status_err_res_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_status_err_res_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_stw_status_r2_d_progress_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_status_r2_d_progress_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_status_r2_d_progress_is_in_range(uint8_t value) +{ + return (value <= 15u); +} + +uint8_t can1_stw_status_as_state_stw_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_status_as_state_stw_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_status_as_state_stw_is_in_range(uint8_t value) +{ + return (value <= 5u); +} + +uint8_t can1_stw_status_err_as_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_status_err_as_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_status_err_as_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_stw_status_err_app_sp_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_status_err_app_sp_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_status_err_app_sp_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_stw_status_err_s_bspd_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_status_err_s_bspd_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_status_err_s_bspd_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_stw_status_err_scs_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_status_err_scs_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_status_err_scs_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_stw_status_err_con_mon_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_status_err_con_mon_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_status_err_con_mon_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_stw_status_err_ini_chk_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_status_err_ini_chk_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_status_err_ini_chk_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_stw_status_err_inv2_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_status_err_inv2_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_status_err_inv2_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_stw_status_err_inv1_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_status_err_inv1_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_status_err_inv1_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_stw_status_err_ams_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_status_err_ams_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_status_err_ams_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_stw_status_err_sdc_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_status_err_sdc_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_status_err_sdc_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_stw_status_sdc_status_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_status_sdc_status_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_status_sdc_status_is_in_range(uint8_t value) +{ + return (value <= 15u); +} + +uint8_t can1_stw_status_inv2_ready_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_status_inv2_ready_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_status_inv2_ready_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint8_t can1_stw_status_inv1_ready_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_status_inv1_ready_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_status_inv1_ready_is_in_range(uint8_t value) +{ + return (value <= 1u); +} + +uint16_t can1_stw_status_energy_per_lap_encode(double value) +{ + return (uint16_t)(value / 0.001); +} + +double can1_stw_status_energy_per_lap_decode(uint16_t value) +{ + return ((double)value * 0.001); +} + +bool can1_stw_status_energy_per_lap_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint8_t can1_stw_status_ini_chk_state_encode(double value) +{ + return (uint8_t)(value); +} + +double can1_stw_status_ini_chk_state_decode(uint8_t value) +{ + return ((double)value); +} + +bool can1_stw_status_ini_chk_state_is_in_range(uint8_t value) +{ + (void)value; + + return (true); +} + +int can1_pdu_current_1_pack( + uint8_t *dst_p, + const struct can1_pdu_current_1_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u16(src_p->pdu_always_on_current, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->pdu_always_on_current, 8u, 0xffu); + dst_p[2] |= pack_left_shift_u16(src_p->pdu_lvms_current, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(src_p->pdu_lvms_current, 8u, 0xffu); + dst_p[4] |= pack_left_shift_u16(src_p->pdu_asms_current, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u16(src_p->pdu_asms_current, 8u, 0xffu); + dst_p[6] |= pack_left_shift_u16(src_p->pdu_misc_current, 0u, 0xffu); + dst_p[7] |= pack_right_shift_u16(src_p->pdu_misc_current, 8u, 0xffu); + + return (8); +} + +int can1_pdu_current_1_unpack( + struct can1_pdu_current_1_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->pdu_always_on_current = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->pdu_always_on_current |= unpack_left_shift_u16(src_p[1], 8u, 0xffu); + dst_p->pdu_lvms_current = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + dst_p->pdu_lvms_current |= unpack_left_shift_u16(src_p[3], 8u, 0xffu); + dst_p->pdu_asms_current = unpack_right_shift_u16(src_p[4], 0u, 0xffu); + dst_p->pdu_asms_current |= unpack_left_shift_u16(src_p[5], 8u, 0xffu); + dst_p->pdu_misc_current = unpack_right_shift_u16(src_p[6], 0u, 0xffu); + dst_p->pdu_misc_current |= unpack_left_shift_u16(src_p[7], 8u, 0xffu); + + return (0); +} + +int can1_pdu_current_1_init(struct can1_pdu_current_1_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_pdu_current_1_t)); + + return 0; +} + +uint16_t can1_pdu_current_1_pdu_always_on_current_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_pdu_current_1_pdu_always_on_current_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_pdu_current_1_pdu_always_on_current_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_pdu_current_1_pdu_lvms_current_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_pdu_current_1_pdu_lvms_current_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_pdu_current_1_pdu_lvms_current_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_pdu_current_1_pdu_asms_current_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_pdu_current_1_pdu_asms_current_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_pdu_current_1_pdu_asms_current_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_pdu_current_1_pdu_misc_current_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_pdu_current_1_pdu_misc_current_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_pdu_current_1_pdu_misc_current_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +int can1_pdu_current_2_pack( + uint8_t *dst_p, + const struct can1_pdu_current_2_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u16(src_p->pdu_sdc_current, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->pdu_sdc_current, 8u, 0xffu); + dst_p[2] |= pack_left_shift_u16(src_p->pdu_inverter_current, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(src_p->pdu_inverter_current, 8u, 0xffu); + dst_p[4] |= pack_left_shift_u16(src_p->pdu_ts_cooling_current, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u16(src_p->pdu_ts_cooling_current, 8u, 0xffu); + dst_p[6] |= pack_left_shift_u16(src_p->pdu_acc_cooling_current, 0u, 0xffu); + dst_p[7] |= pack_right_shift_u16(src_p->pdu_acc_cooling_current, 8u, 0xffu); + + return (8); +} + +int can1_pdu_current_2_unpack( + struct can1_pdu_current_2_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->pdu_sdc_current = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->pdu_sdc_current |= unpack_left_shift_u16(src_p[1], 8u, 0xffu); + dst_p->pdu_inverter_current = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + dst_p->pdu_inverter_current |= unpack_left_shift_u16(src_p[3], 8u, 0xffu); + dst_p->pdu_ts_cooling_current = unpack_right_shift_u16(src_p[4], 0u, 0xffu); + dst_p->pdu_ts_cooling_current |= unpack_left_shift_u16(src_p[5], 8u, 0xffu); + dst_p->pdu_acc_cooling_current = unpack_right_shift_u16(src_p[6], 0u, 0xffu); + dst_p->pdu_acc_cooling_current |= unpack_left_shift_u16(src_p[7], 8u, 0xffu); + + return (0); +} + +int can1_pdu_current_2_init(struct can1_pdu_current_2_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_pdu_current_2_t)); + + return 0; +} + +uint16_t can1_pdu_current_2_pdu_sdc_current_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_pdu_current_2_pdu_sdc_current_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_pdu_current_2_pdu_sdc_current_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_pdu_current_2_pdu_inverter_current_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_pdu_current_2_pdu_inverter_current_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_pdu_current_2_pdu_inverter_current_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_pdu_current_2_pdu_ts_cooling_current_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_pdu_current_2_pdu_ts_cooling_current_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_pdu_current_2_pdu_ts_cooling_current_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_pdu_current_2_pdu_acc_cooling_current_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_pdu_current_2_pdu_acc_cooling_current_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_pdu_current_2_pdu_acc_cooling_current_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +int can1_pdu_current_3_pack( + uint8_t *dst_p, + const struct can1_pdu_current_3_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u16(src_p->pdu_lidar_current, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->pdu_lidar_current, 8u, 0xffu); + dst_p[2] |= pack_left_shift_u16(src_p->pdu_drs_current, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(src_p->pdu_drs_current, 8u, 0xffu); + dst_p[4] |= pack_left_shift_u16(src_p->pdu_epsc_current, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u16(src_p->pdu_epsc_current, 8u, 0xffu); + dst_p[6] |= pack_left_shift_u16(src_p->pdu_acu_current, 0u, 0xffu); + dst_p[7] |= pack_right_shift_u16(src_p->pdu_acu_current, 8u, 0xffu); + + return (8); +} + +int can1_pdu_current_3_unpack( + struct can1_pdu_current_3_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->pdu_lidar_current = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->pdu_lidar_current |= unpack_left_shift_u16(src_p[1], 8u, 0xffu); + dst_p->pdu_drs_current = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + dst_p->pdu_drs_current |= unpack_left_shift_u16(src_p[3], 8u, 0xffu); + dst_p->pdu_epsc_current = unpack_right_shift_u16(src_p[4], 0u, 0xffu); + dst_p->pdu_epsc_current |= unpack_left_shift_u16(src_p[5], 8u, 0xffu); + dst_p->pdu_acu_current = unpack_right_shift_u16(src_p[6], 0u, 0xffu); + dst_p->pdu_acu_current |= unpack_left_shift_u16(src_p[7], 8u, 0xffu); + + return (0); +} + +int can1_pdu_current_3_init(struct can1_pdu_current_3_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_pdu_current_3_t)); + + return 0; +} + +uint16_t can1_pdu_current_3_pdu_lidar_current_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_pdu_current_3_pdu_lidar_current_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_pdu_current_3_pdu_lidar_current_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_pdu_current_3_pdu_drs_current_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_pdu_current_3_pdu_drs_current_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_pdu_current_3_pdu_drs_current_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_pdu_current_3_pdu_epsc_current_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_pdu_current_3_pdu_epsc_current_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_pdu_current_3_pdu_epsc_current_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_pdu_current_3_pdu_acu_current_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_pdu_current_3_pdu_acu_current_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_pdu_current_3_pdu_acu_current_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +int can1_pdu_current_4_pack( + uint8_t *dst_p, + const struct can1_pdu_current_4_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 8); + + dst_p[0] |= pack_left_shift_u16(src_p->pdu_ebs_a_current, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->pdu_ebs_a_current, 8u, 0xffu); + dst_p[2] |= pack_left_shift_u16(src_p->pdu_ebs_b_current, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(src_p->pdu_ebs_b_current, 8u, 0xffu); + + return (8); +} + +int can1_pdu_current_4_unpack( + struct can1_pdu_current_4_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 8u) { + return (-EINVAL); + } + + dst_p->pdu_ebs_a_current = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->pdu_ebs_a_current |= unpack_left_shift_u16(src_p[1], 8u, 0xffu); + dst_p->pdu_ebs_b_current = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + dst_p->pdu_ebs_b_current |= unpack_left_shift_u16(src_p[3], 8u, 0xffu); + + return (0); +} + +int can1_pdu_current_4_init(struct can1_pdu_current_4_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_pdu_current_4_t)); + + return 0; +} + +uint16_t can1_pdu_current_4_pdu_ebs_a_current_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_pdu_current_4_pdu_ebs_a_current_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_pdu_current_4_pdu_ebs_a_current_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_pdu_current_4_pdu_ebs_b_current_encode(double value) +{ + return (uint16_t)(value); +} + +double can1_pdu_current_4_pdu_ebs_b_current_decode(uint16_t value) +{ + return ((double)value); +} + +bool can1_pdu_current_4_pdu_ebs_b_current_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +int can1_epsc_config_in_pack( + uint8_t *dst_p, + const struct can1_epsc_config_in_t *src_p, + size_t size) +{ + if (size < 6u) { + return (-EINVAL); + } + + memset(&dst_p[0], 0, 6); + + dst_p[0] |= pack_left_shift_u16(src_p->epsc_config_p_gain, 0u, 0xffu); + dst_p[1] |= pack_right_shift_u16(src_p->epsc_config_p_gain, 8u, 0xffu); + dst_p[2] |= pack_left_shift_u16(src_p->epsc_config_i_gain, 0u, 0xffu); + dst_p[3] |= pack_right_shift_u16(src_p->epsc_config_i_gain, 8u, 0xffu); + dst_p[4] |= pack_left_shift_u16(src_p->epsc_config_d_gain, 0u, 0xffu); + dst_p[5] |= pack_right_shift_u16(src_p->epsc_config_d_gain, 8u, 0xffu); + + return (6); +} + +int can1_epsc_config_in_unpack( + struct can1_epsc_config_in_t *dst_p, + const uint8_t *src_p, + size_t size) +{ + if (size < 6u) { + return (-EINVAL); + } + + dst_p->epsc_config_p_gain = unpack_right_shift_u16(src_p[0], 0u, 0xffu); + dst_p->epsc_config_p_gain |= unpack_left_shift_u16(src_p[1], 8u, 0xffu); + dst_p->epsc_config_i_gain = unpack_right_shift_u16(src_p[2], 0u, 0xffu); + dst_p->epsc_config_i_gain |= unpack_left_shift_u16(src_p[3], 8u, 0xffu); + dst_p->epsc_config_d_gain = unpack_right_shift_u16(src_p[4], 0u, 0xffu); + dst_p->epsc_config_d_gain |= unpack_left_shift_u16(src_p[5], 8u, 0xffu); + + return (0); +} + +int can1_epsc_config_in_init(struct can1_epsc_config_in_t *msg_p) +{ + if (msg_p == NULL) return -1; + + memset(msg_p, 0, sizeof(struct can1_epsc_config_in_t)); + + return 0; +} + +uint16_t can1_epsc_config_in_epsc_config_p_gain_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_epsc_config_in_epsc_config_p_gain_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_epsc_config_in_epsc_config_p_gain_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_epsc_config_in_epsc_config_i_gain_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_epsc_config_in_epsc_config_i_gain_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_epsc_config_in_epsc_config_i_gain_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} + +uint16_t can1_epsc_config_in_epsc_config_d_gain_encode(double value) +{ + return (uint16_t)(value / 0.01); +} + +double can1_epsc_config_in_epsc_config_d_gain_decode(uint16_t value) +{ + return ((double)value * 0.01); +} + +bool can1_epsc_config_in_epsc_config_d_gain_is_in_range(uint16_t value) +{ + (void)value; + + return (true); +} diff --git a/ros2_ws/src/ft_can_transceiver_lib/src/transceiver.cpp b/ros2_ws/src/ft_can_transceiver_lib/src/transceiver.cpp new file mode 100644 index 0000000..03c4f10 --- /dev/null +++ b/ros2_ws/src/ft_can_transceiver_lib/src/transceiver.cpp @@ -0,0 +1,3812 @@ +#include "transceiver.h" + +canlib::Transceiver::Transceiver() { + +} + +extern "C" canlib::Transceiver::Transceiver(std::string device_name, std::vector filters) { + // Setup CAN Bus + if ((socket_instance = socket(PF_CAN, SOCK_RAW, CAN_RAW)) < 0) { + printf("Cant Init CAN Socket"); + return; + } + + struct ifreq ifr; + strcpy(ifr.ifr_name, device_name.c_str() ); + ioctl(socket_instance, SIOCGIFINDEX, &ifr); + can_filter filter_arr[filters.size()]; + int i = 0; + for (can_filter filter : filters) { + filter_arr[i] = filter; + i++; + } + setsockopt(socket_instance, SOL_CAN_RAW, CAN_RAW_FILTER, filter_arr, sizeof(filter_arr)); + + struct sockaddr_can addr; + memset(&addr, 0, sizeof(addr)); + addr.can_family = AF_CAN; + addr.can_ifindex = ifr.ifr_ifindex; + if (bind(socket_instance, (struct sockaddr *)&addr, sizeof(addr)) < 0) { + perror("Bind"); + printf("Cant Bind CAN Bus Socket"); + return; + } +} + +extern "C" canlib::Transceiver::~Transceiver() { +} + +bool canlib::Transceiver::read(struct can_frame &frame, int timeout_usec) { + fd_set readSet; + FD_ZERO(&readSet); + FD_SET(socket_instance, &readSet); + struct timeval timeout_tv; + timeout_tv.tv_sec = 0; + timeout_tv.tv_usec = timeout_usec; + if (!select(socket_instance + 1, &readSet, NULL, NULL, &timeout_tv)) + { + return false; + } + + // read frame + int nbytes = ::read(socket_instance, &frame, sizeof(struct can_frame)); + + return nbytes == sizeof(struct can_frame); +} + +extern "C" bool canlib::Transceiver::receive(int timeout_us) { + can_frame can_frame_raw; + if(read(can_frame_raw, timeout_us)) { + switch (can_frame_raw.can_id) { + case 1910: + { + can1_inverter_velocity_t can1_inverter_velocity; + can1_inverter_velocity_unpack(&can1_inverter_velocity, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::inverter_velocity_t can1_inverter_velocity_decoded = canlib::decode::can1::inverter_velocity(can1_inverter_velocity); + if(canlib::callback::can1::inverter_velocity != NULL) { + canlib::callback::can1::inverter_velocity(can1_inverter_velocity, can1_inverter_velocity_decoded); + } + return true; + } + case 1920: + { + can1_inverter_errors_warnings_t can1_inverter_errors_warnings; + can1_inverter_errors_warnings_unpack(&can1_inverter_errors_warnings, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::inverter_errors_warnings_t can1_inverter_errors_warnings_decoded = canlib::decode::can1::inverter_errors_warnings(can1_inverter_errors_warnings); + if(canlib::callback::can1::inverter_errors_warnings != NULL) { + canlib::callback::can1::inverter_errors_warnings(can1_inverter_errors_warnings, can1_inverter_errors_warnings_decoded); + } + return true; + } + case 1913: + { + can1_inverter_torque_actual_cw_t can1_inverter_torque_actual_cw; + can1_inverter_torque_actual_cw_unpack(&can1_inverter_torque_actual_cw, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::inverter_torque_actual_cw_t can1_inverter_torque_actual_cw_decoded = canlib::decode::can1::inverter_torque_actual_cw(can1_inverter_torque_actual_cw); + if(canlib::callback::can1::inverter_torque_actual_cw != NULL) { + canlib::callback::can1::inverter_torque_actual_cw(can1_inverter_torque_actual_cw, can1_inverter_torque_actual_cw_decoded); + } + return true; + } + case 1912: + { + can1_inverter_temperatur_t can1_inverter_temperatur; + can1_inverter_temperatur_unpack(&can1_inverter_temperatur, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::inverter_temperatur_t can1_inverter_temperatur_decoded = canlib::decode::can1::inverter_temperatur(can1_inverter_temperatur); + if(canlib::callback::can1::inverter_temperatur != NULL) { + canlib::callback::can1::inverter_temperatur(can1_inverter_temperatur, can1_inverter_temperatur_decoded); + } + return true; + } + case 1911: + { + can1_inverter_torque_wanted_t can1_inverter_torque_wanted; + can1_inverter_torque_wanted_unpack(&can1_inverter_torque_wanted, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::inverter_torque_wanted_t can1_inverter_torque_wanted_decoded = canlib::decode::can1::inverter_torque_wanted(can1_inverter_torque_wanted); + if(canlib::callback::can1::inverter_torque_wanted != NULL) { + canlib::callback::can1::inverter_torque_wanted(can1_inverter_torque_wanted, can1_inverter_torque_wanted_decoded); + } + return true; + } + case 1843: + { + can1_sdo_telemetrie_rx_node1_t can1_sdo_telemetrie_rx_node1; + can1_sdo_telemetrie_rx_node1_unpack(&can1_sdo_telemetrie_rx_node1, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::sdo_telemetrie_rx_node1_t can1_sdo_telemetrie_rx_node1_decoded = canlib::decode::can1::sdo_telemetrie_rx_node1(can1_sdo_telemetrie_rx_node1); + if(canlib::callback::can1::sdo_telemetrie_rx_node1 != NULL) { + canlib::callback::can1::sdo_telemetrie_rx_node1(can1_sdo_telemetrie_rx_node1, can1_sdo_telemetrie_rx_node1_decoded); + } + return true; + } + case 1841: + { + can1_sdo_telemetrie_rx_node2_t can1_sdo_telemetrie_rx_node2; + can1_sdo_telemetrie_rx_node2_unpack(&can1_sdo_telemetrie_rx_node2, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::sdo_telemetrie_rx_node2_t can1_sdo_telemetrie_rx_node2_decoded = canlib::decode::can1::sdo_telemetrie_rx_node2(can1_sdo_telemetrie_rx_node2); + if(canlib::callback::can1::sdo_telemetrie_rx_node2 != NULL) { + canlib::callback::can1::sdo_telemetrie_rx_node2(can1_sdo_telemetrie_rx_node2, can1_sdo_telemetrie_rx_node2_decoded); + } + return true; + } + case 1842: + { + can1_sdo_telemetrie_tx_t can1_sdo_telemetrie_tx; + can1_sdo_telemetrie_tx_unpack(&can1_sdo_telemetrie_tx, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::sdo_telemetrie_tx_t can1_sdo_telemetrie_tx_decoded = canlib::decode::can1::sdo_telemetrie_tx(can1_sdo_telemetrie_tx); + if(canlib::callback::can1::sdo_telemetrie_tx != NULL) { + canlib::callback::can1::sdo_telemetrie_tx(can1_sdo_telemetrie_tx, can1_sdo_telemetrie_tx_decoded); + } + return true; + } + case 1840: + { + can1_laptop_sdo_node_t can1_laptop_sdo_node; + can1_laptop_sdo_node_unpack(&can1_laptop_sdo_node, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::laptop_sdo_node_t can1_laptop_sdo_node_decoded = canlib::decode::can1::laptop_sdo_node(can1_laptop_sdo_node); + if(canlib::callback::can1::laptop_sdo_node != NULL) { + canlib::callback::can1::laptop_sdo_node(can1_laptop_sdo_node, can1_laptop_sdo_node_decoded); + } + return true; + } + case 1811: + { + can1_x_sens_long_lat_t can1_x_sens_long_lat; + can1_x_sens_long_lat_unpack(&can1_x_sens_long_lat, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::x_sens_long_lat_t can1_x_sens_long_lat_decoded = canlib::decode::can1::x_sens_long_lat(can1_x_sens_long_lat); + if(canlib::callback::can1::x_sens_long_lat != NULL) { + canlib::callback::can1::x_sens_long_lat(can1_x_sens_long_lat, can1_x_sens_long_lat_decoded); + } + return true; + } + case 1810: + { + can1_x_sens_rateofturn_t can1_x_sens_rateofturn; + can1_x_sens_rateofturn_unpack(&can1_x_sens_rateofturn, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::x_sens_rateofturn_t can1_x_sens_rateofturn_decoded = canlib::decode::can1::x_sens_rateofturn(can1_x_sens_rateofturn); + if(canlib::callback::can1::x_sens_rateofturn != NULL) { + canlib::callback::can1::x_sens_rateofturn(can1_x_sens_rateofturn, can1_x_sens_rateofturn_decoded); + } + return true; + } + case 1809: + { + can1_x_sens_acceleration_t can1_x_sens_acceleration; + can1_x_sens_acceleration_unpack(&can1_x_sens_acceleration, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::x_sens_acceleration_t can1_x_sens_acceleration_decoded = canlib::decode::can1::x_sens_acceleration(can1_x_sens_acceleration); + if(canlib::callback::can1::x_sens_acceleration != NULL) { + canlib::callback::can1::x_sens_acceleration(can1_x_sens_acceleration, can1_x_sens_acceleration_decoded); + } + return true; + } + case 1812: + { + can1_x_sens_velocity_t can1_x_sens_velocity; + can1_x_sens_velocity_unpack(&can1_x_sens_velocity, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::x_sens_velocity_t can1_x_sens_velocity_decoded = canlib::decode::can1::x_sens_velocity(can1_x_sens_velocity); + if(canlib::callback::can1::x_sens_velocity != NULL) { + canlib::callback::can1::x_sens_velocity(can1_x_sens_velocity, can1_x_sens_velocity_decoded); + } + return true; + } + case 1824: + { + can1_telemetrie_t can1_telemetrie; + can1_telemetrie_unpack(&can1_telemetrie, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::telemetrie_t can1_telemetrie_decoded = canlib::decode::can1::telemetrie(can1_telemetrie); + if(canlib::callback::can1::telemetrie != NULL) { + canlib::callback::can1::telemetrie(can1_telemetrie, can1_telemetrie_decoded); + } + return true; + } + case 1829: + { + can1_override_powermap_t can1_override_powermap; + can1_override_powermap_unpack(&can1_override_powermap, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::override_powermap_t can1_override_powermap_decoded = canlib::decode::can1::override_powermap(can1_override_powermap); + if(canlib::callback::can1::override_powermap != NULL) { + canlib::callback::can1::override_powermap(can1_override_powermap, can1_override_powermap_decoded); + } + return true; + } + case 1828: + { + can1_override_laptop_2_t can1_override_laptop_2; + can1_override_laptop_2_unpack(&can1_override_laptop_2, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::override_laptop_2_t can1_override_laptop_2_decoded = canlib::decode::can1::override_laptop_2(can1_override_laptop_2); + if(canlib::callback::can1::override_laptop_2 != NULL) { + canlib::callback::can1::override_laptop_2(can1_override_laptop_2, can1_override_laptop_2_decoded); + } + return true; + } + case 1827: + { + can1_override_epsc_cooling_t can1_override_epsc_cooling; + can1_override_epsc_cooling_unpack(&can1_override_epsc_cooling, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::override_epsc_cooling_t can1_override_epsc_cooling_decoded = canlib::decode::can1::override_epsc_cooling(can1_override_epsc_cooling); + if(canlib::callback::can1::override_epsc_cooling != NULL) { + canlib::callback::can1::override_epsc_cooling(can1_override_epsc_cooling, can1_override_epsc_cooling_decoded); + } + return true; + } + case 1825: + { + can1_override_laptop_t can1_override_laptop; + can1_override_laptop_unpack(&can1_override_laptop, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::override_laptop_t can1_override_laptop_decoded = canlib::decode::can1::override_laptop(can1_override_laptop); + if(canlib::callback::can1::override_laptop != NULL) { + canlib::callback::can1::override_laptop(can1_override_laptop, can1_override_laptop_decoded); + } + return true; + } + case 1826: + { + can1_apps_override_t can1_apps_override; + can1_apps_override_unpack(&can1_apps_override, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::apps_override_t can1_apps_override_decoded = canlib::decode::can1::apps_override(can1_apps_override); + if(canlib::callback::can1::apps_override != NULL) { + canlib::callback::can1::apps_override(can1_apps_override, can1_apps_override_decoded); + } + return true; + } + case 259: + { + can1_ftcu_damper_t can1_ftcu_damper; + can1_ftcu_damper_unpack(&can1_ftcu_damper, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ftcu_damper_t can1_ftcu_damper_decoded = canlib::decode::can1::ftcu_damper(can1_ftcu_damper); + if(canlib::callback::can1::ftcu_damper != NULL) { + canlib::callback::can1::ftcu_damper(can1_ftcu_damper, can1_ftcu_damper_decoded); + } + return true; + } + case 1043: + { + can1_ftcu_param_confirm_t can1_ftcu_param_confirm; + can1_ftcu_param_confirm_unpack(&can1_ftcu_param_confirm, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ftcu_param_confirm_t can1_ftcu_param_confirm_decoded = canlib::decode::can1::ftcu_param_confirm(can1_ftcu_param_confirm); + if(canlib::callback::can1::ftcu_param_confirm != NULL) { + canlib::callback::can1::ftcu_param_confirm(can1_ftcu_param_confirm, can1_ftcu_param_confirm_decoded); + } + return true; + } + case 209: + { + can1_sensornode_f_10_hz_t can1_sensornode_f_10_hz; + can1_sensornode_f_10_hz_unpack(&can1_sensornode_f_10_hz, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::sensornode_f_10_hz_t can1_sensornode_f_10_hz_decoded = canlib::decode::can1::sensornode_f_10_hz(can1_sensornode_f_10_hz); + if(canlib::callback::can1::sensornode_f_10_hz != NULL) { + canlib::callback::can1::sensornode_f_10_hz(can1_sensornode_f_10_hz, can1_sensornode_f_10_hz_decoded); + } + return true; + } + case 211: + { + can1_sensornode_f_100_hz_1_t can1_sensornode_f_100_hz_1; + can1_sensornode_f_100_hz_1_unpack(&can1_sensornode_f_100_hz_1, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::sensornode_f_100_hz_1_t can1_sensornode_f_100_hz_1_decoded = canlib::decode::can1::sensornode_f_100_hz_1(can1_sensornode_f_100_hz_1); + if(canlib::callback::can1::sensornode_f_100_hz_1 != NULL) { + canlib::callback::can1::sensornode_f_100_hz_1(can1_sensornode_f_100_hz_1, can1_sensornode_f_100_hz_1_decoded); + } + return true; + } + case 213: + { + can1_sensornode_f_100_hz_2_t can1_sensornode_f_100_hz_2; + can1_sensornode_f_100_hz_2_unpack(&can1_sensornode_f_100_hz_2, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::sensornode_f_100_hz_2_t can1_sensornode_f_100_hz_2_decoded = canlib::decode::can1::sensornode_f_100_hz_2(can1_sensornode_f_100_hz_2); + if(canlib::callback::can1::sensornode_f_100_hz_2 != NULL) { + canlib::callback::can1::sensornode_f_100_hz_2(can1_sensornode_f_100_hz_2, can1_sensornode_f_100_hz_2_decoded); + } + return true; + } + case 215: + { + can1_sensornode_f_1k_hz_t can1_sensornode_f_1k_hz; + can1_sensornode_f_1k_hz_unpack(&can1_sensornode_f_1k_hz, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::sensornode_f_1k_hz_t can1_sensornode_f_1k_hz_decoded = canlib::decode::can1::sensornode_f_1k_hz(can1_sensornode_f_1k_hz); + if(canlib::callback::can1::sensornode_f_1k_hz != NULL) { + canlib::callback::can1::sensornode_f_1k_hz(can1_sensornode_f_1k_hz, can1_sensornode_f_1k_hz_decoded); + } + return true; + } + case 210: + { + can1_sensornode_r_10_hz_t can1_sensornode_r_10_hz; + can1_sensornode_r_10_hz_unpack(&can1_sensornode_r_10_hz, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::sensornode_r_10_hz_t can1_sensornode_r_10_hz_decoded = canlib::decode::can1::sensornode_r_10_hz(can1_sensornode_r_10_hz); + if(canlib::callback::can1::sensornode_r_10_hz != NULL) { + canlib::callback::can1::sensornode_r_10_hz(can1_sensornode_r_10_hz, can1_sensornode_r_10_hz_decoded); + } + return true; + } + case 212: + { + can1_sensornode_r_100_hz_t can1_sensornode_r_100_hz; + can1_sensornode_r_100_hz_unpack(&can1_sensornode_r_100_hz, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::sensornode_r_100_hz_t can1_sensornode_r_100_hz_decoded = canlib::decode::can1::sensornode_r_100_hz(can1_sensornode_r_100_hz); + if(canlib::callback::can1::sensornode_r_100_hz != NULL) { + canlib::callback::can1::sensornode_r_100_hz(can1_sensornode_r_100_hz, can1_sensornode_r_100_hz_decoded); + } + return true; + } + case 216: + { + can1_sensornode_r_1k_hz_t can1_sensornode_r_1k_hz; + can1_sensornode_r_1k_hz_unpack(&can1_sensornode_r_1k_hz, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::sensornode_r_1k_hz_t can1_sensornode_r_1k_hz_decoded = canlib::decode::can1::sensornode_r_1k_hz(can1_sensornode_r_1k_hz); + if(canlib::callback::can1::sensornode_r_1k_hz != NULL) { + canlib::callback::can1::sensornode_r_1k_hz(can1_sensornode_r_1k_hz, can1_sensornode_r_1k_hz_decoded); + } + return true; + } + case 220: + { + can1_pwm_duty_cycle_t can1_pwm_duty_cycle; + can1_pwm_duty_cycle_unpack(&can1_pwm_duty_cycle, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::pwm_duty_cycle_t can1_pwm_duty_cycle_decoded = canlib::decode::can1::pwm_duty_cycle(can1_pwm_duty_cycle); + if(canlib::callback::can1::pwm_duty_cycle != NULL) { + canlib::callback::can1::pwm_duty_cycle(can1_pwm_duty_cycle, can1_pwm_duty_cycle_decoded); + } + return true; + } + case 221: + { + can1_pwm_config_t can1_pwm_config; + can1_pwm_config_unpack(&can1_pwm_config, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::pwm_config_t can1_pwm_config_decoded = canlib::decode::can1::pwm_config(can1_pwm_config); + if(canlib::callback::can1::pwm_config != NULL) { + canlib::callback::can1::pwm_config(can1_pwm_config, can1_pwm_config_decoded); + } + return true; + } + case 1056: + { + can1_dashboard_in_t can1_dashboard_in; + can1_dashboard_in_unpack(&can1_dashboard_in, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::dashboard_in_t can1_dashboard_in_decoded = canlib::decode::can1::dashboard_in(can1_dashboard_in); + if(canlib::callback::can1::dashboard_in != NULL) { + canlib::callback::can1::dashboard_in(can1_dashboard_in, can1_dashboard_in_decoded); + } + return true; + } + case 129: + { + can1_ams_slave1_status_t can1_ams_slave1_status; + can1_ams_slave1_status_unpack(&can1_ams_slave1_status, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave1_status_t can1_ams_slave1_status_decoded = canlib::decode::can1::ams_slave1_status(can1_ams_slave1_status); + if(canlib::callback::can1::ams_slave1_status != NULL) { + canlib::callback::can1::ams_slave1_status(can1_ams_slave1_status, can1_ams_slave1_status_decoded); + } + return true; + } + case 1568: + { + can1_ams_slave2_log0_t can1_ams_slave2_log0; + can1_ams_slave2_log0_unpack(&can1_ams_slave2_log0, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave2_log0_t can1_ams_slave2_log0_decoded = canlib::decode::can1::ams_slave2_log0(can1_ams_slave2_log0); + if(canlib::callback::can1::ams_slave2_log0 != NULL) { + canlib::callback::can1::ams_slave2_log0(can1_ams_slave2_log0, can1_ams_slave2_log0_decoded); + } + return true; + } + case 1569: + { + can1_ams_slave2_log1_t can1_ams_slave2_log1; + can1_ams_slave2_log1_unpack(&can1_ams_slave2_log1, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave2_log1_t can1_ams_slave2_log1_decoded = canlib::decode::can1::ams_slave2_log1(can1_ams_slave2_log1); + if(canlib::callback::can1::ams_slave2_log1 != NULL) { + canlib::callback::can1::ams_slave2_log1(can1_ams_slave2_log1, can1_ams_slave2_log1_decoded); + } + return true; + } + case 1570: + { + can1_ams_slave2_log2_t can1_ams_slave2_log2; + can1_ams_slave2_log2_unpack(&can1_ams_slave2_log2, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave2_log2_t can1_ams_slave2_log2_decoded = canlib::decode::can1::ams_slave2_log2(can1_ams_slave2_log2); + if(canlib::callback::can1::ams_slave2_log2 != NULL) { + canlib::callback::can1::ams_slave2_log2(can1_ams_slave2_log2, can1_ams_slave2_log2_decoded); + } + return true; + } + case 1571: + { + can1_ams_slave2_log3_t can1_ams_slave2_log3; + can1_ams_slave2_log3_unpack(&can1_ams_slave2_log3, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave2_log3_t can1_ams_slave2_log3_decoded = canlib::decode::can1::ams_slave2_log3(can1_ams_slave2_log3); + if(canlib::callback::can1::ams_slave2_log3 != NULL) { + canlib::callback::can1::ams_slave2_log3(can1_ams_slave2_log3, can1_ams_slave2_log3_decoded); + } + return true; + } + case 1572: + { + can1_ams_slave2_log4_t can1_ams_slave2_log4; + can1_ams_slave2_log4_unpack(&can1_ams_slave2_log4, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave2_log4_t can1_ams_slave2_log4_decoded = canlib::decode::can1::ams_slave2_log4(can1_ams_slave2_log4); + if(canlib::callback::can1::ams_slave2_log4 != NULL) { + canlib::callback::can1::ams_slave2_log4(can1_ams_slave2_log4, can1_ams_slave2_log4_decoded); + } + return true; + } + case 1573: + { + can1_ams_slave2_log5_t can1_ams_slave2_log5; + can1_ams_slave2_log5_unpack(&can1_ams_slave2_log5, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave2_log5_t can1_ams_slave2_log5_decoded = canlib::decode::can1::ams_slave2_log5(can1_ams_slave2_log5); + if(canlib::callback::can1::ams_slave2_log5 != NULL) { + canlib::callback::can1::ams_slave2_log5(can1_ams_slave2_log5, can1_ams_slave2_log5_decoded); + } + return true; + } + case 1622: + { + can1_ams_slave5_log6_t can1_ams_slave5_log6; + can1_ams_slave5_log6_unpack(&can1_ams_slave5_log6, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave5_log6_t can1_ams_slave5_log6_decoded = canlib::decode::can1::ams_slave5_log6(can1_ams_slave5_log6); + if(canlib::callback::can1::ams_slave5_log6 != NULL) { + canlib::callback::can1::ams_slave5_log6(can1_ams_slave5_log6, can1_ams_slave5_log6_decoded); + } + return true; + } + case 1606: + { + can1_ams_slave4_log6_t can1_ams_slave4_log6; + can1_ams_slave4_log6_unpack(&can1_ams_slave4_log6, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave4_log6_t can1_ams_slave4_log6_decoded = canlib::decode::can1::ams_slave4_log6(can1_ams_slave4_log6); + if(canlib::callback::can1::ams_slave4_log6 != NULL) { + canlib::callback::can1::ams_slave4_log6(can1_ams_slave4_log6, can1_ams_slave4_log6_decoded); + } + return true; + } + case 1590: + { + can1_ams_slave3_log6_t can1_ams_slave3_log6; + can1_ams_slave3_log6_unpack(&can1_ams_slave3_log6, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave3_log6_t can1_ams_slave3_log6_decoded = canlib::decode::can1::ams_slave3_log6(can1_ams_slave3_log6); + if(canlib::callback::can1::ams_slave3_log6 != NULL) { + canlib::callback::can1::ams_slave3_log6(can1_ams_slave3_log6, can1_ams_slave3_log6_decoded); + } + return true; + } + case 1574: + { + can1_ams_slave2_log6_t can1_ams_slave2_log6; + can1_ams_slave2_log6_unpack(&can1_ams_slave2_log6, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave2_log6_t can1_ams_slave2_log6_decoded = canlib::decode::can1::ams_slave2_log6(can1_ams_slave2_log6); + if(canlib::callback::can1::ams_slave2_log6 != NULL) { + canlib::callback::can1::ams_slave2_log6(can1_ams_slave2_log6, can1_ams_slave2_log6_decoded); + } + return true; + } + case 1558: + { + can1_ams_slave1_log6_t can1_ams_slave1_log6; + can1_ams_slave1_log6_unpack(&can1_ams_slave1_log6, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave1_log6_t can1_ams_slave1_log6_decoded = canlib::decode::can1::ams_slave1_log6(can1_ams_slave1_log6); + if(canlib::callback::can1::ams_slave1_log6 != NULL) { + canlib::callback::can1::ams_slave1_log6(can1_ams_slave1_log6, can1_ams_slave1_log6_decoded); + } + return true; + } + case 1621: + { + can1_ams_slave5_log5_t can1_ams_slave5_log5; + can1_ams_slave5_log5_unpack(&can1_ams_slave5_log5, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave5_log5_t can1_ams_slave5_log5_decoded = canlib::decode::can1::ams_slave5_log5(can1_ams_slave5_log5); + if(canlib::callback::can1::ams_slave5_log5 != NULL) { + canlib::callback::can1::ams_slave5_log5(can1_ams_slave5_log5, can1_ams_slave5_log5_decoded); + } + return true; + } + case 1605: + { + can1_ams_slave4_log5_t can1_ams_slave4_log5; + can1_ams_slave4_log5_unpack(&can1_ams_slave4_log5, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave4_log5_t can1_ams_slave4_log5_decoded = canlib::decode::can1::ams_slave4_log5(can1_ams_slave4_log5); + if(canlib::callback::can1::ams_slave4_log5 != NULL) { + canlib::callback::can1::ams_slave4_log5(can1_ams_slave4_log5, can1_ams_slave4_log5_decoded); + } + return true; + } + case 1589: + { + can1_ams_slave3_log5_t can1_ams_slave3_log5; + can1_ams_slave3_log5_unpack(&can1_ams_slave3_log5, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave3_log5_t can1_ams_slave3_log5_decoded = canlib::decode::can1::ams_slave3_log5(can1_ams_slave3_log5); + if(canlib::callback::can1::ams_slave3_log5 != NULL) { + canlib::callback::can1::ams_slave3_log5(can1_ams_slave3_log5, can1_ams_slave3_log5_decoded); + } + return true; + } + case 1557: + { + can1_ams_slave1_log5_t can1_ams_slave1_log5; + can1_ams_slave1_log5_unpack(&can1_ams_slave1_log5, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave1_log5_t can1_ams_slave1_log5_decoded = canlib::decode::can1::ams_slave1_log5(can1_ams_slave1_log5); + if(canlib::callback::can1::ams_slave1_log5 != NULL) { + canlib::callback::can1::ams_slave1_log5(can1_ams_slave1_log5, can1_ams_slave1_log5_decoded); + } + return true; + } + case 1620: + { + can1_ams_slave5_log4_t can1_ams_slave5_log4; + can1_ams_slave5_log4_unpack(&can1_ams_slave5_log4, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave5_log4_t can1_ams_slave5_log4_decoded = canlib::decode::can1::ams_slave5_log4(can1_ams_slave5_log4); + if(canlib::callback::can1::ams_slave5_log4 != NULL) { + canlib::callback::can1::ams_slave5_log4(can1_ams_slave5_log4, can1_ams_slave5_log4_decoded); + } + return true; + } + case 1604: + { + can1_ams_slave4_log4_t can1_ams_slave4_log4; + can1_ams_slave4_log4_unpack(&can1_ams_slave4_log4, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave4_log4_t can1_ams_slave4_log4_decoded = canlib::decode::can1::ams_slave4_log4(can1_ams_slave4_log4); + if(canlib::callback::can1::ams_slave4_log4 != NULL) { + canlib::callback::can1::ams_slave4_log4(can1_ams_slave4_log4, can1_ams_slave4_log4_decoded); + } + return true; + } + case 1588: + { + can1_ams_slave3_log4_t can1_ams_slave3_log4; + can1_ams_slave3_log4_unpack(&can1_ams_slave3_log4, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave3_log4_t can1_ams_slave3_log4_decoded = canlib::decode::can1::ams_slave3_log4(can1_ams_slave3_log4); + if(canlib::callback::can1::ams_slave3_log4 != NULL) { + canlib::callback::can1::ams_slave3_log4(can1_ams_slave3_log4, can1_ams_slave3_log4_decoded); + } + return true; + } + case 1556: + { + can1_ams_slave1_log4_t can1_ams_slave1_log4; + can1_ams_slave1_log4_unpack(&can1_ams_slave1_log4, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave1_log4_t can1_ams_slave1_log4_decoded = canlib::decode::can1::ams_slave1_log4(can1_ams_slave1_log4); + if(canlib::callback::can1::ams_slave1_log4 != NULL) { + canlib::callback::can1::ams_slave1_log4(can1_ams_slave1_log4, can1_ams_slave1_log4_decoded); + } + return true; + } + case 1619: + { + can1_ams_slave5_log3_t can1_ams_slave5_log3; + can1_ams_slave5_log3_unpack(&can1_ams_slave5_log3, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave5_log3_t can1_ams_slave5_log3_decoded = canlib::decode::can1::ams_slave5_log3(can1_ams_slave5_log3); + if(canlib::callback::can1::ams_slave5_log3 != NULL) { + canlib::callback::can1::ams_slave5_log3(can1_ams_slave5_log3, can1_ams_slave5_log3_decoded); + } + return true; + } + case 1603: + { + can1_ams_slave4_log3_t can1_ams_slave4_log3; + can1_ams_slave4_log3_unpack(&can1_ams_slave4_log3, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave4_log3_t can1_ams_slave4_log3_decoded = canlib::decode::can1::ams_slave4_log3(can1_ams_slave4_log3); + if(canlib::callback::can1::ams_slave4_log3 != NULL) { + canlib::callback::can1::ams_slave4_log3(can1_ams_slave4_log3, can1_ams_slave4_log3_decoded); + } + return true; + } + case 1587: + { + can1_ams_slave3_log3_t can1_ams_slave3_log3; + can1_ams_slave3_log3_unpack(&can1_ams_slave3_log3, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave3_log3_t can1_ams_slave3_log3_decoded = canlib::decode::can1::ams_slave3_log3(can1_ams_slave3_log3); + if(canlib::callback::can1::ams_slave3_log3 != NULL) { + canlib::callback::can1::ams_slave3_log3(can1_ams_slave3_log3, can1_ams_slave3_log3_decoded); + } + return true; + } + case 1555: + { + can1_ams_slave1_log3_t can1_ams_slave1_log3; + can1_ams_slave1_log3_unpack(&can1_ams_slave1_log3, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave1_log3_t can1_ams_slave1_log3_decoded = canlib::decode::can1::ams_slave1_log3(can1_ams_slave1_log3); + if(canlib::callback::can1::ams_slave1_log3 != NULL) { + canlib::callback::can1::ams_slave1_log3(can1_ams_slave1_log3, can1_ams_slave1_log3_decoded); + } + return true; + } + case 1618: + { + can1_ams_slave5_log2_t can1_ams_slave5_log2; + can1_ams_slave5_log2_unpack(&can1_ams_slave5_log2, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave5_log2_t can1_ams_slave5_log2_decoded = canlib::decode::can1::ams_slave5_log2(can1_ams_slave5_log2); + if(canlib::callback::can1::ams_slave5_log2 != NULL) { + canlib::callback::can1::ams_slave5_log2(can1_ams_slave5_log2, can1_ams_slave5_log2_decoded); + } + return true; + } + case 1602: + { + can1_ams_slave4_log2_t can1_ams_slave4_log2; + can1_ams_slave4_log2_unpack(&can1_ams_slave4_log2, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave4_log2_t can1_ams_slave4_log2_decoded = canlib::decode::can1::ams_slave4_log2(can1_ams_slave4_log2); + if(canlib::callback::can1::ams_slave4_log2 != NULL) { + canlib::callback::can1::ams_slave4_log2(can1_ams_slave4_log2, can1_ams_slave4_log2_decoded); + } + return true; + } + case 1586: + { + can1_ams_slave3_log2_t can1_ams_slave3_log2; + can1_ams_slave3_log2_unpack(&can1_ams_slave3_log2, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave3_log2_t can1_ams_slave3_log2_decoded = canlib::decode::can1::ams_slave3_log2(can1_ams_slave3_log2); + if(canlib::callback::can1::ams_slave3_log2 != NULL) { + canlib::callback::can1::ams_slave3_log2(can1_ams_slave3_log2, can1_ams_slave3_log2_decoded); + } + return true; + } + case 1554: + { + can1_ams_slave1_log2_t can1_ams_slave1_log2; + can1_ams_slave1_log2_unpack(&can1_ams_slave1_log2, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave1_log2_t can1_ams_slave1_log2_decoded = canlib::decode::can1::ams_slave1_log2(can1_ams_slave1_log2); + if(canlib::callback::can1::ams_slave1_log2 != NULL) { + canlib::callback::can1::ams_slave1_log2(can1_ams_slave1_log2, can1_ams_slave1_log2_decoded); + } + return true; + } + case 1617: + { + can1_ams_slave5_log1_t can1_ams_slave5_log1; + can1_ams_slave5_log1_unpack(&can1_ams_slave5_log1, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave5_log1_t can1_ams_slave5_log1_decoded = canlib::decode::can1::ams_slave5_log1(can1_ams_slave5_log1); + if(canlib::callback::can1::ams_slave5_log1 != NULL) { + canlib::callback::can1::ams_slave5_log1(can1_ams_slave5_log1, can1_ams_slave5_log1_decoded); + } + return true; + } + case 1601: + { + can1_ams_slave4_log1_t can1_ams_slave4_log1; + can1_ams_slave4_log1_unpack(&can1_ams_slave4_log1, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave4_log1_t can1_ams_slave4_log1_decoded = canlib::decode::can1::ams_slave4_log1(can1_ams_slave4_log1); + if(canlib::callback::can1::ams_slave4_log1 != NULL) { + canlib::callback::can1::ams_slave4_log1(can1_ams_slave4_log1, can1_ams_slave4_log1_decoded); + } + return true; + } + case 1585: + { + can1_ams_slave3_log1_t can1_ams_slave3_log1; + can1_ams_slave3_log1_unpack(&can1_ams_slave3_log1, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave3_log1_t can1_ams_slave3_log1_decoded = canlib::decode::can1::ams_slave3_log1(can1_ams_slave3_log1); + if(canlib::callback::can1::ams_slave3_log1 != NULL) { + canlib::callback::can1::ams_slave3_log1(can1_ams_slave3_log1, can1_ams_slave3_log1_decoded); + } + return true; + } + case 1553: + { + can1_ams_slave1_log1_t can1_ams_slave1_log1; + can1_ams_slave1_log1_unpack(&can1_ams_slave1_log1, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave1_log1_t can1_ams_slave1_log1_decoded = canlib::decode::can1::ams_slave1_log1(can1_ams_slave1_log1); + if(canlib::callback::can1::ams_slave1_log1 != NULL) { + canlib::callback::can1::ams_slave1_log1(can1_ams_slave1_log1, can1_ams_slave1_log1_decoded); + } + return true; + } + case 1616: + { + can1_ams_slave5_log0_t can1_ams_slave5_log0; + can1_ams_slave5_log0_unpack(&can1_ams_slave5_log0, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave5_log0_t can1_ams_slave5_log0_decoded = canlib::decode::can1::ams_slave5_log0(can1_ams_slave5_log0); + if(canlib::callback::can1::ams_slave5_log0 != NULL) { + canlib::callback::can1::ams_slave5_log0(can1_ams_slave5_log0, can1_ams_slave5_log0_decoded); + } + return true; + } + case 1600: + { + can1_ams_slave4_log0_t can1_ams_slave4_log0; + can1_ams_slave4_log0_unpack(&can1_ams_slave4_log0, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave4_log0_t can1_ams_slave4_log0_decoded = canlib::decode::can1::ams_slave4_log0(can1_ams_slave4_log0); + if(canlib::callback::can1::ams_slave4_log0 != NULL) { + canlib::callback::can1::ams_slave4_log0(can1_ams_slave4_log0, can1_ams_slave4_log0_decoded); + } + return true; + } + case 1584: + { + can1_ams_slave3_log0_t can1_ams_slave3_log0; + can1_ams_slave3_log0_unpack(&can1_ams_slave3_log0, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave3_log0_t can1_ams_slave3_log0_decoded = canlib::decode::can1::ams_slave3_log0(can1_ams_slave3_log0); + if(canlib::callback::can1::ams_slave3_log0 != NULL) { + canlib::callback::can1::ams_slave3_log0(can1_ams_slave3_log0, can1_ams_slave3_log0_decoded); + } + return true; + } + case 1552: + { + can1_ams_slave1_log0_t can1_ams_slave1_log0; + can1_ams_slave1_log0_unpack(&can1_ams_slave1_log0, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave1_log0_t can1_ams_slave1_log0_decoded = canlib::decode::can1::ams_slave1_log0(can1_ams_slave1_log0); + if(canlib::callback::can1::ams_slave1_log0 != NULL) { + canlib::callback::can1::ams_slave1_log0(can1_ams_slave1_log0, can1_ams_slave1_log0_decoded); + } + return true; + } + case 206: + { + can1_pdu_heartbeat_t can1_pdu_heartbeat; + can1_pdu_heartbeat_unpack(&can1_pdu_heartbeat, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::pdu_heartbeat_t can1_pdu_heartbeat_decoded = canlib::decode::can1::pdu_heartbeat(can1_pdu_heartbeat); + if(canlib::callback::can1::pdu_heartbeat != NULL) { + canlib::callback::can1::pdu_heartbeat(can1_pdu_heartbeat, can1_pdu_heartbeat_decoded); + } + return true; + } + case 272: + { + can1_ftcu_pneumatik_t can1_ftcu_pneumatik; + can1_ftcu_pneumatik_unpack(&can1_ftcu_pneumatik, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ftcu_pneumatik_t can1_ftcu_pneumatik_decoded = canlib::decode::can1::ftcu_pneumatik(can1_ftcu_pneumatik); + if(canlib::callback::can1::ftcu_pneumatik != NULL) { + canlib::callback::can1::ftcu_pneumatik(can1_ftcu_pneumatik, can1_ftcu_pneumatik_decoded); + } + return true; + } + case 227: + { + can1_acu_tx_commands_t can1_acu_tx_commands; + can1_acu_tx_commands_unpack(&can1_acu_tx_commands, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::acu_tx_commands_t can1_acu_tx_commands_decoded = canlib::decode::can1::acu_tx_commands(can1_acu_tx_commands); + if(canlib::callback::can1::acu_tx_commands != NULL) { + canlib::callback::can1::acu_tx_commands(can1_acu_tx_commands, can1_acu_tx_commands_decoded); + } + return true; + } + case 226: + { + can1_acu_rx_commands_t can1_acu_rx_commands; + can1_acu_rx_commands_unpack(&can1_acu_rx_commands, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::acu_rx_commands_t can1_acu_rx_commands_decoded = canlib::decode::can1::acu_rx_commands(can1_acu_rx_commands); + if(canlib::callback::can1::acu_rx_commands != NULL) { + canlib::callback::can1::acu_rx_commands(can1_acu_rx_commands, can1_acu_rx_commands_decoded); + } + return true; + } + case 225: + { + can1_acu_rx_t can1_acu_rx; + can1_acu_rx_unpack(&can1_acu_rx, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::acu_rx_t can1_acu_rx_decoded = canlib::decode::can1::acu_rx(can1_acu_rx); + if(canlib::callback::can1::acu_rx != NULL) { + canlib::callback::can1::acu_rx(can1_acu_rx, can1_acu_rx_decoded); + } + return true; + } + case 1536: + { + can1_ams_slave0_log0_t can1_ams_slave0_log0; + can1_ams_slave0_log0_unpack(&can1_ams_slave0_log0, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave0_log0_t can1_ams_slave0_log0_decoded = canlib::decode::can1::ams_slave0_log0(can1_ams_slave0_log0); + if(canlib::callback::can1::ams_slave0_log0 != NULL) { + canlib::callback::can1::ams_slave0_log0(can1_ams_slave0_log0, can1_ams_slave0_log0_decoded); + } + return true; + } + case 1537: + { + can1_ams_slave0_log1_t can1_ams_slave0_log1; + can1_ams_slave0_log1_unpack(&can1_ams_slave0_log1, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave0_log1_t can1_ams_slave0_log1_decoded = canlib::decode::can1::ams_slave0_log1(can1_ams_slave0_log1); + if(canlib::callback::can1::ams_slave0_log1 != NULL) { + canlib::callback::can1::ams_slave0_log1(can1_ams_slave0_log1, can1_ams_slave0_log1_decoded); + } + return true; + } + case 1539: + { + can1_ams_slave0_log3_t can1_ams_slave0_log3; + can1_ams_slave0_log3_unpack(&can1_ams_slave0_log3, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave0_log3_t can1_ams_slave0_log3_decoded = canlib::decode::can1::ams_slave0_log3(can1_ams_slave0_log3); + if(canlib::callback::can1::ams_slave0_log3 != NULL) { + canlib::callback::can1::ams_slave0_log3(can1_ams_slave0_log3, can1_ams_slave0_log3_decoded); + } + return true; + } + case 1540: + { + can1_ams_slave0_log4_t can1_ams_slave0_log4; + can1_ams_slave0_log4_unpack(&can1_ams_slave0_log4, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave0_log4_t can1_ams_slave0_log4_decoded = canlib::decode::can1::ams_slave0_log4(can1_ams_slave0_log4); + if(canlib::callback::can1::ams_slave0_log4 != NULL) { + canlib::callback::can1::ams_slave0_log4(can1_ams_slave0_log4, can1_ams_slave0_log4_decoded); + } + return true; + } + case 1541: + { + can1_ams_slave0_log5_t can1_ams_slave0_log5; + can1_ams_slave0_log5_unpack(&can1_ams_slave0_log5, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave0_log5_t can1_ams_slave0_log5_decoded = canlib::decode::can1::ams_slave0_log5(can1_ams_slave0_log5); + if(canlib::callback::can1::ams_slave0_log5 != NULL) { + canlib::callback::can1::ams_slave0_log5(can1_ams_slave0_log5, can1_ams_slave0_log5_decoded); + } + return true; + } + case 1542: + { + can1_ams_slave0_log6_t can1_ams_slave0_log6; + can1_ams_slave0_log6_unpack(&can1_ams_slave0_log6, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave0_log6_t can1_ams_slave0_log6_decoded = canlib::decode::can1::ams_slave0_log6(can1_ams_slave0_log6); + if(canlib::callback::can1::ams_slave0_log6 != NULL) { + canlib::callback::can1::ams_slave0_log6(can1_ams_slave0_log6, can1_ams_slave0_log6_decoded); + } + return true; + } + case 224: + { + can1_acu_tx_t can1_acu_tx; + can1_acu_tx_unpack(&can1_acu_tx, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::acu_tx_t can1_acu_tx_decoded = canlib::decode::can1::acu_tx(can1_acu_tx); + if(canlib::callback::can1::acu_tx != NULL) { + canlib::callback::can1::acu_tx(can1_acu_tx, can1_acu_tx_decoded); + } + return true; + } + case 133: + { + can1_ams_slave5_status_t can1_ams_slave5_status; + can1_ams_slave5_status_unpack(&can1_ams_slave5_status, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave5_status_t can1_ams_slave5_status_decoded = canlib::decode::can1::ams_slave5_status(can1_ams_slave5_status); + if(canlib::callback::can1::ams_slave5_status != NULL) { + canlib::callback::can1::ams_slave5_status(can1_ams_slave5_status, can1_ams_slave5_status_decoded); + } + return true; + } + case 132: + { + can1_ams_slave4_status_t can1_ams_slave4_status; + can1_ams_slave4_status_unpack(&can1_ams_slave4_status, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave4_status_t can1_ams_slave4_status_decoded = canlib::decode::can1::ams_slave4_status(can1_ams_slave4_status); + if(canlib::callback::can1::ams_slave4_status != NULL) { + canlib::callback::can1::ams_slave4_status(can1_ams_slave4_status, can1_ams_slave4_status_decoded); + } + return true; + } + case 131: + { + can1_ams_slave3_status_t can1_ams_slave3_status; + can1_ams_slave3_status_unpack(&can1_ams_slave3_status, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave3_status_t can1_ams_slave3_status_decoded = canlib::decode::can1::ams_slave3_status(can1_ams_slave3_status); + if(canlib::callback::can1::ams_slave3_status != NULL) { + canlib::callback::can1::ams_slave3_status(can1_ams_slave3_status, can1_ams_slave3_status_decoded); + } + return true; + } + case 130: + { + can1_ams_slave2_status_t can1_ams_slave2_status; + can1_ams_slave2_status_unpack(&can1_ams_slave2_status, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave2_status_t can1_ams_slave2_status_decoded = canlib::decode::can1::ams_slave2_status(can1_ams_slave2_status); + if(canlib::callback::can1::ams_slave2_status != NULL) { + canlib::callback::can1::ams_slave2_status(can1_ams_slave2_status, can1_ams_slave2_status_decoded); + } + return true; + } + case 12: + { + can1_ams_error_t can1_ams_error; + can1_ams_error_unpack(&can1_ams_error, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_error_t can1_ams_error_decoded = canlib::decode::can1::ams_error(can1_ams_error); + if(canlib::callback::can1::ams_error != NULL) { + canlib::callback::can1::ams_error(can1_ams_error, can1_ams_error_decoded); + } + return true; + } + case 263: + { + can1_ftcu_cooling_t can1_ftcu_cooling; + can1_ftcu_cooling_unpack(&can1_ftcu_cooling, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ftcu_cooling_t can1_ftcu_cooling_decoded = canlib::decode::can1::ftcu_cooling(can1_ftcu_cooling); + if(canlib::callback::can1::ftcu_cooling != NULL) { + canlib::callback::can1::ftcu_cooling(can1_ftcu_cooling, can1_ftcu_cooling_decoded); + } + return true; + } + case 261: + { + can1_ftcu_brake_t_t can1_ftcu_brake_t; + can1_ftcu_brake_t_unpack(&can1_ftcu_brake_t, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ftcu_brake_t_t can1_ftcu_brake_t_decoded = canlib::decode::can1::ftcu_brake_t(can1_ftcu_brake_t); + if(canlib::callback::can1::ftcu_brake_t != NULL) { + canlib::callback::can1::ftcu_brake_t(can1_ftcu_brake_t, can1_ftcu_brake_t_decoded); + } + return true; + } + case 260: + { + can1_ftcu_wheelspeed_t can1_ftcu_wheelspeed; + can1_ftcu_wheelspeed_unpack(&can1_ftcu_wheelspeed, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ftcu_wheelspeed_t can1_ftcu_wheelspeed_decoded = canlib::decode::can1::ftcu_wheelspeed(can1_ftcu_wheelspeed); + if(canlib::callback::can1::ftcu_wheelspeed != NULL) { + canlib::callback::can1::ftcu_wheelspeed(can1_ftcu_wheelspeed, can1_ftcu_wheelspeed_decoded); + } + return true; + } + case 258: + { + can1_ftcu_timings_t can1_ftcu_timings; + can1_ftcu_timings_unpack(&can1_ftcu_timings, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ftcu_timings_t can1_ftcu_timings_decoded = canlib::decode::can1::ftcu_timings(can1_ftcu_timings); + if(canlib::callback::can1::ftcu_timings != NULL) { + canlib::callback::can1::ftcu_timings(can1_ftcu_timings, can1_ftcu_timings_decoded); + } + return true; + } + case 273: + { + can1_ftcu_driver_t can1_ftcu_driver; + can1_ftcu_driver_unpack(&can1_ftcu_driver, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ftcu_driver_t can1_ftcu_driver_decoded = canlib::decode::can1::ftcu_driver(can1_ftcu_driver); + if(canlib::callback::can1::ftcu_driver != NULL) { + canlib::callback::can1::ftcu_driver(can1_ftcu_driver, can1_ftcu_driver_decoded); + } + return true; + } + case 1796: + { + can1_tts_rr_t can1_tts_rr; + can1_tts_rr_unpack(&can1_tts_rr, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::tts_rr_t can1_tts_rr_decoded = canlib::decode::can1::tts_rr(can1_tts_rr); + if(canlib::callback::can1::tts_rr != NULL) { + canlib::callback::can1::tts_rr(can1_tts_rr, can1_tts_rr_decoded); + } + return true; + } + case 1795: + { + can1_tts_rl_t can1_tts_rl; + can1_tts_rl_unpack(&can1_tts_rl, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::tts_rl_t can1_tts_rl_decoded = canlib::decode::can1::tts_rl(can1_tts_rl); + if(canlib::callback::can1::tts_rl != NULL) { + canlib::callback::can1::tts_rl(can1_tts_rl, can1_tts_rl_decoded); + } + return true; + } + case 1794: + { + can1_tts_fr_t can1_tts_fr; + can1_tts_fr_unpack(&can1_tts_fr, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::tts_fr_t can1_tts_fr_decoded = canlib::decode::can1::tts_fr(can1_tts_fr); + if(canlib::callback::can1::tts_fr != NULL) { + canlib::callback::can1::tts_fr(can1_tts_fr, can1_tts_fr_decoded); + } + return true; + } + case 1793: + { + can1_tts_fl_t can1_tts_fl; + can1_tts_fl_unpack(&can1_tts_fl, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::tts_fl_t can1_tts_fl_decoded = canlib::decode::can1::tts_fl(can1_tts_fl); + if(canlib::callback::can1::tts_fl != NULL) { + canlib::callback::can1::tts_fl(can1_tts_fl, can1_tts_fl_decoded); + } + return true; + } + case 1026: + { + can1_stw_param_set_t can1_stw_param_set; + can1_stw_param_set_unpack(&can1_stw_param_set, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::stw_param_set_t can1_stw_param_set_decoded = canlib::decode::can1::stw_param_set(can1_stw_param_set); + if(canlib::callback::can1::stw_param_set != NULL) { + canlib::callback::can1::stw_param_set(can1_stw_param_set, can1_stw_param_set_decoded); + } + return true; + } + case 128: + { + can1_ams_slave0_status_t can1_ams_slave0_status; + can1_ams_slave0_status_unpack(&can1_ams_slave0_status, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave0_status_t can1_ams_slave0_status_decoded = canlib::decode::can1::ams_slave0_status(can1_ams_slave0_status); + if(canlib::callback::can1::ams_slave0_status != NULL) { + canlib::callback::can1::ams_slave0_status(can1_ams_slave0_status, can1_ams_slave0_status_decoded); + } + return true; + } + case 1280: + { + can1_ssu_message_t can1_ssu_message; + can1_ssu_message_unpack(&can1_ssu_message, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ssu_message_t can1_ssu_message_decoded = canlib::decode::can1::ssu_message(can1_ssu_message); + if(canlib::callback::can1::ssu_message != NULL) { + canlib::callback::can1::ssu_message(can1_ssu_message, can1_ssu_message_decoded); + } + return true; + } + case 10: + { + can1_ams_status_t can1_ams_status; + can1_ams_status_unpack(&can1_ams_status, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_status_t can1_ams_status_decoded = canlib::decode::can1::ams_status(can1_ams_status); + if(canlib::callback::can1::ams_status != NULL) { + canlib::callback::can1::ams_status(can1_ams_status, can1_ams_status_decoded); + } + return true; + } + case 9: + { + can1_ams_slave_panic_t can1_ams_slave_panic; + can1_ams_slave_panic_unpack(&can1_ams_slave_panic, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_slave_panic_t can1_ams_slave_panic_decoded = canlib::decode::can1::ams_slave_panic(can1_ams_slave_panic); + if(canlib::callback::can1::ams_slave_panic != NULL) { + canlib::callback::can1::ams_slave_panic(can1_ams_slave_panic, can1_ams_slave_panic_decoded); + } + return true; + } + case 11: + { + can1_ams_in_t can1_ams_in; + can1_ams_in_unpack(&can1_ams_in, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::ams_in_t can1_ams_in_decoded = canlib::decode::can1::ams_in(can1_ams_in); + if(canlib::callback::can1::ams_in != NULL) { + canlib::callback::can1::ams_in(can1_ams_in, can1_ams_in_decoded); + } + return true; + } + case 1313: + { + can1_shunt_current_t can1_shunt_current; + can1_shunt_current_unpack(&can1_shunt_current, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::shunt_current_t can1_shunt_current_decoded = canlib::decode::can1::shunt_current(can1_shunt_current); + if(canlib::callback::can1::shunt_current != NULL) { + canlib::callback::can1::shunt_current(can1_shunt_current, can1_shunt_current_decoded); + } + return true; + } + case 1314: + { + can1_shunt_voltage1_t can1_shunt_voltage1; + can1_shunt_voltage1_unpack(&can1_shunt_voltage1, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::shunt_voltage1_t can1_shunt_voltage1_decoded = canlib::decode::can1::shunt_voltage1(can1_shunt_voltage1); + if(canlib::callback::can1::shunt_voltage1 != NULL) { + canlib::callback::can1::shunt_voltage1(can1_shunt_voltage1, can1_shunt_voltage1_decoded); + } + return true; + } + case 1315: + { + can1_shunt_voltage2_t can1_shunt_voltage2; + can1_shunt_voltage2_unpack(&can1_shunt_voltage2, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::shunt_voltage2_t can1_shunt_voltage2_decoded = canlib::decode::can1::shunt_voltage2(can1_shunt_voltage2); + if(canlib::callback::can1::shunt_voltage2 != NULL) { + canlib::callback::can1::shunt_voltage2(can1_shunt_voltage2, can1_shunt_voltage2_decoded); + } + return true; + } + case 1316: + { + can1_shunt_voltage3_t can1_shunt_voltage3; + can1_shunt_voltage3_unpack(&can1_shunt_voltage3, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::shunt_voltage3_t can1_shunt_voltage3_decoded = canlib::decode::can1::shunt_voltage3(can1_shunt_voltage3); + if(canlib::callback::can1::shunt_voltage3 != NULL) { + canlib::callback::can1::shunt_voltage3(can1_shunt_voltage3, can1_shunt_voltage3_decoded); + } + return true; + } + case 1317: + { + can1_shunt_temperature_t can1_shunt_temperature; + can1_shunt_temperature_unpack(&can1_shunt_temperature, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::shunt_temperature_t can1_shunt_temperature_decoded = canlib::decode::can1::shunt_temperature(can1_shunt_temperature); + if(canlib::callback::can1::shunt_temperature != NULL) { + canlib::callback::can1::shunt_temperature(can1_shunt_temperature, can1_shunt_temperature_decoded); + } + return true; + } + case 200: + { + can1_pdu_command_t can1_pdu_command; + can1_pdu_command_unpack(&can1_pdu_command, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::pdu_command_t can1_pdu_command_decoded = canlib::decode::can1::pdu_command(can1_pdu_command); + if(canlib::callback::can1::pdu_command != NULL) { + canlib::callback::can1::pdu_command(can1_pdu_command, can1_pdu_command_decoded); + } + return true; + } + case 201: + { + can1_pdu_response_t can1_pdu_response; + can1_pdu_response_unpack(&can1_pdu_response, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::pdu_response_t can1_pdu_response_decoded = canlib::decode::can1::pdu_response(can1_pdu_response); + if(canlib::callback::can1::pdu_response != NULL) { + canlib::callback::can1::pdu_response(can1_pdu_response, can1_pdu_response_decoded); + } + return true; + } + case 1040: + { + can1_as_mission_fb_t can1_as_mission_fb; + can1_as_mission_fb_unpack(&can1_as_mission_fb, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::as_mission_fb_t can1_as_mission_fb_decoded = canlib::decode::can1::as_mission_fb(can1_as_mission_fb); + if(canlib::callback::can1::as_mission_fb != NULL) { + canlib::callback::can1::as_mission_fb(can1_as_mission_fb, can1_as_mission_fb_decoded); + } + return true; + } + case 1024: + { + can1_stw_mission_selected_t can1_stw_mission_selected; + can1_stw_mission_selected_unpack(&can1_stw_mission_selected, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::stw_mission_selected_t can1_stw_mission_selected_decoded = canlib::decode::can1::stw_mission_selected(can1_stw_mission_selected); + if(canlib::callback::can1::stw_mission_selected != NULL) { + canlib::callback::can1::stw_mission_selected(can1_stw_mission_selected, can1_stw_mission_selected_decoded); + } + return true; + } + case 293: + { + can1_epsc_out_t can1_epsc_out; + can1_epsc_out_unpack(&can1_epsc_out, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::epsc_out_t can1_epsc_out_decoded = canlib::decode::can1::epsc_out(can1_epsc_out); + if(canlib::callback::can1::epsc_out != NULL) { + canlib::callback::can1::epsc_out(can1_epsc_out, can1_epsc_out_decoded); + } + return true; + } + case 291: + { + can1_epsc_steering_in_t can1_epsc_steering_in; + can1_epsc_steering_in_unpack(&can1_epsc_steering_in, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::epsc_steering_in_t can1_epsc_steering_in_decoded = canlib::decode::can1::epsc_steering_in(can1_epsc_steering_in); + if(canlib::callback::can1::epsc_steering_in != NULL) { + canlib::callback::can1::epsc_steering_in(can1_epsc_steering_in, can1_epsc_steering_in_decoded); + } + return true; + } + case 1025: + { + can1_stw_buttons_t can1_stw_buttons; + can1_stw_buttons_unpack(&can1_stw_buttons, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::stw_buttons_t can1_stw_buttons_decoded = canlib::decode::can1::stw_buttons(can1_stw_buttons); + if(canlib::callback::can1::stw_buttons != NULL) { + canlib::callback::can1::stw_buttons(can1_stw_buttons, can1_stw_buttons_decoded); + } + return true; + } + case 1042: + { + can1_stw_status_t can1_stw_status; + can1_stw_status_unpack(&can1_stw_status, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::stw_status_t can1_stw_status_decoded = canlib::decode::can1::stw_status(can1_stw_status); + if(canlib::callback::can1::stw_status != NULL) { + canlib::callback::can1::stw_status(can1_stw_status, can1_stw_status_decoded); + } + return true; + } + case 202: + { + can1_pdu_current_1_t can1_pdu_current_1; + can1_pdu_current_1_unpack(&can1_pdu_current_1, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::pdu_current_1_t can1_pdu_current_1_decoded = canlib::decode::can1::pdu_current_1(can1_pdu_current_1); + if(canlib::callback::can1::pdu_current_1 != NULL) { + canlib::callback::can1::pdu_current_1(can1_pdu_current_1, can1_pdu_current_1_decoded); + } + return true; + } + case 203: + { + can1_pdu_current_2_t can1_pdu_current_2; + can1_pdu_current_2_unpack(&can1_pdu_current_2, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::pdu_current_2_t can1_pdu_current_2_decoded = canlib::decode::can1::pdu_current_2(can1_pdu_current_2); + if(canlib::callback::can1::pdu_current_2 != NULL) { + canlib::callback::can1::pdu_current_2(can1_pdu_current_2, can1_pdu_current_2_decoded); + } + return true; + } + case 204: + { + can1_pdu_current_3_t can1_pdu_current_3; + can1_pdu_current_3_unpack(&can1_pdu_current_3, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::pdu_current_3_t can1_pdu_current_3_decoded = canlib::decode::can1::pdu_current_3(can1_pdu_current_3); + if(canlib::callback::can1::pdu_current_3 != NULL) { + canlib::callback::can1::pdu_current_3(can1_pdu_current_3, can1_pdu_current_3_decoded); + } + return true; + } + case 205: + { + can1_pdu_current_4_t can1_pdu_current_4; + can1_pdu_current_4_unpack(&can1_pdu_current_4, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::pdu_current_4_t can1_pdu_current_4_decoded = canlib::decode::can1::pdu_current_4(can1_pdu_current_4); + if(canlib::callback::can1::pdu_current_4 != NULL) { + canlib::callback::can1::pdu_current_4(can1_pdu_current_4, can1_pdu_current_4_decoded); + } + return true; + } + case 292: + { + can1_epsc_config_in_t can1_epsc_config_in; + can1_epsc_config_in_unpack(&can1_epsc_config_in, can_frame_raw.data, can_frame_raw.can_dlc); + frame::decoded::can1::epsc_config_in_t can1_epsc_config_in_decoded = canlib::decode::can1::epsc_config_in(can1_epsc_config_in); + if(canlib::callback::can1::epsc_config_in != NULL) { + canlib::callback::can1::epsc_config_in(can1_epsc_config_in, can1_epsc_config_in_decoded); + } + return true; + } + + default: + return false; + } + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::inverter_velocity_t inverter_velocity) { + frame = can_frame(); + frame.can_id = 1910; + frame.can_dlc = 8; + can1_inverter_velocity_t can1_inverter_velocity_frame; + can1_inverter_velocity_init(&can1_inverter_velocity_frame); + can1_inverter_velocity_frame = canlib::encode::can1::inverter_velocity(inverter_velocity); + int frame_size = can1_inverter_velocity_pack(reinterpret_cast(&frame.data), &can1_inverter_velocity_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::inverter_errors_warnings_t inverter_errors_warnings) { + frame = can_frame(); + frame.can_id = 1920; + frame.can_dlc = 8; + can1_inverter_errors_warnings_t can1_inverter_errors_warnings_frame; + can1_inverter_errors_warnings_init(&can1_inverter_errors_warnings_frame); + can1_inverter_errors_warnings_frame = canlib::encode::can1::inverter_errors_warnings(inverter_errors_warnings); + int frame_size = can1_inverter_errors_warnings_pack(reinterpret_cast(&frame.data), &can1_inverter_errors_warnings_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::inverter_torque_actual_cw_t inverter_torque_actual_cw) { + frame = can_frame(); + frame.can_id = 1913; + frame.can_dlc = 8; + can1_inverter_torque_actual_cw_t can1_inverter_torque_actual_cw_frame; + can1_inverter_torque_actual_cw_init(&can1_inverter_torque_actual_cw_frame); + can1_inverter_torque_actual_cw_frame = canlib::encode::can1::inverter_torque_actual_cw(inverter_torque_actual_cw); + int frame_size = can1_inverter_torque_actual_cw_pack(reinterpret_cast(&frame.data), &can1_inverter_torque_actual_cw_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::inverter_temperatur_t inverter_temperatur) { + frame = can_frame(); + frame.can_id = 1912; + frame.can_dlc = 8; + can1_inverter_temperatur_t can1_inverter_temperatur_frame; + can1_inverter_temperatur_init(&can1_inverter_temperatur_frame); + can1_inverter_temperatur_frame = canlib::encode::can1::inverter_temperatur(inverter_temperatur); + int frame_size = can1_inverter_temperatur_pack(reinterpret_cast(&frame.data), &can1_inverter_temperatur_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::inverter_torque_wanted_t inverter_torque_wanted) { + frame = can_frame(); + frame.can_id = 1911; + frame.can_dlc = 8; + can1_inverter_torque_wanted_t can1_inverter_torque_wanted_frame; + can1_inverter_torque_wanted_init(&can1_inverter_torque_wanted_frame); + can1_inverter_torque_wanted_frame = canlib::encode::can1::inverter_torque_wanted(inverter_torque_wanted); + int frame_size = can1_inverter_torque_wanted_pack(reinterpret_cast(&frame.data), &can1_inverter_torque_wanted_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::sdo_telemetrie_rx_node1_t sdo_telemetrie_rx_node1) { + frame = can_frame(); + frame.can_id = 1843; + frame.can_dlc = 8; + can1_sdo_telemetrie_rx_node1_t can1_sdo_telemetrie_rx_node1_frame; + can1_sdo_telemetrie_rx_node1_init(&can1_sdo_telemetrie_rx_node1_frame); + can1_sdo_telemetrie_rx_node1_frame = canlib::encode::can1::sdo_telemetrie_rx_node1(sdo_telemetrie_rx_node1); + int frame_size = can1_sdo_telemetrie_rx_node1_pack(reinterpret_cast(&frame.data), &can1_sdo_telemetrie_rx_node1_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::sdo_telemetrie_rx_node2_t sdo_telemetrie_rx_node2) { + frame = can_frame(); + frame.can_id = 1841; + frame.can_dlc = 8; + can1_sdo_telemetrie_rx_node2_t can1_sdo_telemetrie_rx_node2_frame; + can1_sdo_telemetrie_rx_node2_init(&can1_sdo_telemetrie_rx_node2_frame); + can1_sdo_telemetrie_rx_node2_frame = canlib::encode::can1::sdo_telemetrie_rx_node2(sdo_telemetrie_rx_node2); + int frame_size = can1_sdo_telemetrie_rx_node2_pack(reinterpret_cast(&frame.data), &can1_sdo_telemetrie_rx_node2_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::sdo_telemetrie_tx_t sdo_telemetrie_tx) { + frame = can_frame(); + frame.can_id = 1842; + frame.can_dlc = 8; + can1_sdo_telemetrie_tx_t can1_sdo_telemetrie_tx_frame; + can1_sdo_telemetrie_tx_init(&can1_sdo_telemetrie_tx_frame); + can1_sdo_telemetrie_tx_frame = canlib::encode::can1::sdo_telemetrie_tx(sdo_telemetrie_tx); + int frame_size = can1_sdo_telemetrie_tx_pack(reinterpret_cast(&frame.data), &can1_sdo_telemetrie_tx_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::laptop_sdo_node_t laptop_sdo_node) { + frame = can_frame(); + frame.can_id = 1840; + frame.can_dlc = 1; + can1_laptop_sdo_node_t can1_laptop_sdo_node_frame; + can1_laptop_sdo_node_init(&can1_laptop_sdo_node_frame); + can1_laptop_sdo_node_frame = canlib::encode::can1::laptop_sdo_node(laptop_sdo_node); + int frame_size = can1_laptop_sdo_node_pack(reinterpret_cast(&frame.data), &can1_laptop_sdo_node_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::x_sens_long_lat_t x_sens_long_lat) { + frame = can_frame(); + frame.can_id = 1811; + frame.can_dlc = 8; + can1_x_sens_long_lat_t can1_x_sens_long_lat_frame; + can1_x_sens_long_lat_init(&can1_x_sens_long_lat_frame); + can1_x_sens_long_lat_frame = canlib::encode::can1::x_sens_long_lat(x_sens_long_lat); + int frame_size = can1_x_sens_long_lat_pack(reinterpret_cast(&frame.data), &can1_x_sens_long_lat_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::x_sens_rateofturn_t x_sens_rateofturn) { + frame = can_frame(); + frame.can_id = 1810; + frame.can_dlc = 6; + can1_x_sens_rateofturn_t can1_x_sens_rateofturn_frame; + can1_x_sens_rateofturn_init(&can1_x_sens_rateofturn_frame); + can1_x_sens_rateofturn_frame = canlib::encode::can1::x_sens_rateofturn(x_sens_rateofturn); + int frame_size = can1_x_sens_rateofturn_pack(reinterpret_cast(&frame.data), &can1_x_sens_rateofturn_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::x_sens_acceleration_t x_sens_acceleration) { + frame = can_frame(); + frame.can_id = 1809; + frame.can_dlc = 6; + can1_x_sens_acceleration_t can1_x_sens_acceleration_frame; + can1_x_sens_acceleration_init(&can1_x_sens_acceleration_frame); + can1_x_sens_acceleration_frame = canlib::encode::can1::x_sens_acceleration(x_sens_acceleration); + int frame_size = can1_x_sens_acceleration_pack(reinterpret_cast(&frame.data), &can1_x_sens_acceleration_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::x_sens_velocity_t x_sens_velocity) { + frame = can_frame(); + frame.can_id = 1812; + frame.can_dlc = 6; + can1_x_sens_velocity_t can1_x_sens_velocity_frame; + can1_x_sens_velocity_init(&can1_x_sens_velocity_frame); + can1_x_sens_velocity_frame = canlib::encode::can1::x_sens_velocity(x_sens_velocity); + int frame_size = can1_x_sens_velocity_pack(reinterpret_cast(&frame.data), &can1_x_sens_velocity_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::telemetrie_t telemetrie) { + frame = can_frame(); + frame.can_id = 1824; + frame.can_dlc = 7; + can1_telemetrie_t can1_telemetrie_frame; + can1_telemetrie_init(&can1_telemetrie_frame); + can1_telemetrie_frame = canlib::encode::can1::telemetrie(telemetrie); + int frame_size = can1_telemetrie_pack(reinterpret_cast(&frame.data), &can1_telemetrie_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::override_powermap_t override_powermap) { + frame = can_frame(); + frame.can_id = 1829; + frame.can_dlc = 8; + can1_override_powermap_t can1_override_powermap_frame; + can1_override_powermap_init(&can1_override_powermap_frame); + can1_override_powermap_frame = canlib::encode::can1::override_powermap(override_powermap); + int frame_size = can1_override_powermap_pack(reinterpret_cast(&frame.data), &can1_override_powermap_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::override_laptop_2_t override_laptop_2) { + frame = can_frame(); + frame.can_id = 1828; + frame.can_dlc = 5; + can1_override_laptop_2_t can1_override_laptop_2_frame; + can1_override_laptop_2_init(&can1_override_laptop_2_frame); + can1_override_laptop_2_frame = canlib::encode::can1::override_laptop_2(override_laptop_2); + int frame_size = can1_override_laptop_2_pack(reinterpret_cast(&frame.data), &can1_override_laptop_2_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::override_epsc_cooling_t override_epsc_cooling) { + frame = can_frame(); + frame.can_id = 1827; + frame.can_dlc = 8; + can1_override_epsc_cooling_t can1_override_epsc_cooling_frame; + can1_override_epsc_cooling_init(&can1_override_epsc_cooling_frame); + can1_override_epsc_cooling_frame = canlib::encode::can1::override_epsc_cooling(override_epsc_cooling); + int frame_size = can1_override_epsc_cooling_pack(reinterpret_cast(&frame.data), &can1_override_epsc_cooling_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::override_laptop_t override_laptop) { + frame = can_frame(); + frame.can_id = 1825; + frame.can_dlc = 3; + can1_override_laptop_t can1_override_laptop_frame; + can1_override_laptop_init(&can1_override_laptop_frame); + can1_override_laptop_frame = canlib::encode::can1::override_laptop(override_laptop); + int frame_size = can1_override_laptop_pack(reinterpret_cast(&frame.data), &can1_override_laptop_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::apps_override_t apps_override) { + frame = can_frame(); + frame.can_id = 1826; + frame.can_dlc = 5; + can1_apps_override_t can1_apps_override_frame; + can1_apps_override_init(&can1_apps_override_frame); + can1_apps_override_frame = canlib::encode::can1::apps_override(apps_override); + int frame_size = can1_apps_override_pack(reinterpret_cast(&frame.data), &can1_apps_override_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ftcu_damper_t ftcu_damper) { + frame = can_frame(); + frame.can_id = 259; + frame.can_dlc = 8; + can1_ftcu_damper_t can1_ftcu_damper_frame; + can1_ftcu_damper_init(&can1_ftcu_damper_frame); + can1_ftcu_damper_frame = canlib::encode::can1::ftcu_damper(ftcu_damper); + int frame_size = can1_ftcu_damper_pack(reinterpret_cast(&frame.data), &can1_ftcu_damper_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ftcu_param_confirm_t ftcu_param_confirm) { + frame = can_frame(); + frame.can_id = 1043; + frame.can_dlc = 1; + can1_ftcu_param_confirm_t can1_ftcu_param_confirm_frame; + can1_ftcu_param_confirm_init(&can1_ftcu_param_confirm_frame); + can1_ftcu_param_confirm_frame = canlib::encode::can1::ftcu_param_confirm(ftcu_param_confirm); + int frame_size = can1_ftcu_param_confirm_pack(reinterpret_cast(&frame.data), &can1_ftcu_param_confirm_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::sensornode_f_10_hz_t sensornode_f_10_hz) { + frame = can_frame(); + frame.can_id = 209; + frame.can_dlc = 3; + can1_sensornode_f_10_hz_t can1_sensornode_f_10_hz_frame; + can1_sensornode_f_10_hz_init(&can1_sensornode_f_10_hz_frame); + can1_sensornode_f_10_hz_frame = canlib::encode::can1::sensornode_f_10_hz(sensornode_f_10_hz); + int frame_size = can1_sensornode_f_10_hz_pack(reinterpret_cast(&frame.data), &can1_sensornode_f_10_hz_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::sensornode_f_100_hz_1_t sensornode_f_100_hz_1) { + frame = can_frame(); + frame.can_id = 211; + frame.can_dlc = 7; + can1_sensornode_f_100_hz_1_t can1_sensornode_f_100_hz_1_frame; + can1_sensornode_f_100_hz_1_init(&can1_sensornode_f_100_hz_1_frame); + can1_sensornode_f_100_hz_1_frame = canlib::encode::can1::sensornode_f_100_hz_1(sensornode_f_100_hz_1); + int frame_size = can1_sensornode_f_100_hz_1_pack(reinterpret_cast(&frame.data), &can1_sensornode_f_100_hz_1_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::sensornode_f_100_hz_2_t sensornode_f_100_hz_2) { + frame = can_frame(); + frame.can_id = 213; + frame.can_dlc = 3; + can1_sensornode_f_100_hz_2_t can1_sensornode_f_100_hz_2_frame; + can1_sensornode_f_100_hz_2_init(&can1_sensornode_f_100_hz_2_frame); + can1_sensornode_f_100_hz_2_frame = canlib::encode::can1::sensornode_f_100_hz_2(sensornode_f_100_hz_2); + int frame_size = can1_sensornode_f_100_hz_2_pack(reinterpret_cast(&frame.data), &can1_sensornode_f_100_hz_2_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::sensornode_f_1k_hz_t sensornode_f_1k_hz) { + frame = can_frame(); + frame.can_id = 215; + frame.can_dlc = 3; + can1_sensornode_f_1k_hz_t can1_sensornode_f_1k_hz_frame; + can1_sensornode_f_1k_hz_init(&can1_sensornode_f_1k_hz_frame); + can1_sensornode_f_1k_hz_frame = canlib::encode::can1::sensornode_f_1k_hz(sensornode_f_1k_hz); + int frame_size = can1_sensornode_f_1k_hz_pack(reinterpret_cast(&frame.data), &can1_sensornode_f_1k_hz_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::sensornode_r_10_hz_t sensornode_r_10_hz) { + frame = can_frame(); + frame.can_id = 210; + frame.can_dlc = 7; + can1_sensornode_r_10_hz_t can1_sensornode_r_10_hz_frame; + can1_sensornode_r_10_hz_init(&can1_sensornode_r_10_hz_frame); + can1_sensornode_r_10_hz_frame = canlib::encode::can1::sensornode_r_10_hz(sensornode_r_10_hz); + int frame_size = can1_sensornode_r_10_hz_pack(reinterpret_cast(&frame.data), &can1_sensornode_r_10_hz_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::sensornode_r_100_hz_t sensornode_r_100_hz) { + frame = can_frame(); + frame.can_id = 212; + frame.can_dlc = 8; + can1_sensornode_r_100_hz_t can1_sensornode_r_100_hz_frame; + can1_sensornode_r_100_hz_init(&can1_sensornode_r_100_hz_frame); + can1_sensornode_r_100_hz_frame = canlib::encode::can1::sensornode_r_100_hz(sensornode_r_100_hz); + int frame_size = can1_sensornode_r_100_hz_pack(reinterpret_cast(&frame.data), &can1_sensornode_r_100_hz_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::sensornode_r_1k_hz_t sensornode_r_1k_hz) { + frame = can_frame(); + frame.can_id = 216; + frame.can_dlc = 3; + can1_sensornode_r_1k_hz_t can1_sensornode_r_1k_hz_frame; + can1_sensornode_r_1k_hz_init(&can1_sensornode_r_1k_hz_frame); + can1_sensornode_r_1k_hz_frame = canlib::encode::can1::sensornode_r_1k_hz(sensornode_r_1k_hz); + int frame_size = can1_sensornode_r_1k_hz_pack(reinterpret_cast(&frame.data), &can1_sensornode_r_1k_hz_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::pwm_duty_cycle_t pwm_duty_cycle) { + frame = can_frame(); + frame.can_id = 220; + frame.can_dlc = 7; + can1_pwm_duty_cycle_t can1_pwm_duty_cycle_frame; + can1_pwm_duty_cycle_init(&can1_pwm_duty_cycle_frame); + can1_pwm_duty_cycle_frame = canlib::encode::can1::pwm_duty_cycle(pwm_duty_cycle); + int frame_size = can1_pwm_duty_cycle_pack(reinterpret_cast(&frame.data), &can1_pwm_duty_cycle_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::pwm_config_t pwm_config) { + frame = can_frame(); + frame.can_id = 221; + frame.can_dlc = 6; + can1_pwm_config_t can1_pwm_config_frame; + can1_pwm_config_init(&can1_pwm_config_frame); + can1_pwm_config_frame = canlib::encode::can1::pwm_config(pwm_config); + int frame_size = can1_pwm_config_pack(reinterpret_cast(&frame.data), &can1_pwm_config_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::dashboard_in_t dashboard_in) { + frame = can_frame(); + frame.can_id = 1056; + frame.can_dlc = 1; + can1_dashboard_in_t can1_dashboard_in_frame; + can1_dashboard_in_init(&can1_dashboard_in_frame); + can1_dashboard_in_frame = canlib::encode::can1::dashboard_in(dashboard_in); + int frame_size = can1_dashboard_in_pack(reinterpret_cast(&frame.data), &can1_dashboard_in_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave1_status_t ams_slave1_status) { + frame = can_frame(); + frame.can_id = 129; + frame.can_dlc = 8; + can1_ams_slave1_status_t can1_ams_slave1_status_frame; + can1_ams_slave1_status_init(&can1_ams_slave1_status_frame); + can1_ams_slave1_status_frame = canlib::encode::can1::ams_slave1_status(ams_slave1_status); + int frame_size = can1_ams_slave1_status_pack(reinterpret_cast(&frame.data), &can1_ams_slave1_status_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave2_log0_t ams_slave2_log0) { + frame = can_frame(); + frame.can_id = 1568; + frame.can_dlc = 8; + can1_ams_slave2_log0_t can1_ams_slave2_log0_frame; + can1_ams_slave2_log0_init(&can1_ams_slave2_log0_frame); + can1_ams_slave2_log0_frame = canlib::encode::can1::ams_slave2_log0(ams_slave2_log0); + int frame_size = can1_ams_slave2_log0_pack(reinterpret_cast(&frame.data), &can1_ams_slave2_log0_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave2_log1_t ams_slave2_log1) { + frame = can_frame(); + frame.can_id = 1569; + frame.can_dlc = 8; + can1_ams_slave2_log1_t can1_ams_slave2_log1_frame; + can1_ams_slave2_log1_init(&can1_ams_slave2_log1_frame); + can1_ams_slave2_log1_frame = canlib::encode::can1::ams_slave2_log1(ams_slave2_log1); + int frame_size = can1_ams_slave2_log1_pack(reinterpret_cast(&frame.data), &can1_ams_slave2_log1_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave2_log2_t ams_slave2_log2) { + frame = can_frame(); + frame.can_id = 1570; + frame.can_dlc = 8; + can1_ams_slave2_log2_t can1_ams_slave2_log2_frame; + can1_ams_slave2_log2_init(&can1_ams_slave2_log2_frame); + can1_ams_slave2_log2_frame = canlib::encode::can1::ams_slave2_log2(ams_slave2_log2); + int frame_size = can1_ams_slave2_log2_pack(reinterpret_cast(&frame.data), &can1_ams_slave2_log2_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave2_log3_t ams_slave2_log3) { + frame = can_frame(); + frame.can_id = 1571; + frame.can_dlc = 8; + can1_ams_slave2_log3_t can1_ams_slave2_log3_frame; + can1_ams_slave2_log3_init(&can1_ams_slave2_log3_frame); + can1_ams_slave2_log3_frame = canlib::encode::can1::ams_slave2_log3(ams_slave2_log3); + int frame_size = can1_ams_slave2_log3_pack(reinterpret_cast(&frame.data), &can1_ams_slave2_log3_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave2_log4_t ams_slave2_log4) { + frame = can_frame(); + frame.can_id = 1572; + frame.can_dlc = 6; + can1_ams_slave2_log4_t can1_ams_slave2_log4_frame; + can1_ams_slave2_log4_init(&can1_ams_slave2_log4_frame); + can1_ams_slave2_log4_frame = canlib::encode::can1::ams_slave2_log4(ams_slave2_log4); + int frame_size = can1_ams_slave2_log4_pack(reinterpret_cast(&frame.data), &can1_ams_slave2_log4_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave2_log5_t ams_slave2_log5) { + frame = can_frame(); + frame.can_id = 1573; + frame.can_dlc = 8; + can1_ams_slave2_log5_t can1_ams_slave2_log5_frame; + can1_ams_slave2_log5_init(&can1_ams_slave2_log5_frame); + can1_ams_slave2_log5_frame = canlib::encode::can1::ams_slave2_log5(ams_slave2_log5); + int frame_size = can1_ams_slave2_log5_pack(reinterpret_cast(&frame.data), &can1_ams_slave2_log5_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave5_log6_t ams_slave5_log6) { + frame = can_frame(); + frame.can_id = 1622; + frame.can_dlc = 8; + can1_ams_slave5_log6_t can1_ams_slave5_log6_frame; + can1_ams_slave5_log6_init(&can1_ams_slave5_log6_frame); + can1_ams_slave5_log6_frame = canlib::encode::can1::ams_slave5_log6(ams_slave5_log6); + int frame_size = can1_ams_slave5_log6_pack(reinterpret_cast(&frame.data), &can1_ams_slave5_log6_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave4_log6_t ams_slave4_log6) { + frame = can_frame(); + frame.can_id = 1606; + frame.can_dlc = 8; + can1_ams_slave4_log6_t can1_ams_slave4_log6_frame; + can1_ams_slave4_log6_init(&can1_ams_slave4_log6_frame); + can1_ams_slave4_log6_frame = canlib::encode::can1::ams_slave4_log6(ams_slave4_log6); + int frame_size = can1_ams_slave4_log6_pack(reinterpret_cast(&frame.data), &can1_ams_slave4_log6_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave3_log6_t ams_slave3_log6) { + frame = can_frame(); + frame.can_id = 1590; + frame.can_dlc = 8; + can1_ams_slave3_log6_t can1_ams_slave3_log6_frame; + can1_ams_slave3_log6_init(&can1_ams_slave3_log6_frame); + can1_ams_slave3_log6_frame = canlib::encode::can1::ams_slave3_log6(ams_slave3_log6); + int frame_size = can1_ams_slave3_log6_pack(reinterpret_cast(&frame.data), &can1_ams_slave3_log6_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave2_log6_t ams_slave2_log6) { + frame = can_frame(); + frame.can_id = 1574; + frame.can_dlc = 8; + can1_ams_slave2_log6_t can1_ams_slave2_log6_frame; + can1_ams_slave2_log6_init(&can1_ams_slave2_log6_frame); + can1_ams_slave2_log6_frame = canlib::encode::can1::ams_slave2_log6(ams_slave2_log6); + int frame_size = can1_ams_slave2_log6_pack(reinterpret_cast(&frame.data), &can1_ams_slave2_log6_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave1_log6_t ams_slave1_log6) { + frame = can_frame(); + frame.can_id = 1558; + frame.can_dlc = 8; + can1_ams_slave1_log6_t can1_ams_slave1_log6_frame; + can1_ams_slave1_log6_init(&can1_ams_slave1_log6_frame); + can1_ams_slave1_log6_frame = canlib::encode::can1::ams_slave1_log6(ams_slave1_log6); + int frame_size = can1_ams_slave1_log6_pack(reinterpret_cast(&frame.data), &can1_ams_slave1_log6_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave5_log5_t ams_slave5_log5) { + frame = can_frame(); + frame.can_id = 1621; + frame.can_dlc = 8; + can1_ams_slave5_log5_t can1_ams_slave5_log5_frame; + can1_ams_slave5_log5_init(&can1_ams_slave5_log5_frame); + can1_ams_slave5_log5_frame = canlib::encode::can1::ams_slave5_log5(ams_slave5_log5); + int frame_size = can1_ams_slave5_log5_pack(reinterpret_cast(&frame.data), &can1_ams_slave5_log5_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave4_log5_t ams_slave4_log5) { + frame = can_frame(); + frame.can_id = 1605; + frame.can_dlc = 8; + can1_ams_slave4_log5_t can1_ams_slave4_log5_frame; + can1_ams_slave4_log5_init(&can1_ams_slave4_log5_frame); + can1_ams_slave4_log5_frame = canlib::encode::can1::ams_slave4_log5(ams_slave4_log5); + int frame_size = can1_ams_slave4_log5_pack(reinterpret_cast(&frame.data), &can1_ams_slave4_log5_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave3_log5_t ams_slave3_log5) { + frame = can_frame(); + frame.can_id = 1589; + frame.can_dlc = 8; + can1_ams_slave3_log5_t can1_ams_slave3_log5_frame; + can1_ams_slave3_log5_init(&can1_ams_slave3_log5_frame); + can1_ams_slave3_log5_frame = canlib::encode::can1::ams_slave3_log5(ams_slave3_log5); + int frame_size = can1_ams_slave3_log5_pack(reinterpret_cast(&frame.data), &can1_ams_slave3_log5_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave1_log5_t ams_slave1_log5) { + frame = can_frame(); + frame.can_id = 1557; + frame.can_dlc = 8; + can1_ams_slave1_log5_t can1_ams_slave1_log5_frame; + can1_ams_slave1_log5_init(&can1_ams_slave1_log5_frame); + can1_ams_slave1_log5_frame = canlib::encode::can1::ams_slave1_log5(ams_slave1_log5); + int frame_size = can1_ams_slave1_log5_pack(reinterpret_cast(&frame.data), &can1_ams_slave1_log5_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave5_log4_t ams_slave5_log4) { + frame = can_frame(); + frame.can_id = 1620; + frame.can_dlc = 6; + can1_ams_slave5_log4_t can1_ams_slave5_log4_frame; + can1_ams_slave5_log4_init(&can1_ams_slave5_log4_frame); + can1_ams_slave5_log4_frame = canlib::encode::can1::ams_slave5_log4(ams_slave5_log4); + int frame_size = can1_ams_slave5_log4_pack(reinterpret_cast(&frame.data), &can1_ams_slave5_log4_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave4_log4_t ams_slave4_log4) { + frame = can_frame(); + frame.can_id = 1604; + frame.can_dlc = 6; + can1_ams_slave4_log4_t can1_ams_slave4_log4_frame; + can1_ams_slave4_log4_init(&can1_ams_slave4_log4_frame); + can1_ams_slave4_log4_frame = canlib::encode::can1::ams_slave4_log4(ams_slave4_log4); + int frame_size = can1_ams_slave4_log4_pack(reinterpret_cast(&frame.data), &can1_ams_slave4_log4_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave3_log4_t ams_slave3_log4) { + frame = can_frame(); + frame.can_id = 1588; + frame.can_dlc = 6; + can1_ams_slave3_log4_t can1_ams_slave3_log4_frame; + can1_ams_slave3_log4_init(&can1_ams_slave3_log4_frame); + can1_ams_slave3_log4_frame = canlib::encode::can1::ams_slave3_log4(ams_slave3_log4); + int frame_size = can1_ams_slave3_log4_pack(reinterpret_cast(&frame.data), &can1_ams_slave3_log4_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave1_log4_t ams_slave1_log4) { + frame = can_frame(); + frame.can_id = 1556; + frame.can_dlc = 6; + can1_ams_slave1_log4_t can1_ams_slave1_log4_frame; + can1_ams_slave1_log4_init(&can1_ams_slave1_log4_frame); + can1_ams_slave1_log4_frame = canlib::encode::can1::ams_slave1_log4(ams_slave1_log4); + int frame_size = can1_ams_slave1_log4_pack(reinterpret_cast(&frame.data), &can1_ams_slave1_log4_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave5_log3_t ams_slave5_log3) { + frame = can_frame(); + frame.can_id = 1619; + frame.can_dlc = 8; + can1_ams_slave5_log3_t can1_ams_slave5_log3_frame; + can1_ams_slave5_log3_init(&can1_ams_slave5_log3_frame); + can1_ams_slave5_log3_frame = canlib::encode::can1::ams_slave5_log3(ams_slave5_log3); + int frame_size = can1_ams_slave5_log3_pack(reinterpret_cast(&frame.data), &can1_ams_slave5_log3_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave4_log3_t ams_slave4_log3) { + frame = can_frame(); + frame.can_id = 1603; + frame.can_dlc = 8; + can1_ams_slave4_log3_t can1_ams_slave4_log3_frame; + can1_ams_slave4_log3_init(&can1_ams_slave4_log3_frame); + can1_ams_slave4_log3_frame = canlib::encode::can1::ams_slave4_log3(ams_slave4_log3); + int frame_size = can1_ams_slave4_log3_pack(reinterpret_cast(&frame.data), &can1_ams_slave4_log3_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave3_log3_t ams_slave3_log3) { + frame = can_frame(); + frame.can_id = 1587; + frame.can_dlc = 8; + can1_ams_slave3_log3_t can1_ams_slave3_log3_frame; + can1_ams_slave3_log3_init(&can1_ams_slave3_log3_frame); + can1_ams_slave3_log3_frame = canlib::encode::can1::ams_slave3_log3(ams_slave3_log3); + int frame_size = can1_ams_slave3_log3_pack(reinterpret_cast(&frame.data), &can1_ams_slave3_log3_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave1_log3_t ams_slave1_log3) { + frame = can_frame(); + frame.can_id = 1555; + frame.can_dlc = 8; + can1_ams_slave1_log3_t can1_ams_slave1_log3_frame; + can1_ams_slave1_log3_init(&can1_ams_slave1_log3_frame); + can1_ams_slave1_log3_frame = canlib::encode::can1::ams_slave1_log3(ams_slave1_log3); + int frame_size = can1_ams_slave1_log3_pack(reinterpret_cast(&frame.data), &can1_ams_slave1_log3_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave5_log2_t ams_slave5_log2) { + frame = can_frame(); + frame.can_id = 1618; + frame.can_dlc = 8; + can1_ams_slave5_log2_t can1_ams_slave5_log2_frame; + can1_ams_slave5_log2_init(&can1_ams_slave5_log2_frame); + can1_ams_slave5_log2_frame = canlib::encode::can1::ams_slave5_log2(ams_slave5_log2); + int frame_size = can1_ams_slave5_log2_pack(reinterpret_cast(&frame.data), &can1_ams_slave5_log2_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave4_log2_t ams_slave4_log2) { + frame = can_frame(); + frame.can_id = 1602; + frame.can_dlc = 8; + can1_ams_slave4_log2_t can1_ams_slave4_log2_frame; + can1_ams_slave4_log2_init(&can1_ams_slave4_log2_frame); + can1_ams_slave4_log2_frame = canlib::encode::can1::ams_slave4_log2(ams_slave4_log2); + int frame_size = can1_ams_slave4_log2_pack(reinterpret_cast(&frame.data), &can1_ams_slave4_log2_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave3_log2_t ams_slave3_log2) { + frame = can_frame(); + frame.can_id = 1586; + frame.can_dlc = 8; + can1_ams_slave3_log2_t can1_ams_slave3_log2_frame; + can1_ams_slave3_log2_init(&can1_ams_slave3_log2_frame); + can1_ams_slave3_log2_frame = canlib::encode::can1::ams_slave3_log2(ams_slave3_log2); + int frame_size = can1_ams_slave3_log2_pack(reinterpret_cast(&frame.data), &can1_ams_slave3_log2_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave1_log2_t ams_slave1_log2) { + frame = can_frame(); + frame.can_id = 1554; + frame.can_dlc = 8; + can1_ams_slave1_log2_t can1_ams_slave1_log2_frame; + can1_ams_slave1_log2_init(&can1_ams_slave1_log2_frame); + can1_ams_slave1_log2_frame = canlib::encode::can1::ams_slave1_log2(ams_slave1_log2); + int frame_size = can1_ams_slave1_log2_pack(reinterpret_cast(&frame.data), &can1_ams_slave1_log2_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave5_log1_t ams_slave5_log1) { + frame = can_frame(); + frame.can_id = 1617; + frame.can_dlc = 8; + can1_ams_slave5_log1_t can1_ams_slave5_log1_frame; + can1_ams_slave5_log1_init(&can1_ams_slave5_log1_frame); + can1_ams_slave5_log1_frame = canlib::encode::can1::ams_slave5_log1(ams_slave5_log1); + int frame_size = can1_ams_slave5_log1_pack(reinterpret_cast(&frame.data), &can1_ams_slave5_log1_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave4_log1_t ams_slave4_log1) { + frame = can_frame(); + frame.can_id = 1601; + frame.can_dlc = 8; + can1_ams_slave4_log1_t can1_ams_slave4_log1_frame; + can1_ams_slave4_log1_init(&can1_ams_slave4_log1_frame); + can1_ams_slave4_log1_frame = canlib::encode::can1::ams_slave4_log1(ams_slave4_log1); + int frame_size = can1_ams_slave4_log1_pack(reinterpret_cast(&frame.data), &can1_ams_slave4_log1_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave3_log1_t ams_slave3_log1) { + frame = can_frame(); + frame.can_id = 1585; + frame.can_dlc = 8; + can1_ams_slave3_log1_t can1_ams_slave3_log1_frame; + can1_ams_slave3_log1_init(&can1_ams_slave3_log1_frame); + can1_ams_slave3_log1_frame = canlib::encode::can1::ams_slave3_log1(ams_slave3_log1); + int frame_size = can1_ams_slave3_log1_pack(reinterpret_cast(&frame.data), &can1_ams_slave3_log1_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave1_log1_t ams_slave1_log1) { + frame = can_frame(); + frame.can_id = 1553; + frame.can_dlc = 8; + can1_ams_slave1_log1_t can1_ams_slave1_log1_frame; + can1_ams_slave1_log1_init(&can1_ams_slave1_log1_frame); + can1_ams_slave1_log1_frame = canlib::encode::can1::ams_slave1_log1(ams_slave1_log1); + int frame_size = can1_ams_slave1_log1_pack(reinterpret_cast(&frame.data), &can1_ams_slave1_log1_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave5_log0_t ams_slave5_log0) { + frame = can_frame(); + frame.can_id = 1616; + frame.can_dlc = 8; + can1_ams_slave5_log0_t can1_ams_slave5_log0_frame; + can1_ams_slave5_log0_init(&can1_ams_slave5_log0_frame); + can1_ams_slave5_log0_frame = canlib::encode::can1::ams_slave5_log0(ams_slave5_log0); + int frame_size = can1_ams_slave5_log0_pack(reinterpret_cast(&frame.data), &can1_ams_slave5_log0_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave4_log0_t ams_slave4_log0) { + frame = can_frame(); + frame.can_id = 1600; + frame.can_dlc = 8; + can1_ams_slave4_log0_t can1_ams_slave4_log0_frame; + can1_ams_slave4_log0_init(&can1_ams_slave4_log0_frame); + can1_ams_slave4_log0_frame = canlib::encode::can1::ams_slave4_log0(ams_slave4_log0); + int frame_size = can1_ams_slave4_log0_pack(reinterpret_cast(&frame.data), &can1_ams_slave4_log0_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave3_log0_t ams_slave3_log0) { + frame = can_frame(); + frame.can_id = 1584; + frame.can_dlc = 8; + can1_ams_slave3_log0_t can1_ams_slave3_log0_frame; + can1_ams_slave3_log0_init(&can1_ams_slave3_log0_frame); + can1_ams_slave3_log0_frame = canlib::encode::can1::ams_slave3_log0(ams_slave3_log0); + int frame_size = can1_ams_slave3_log0_pack(reinterpret_cast(&frame.data), &can1_ams_slave3_log0_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave1_log0_t ams_slave1_log0) { + frame = can_frame(); + frame.can_id = 1552; + frame.can_dlc = 8; + can1_ams_slave1_log0_t can1_ams_slave1_log0_frame; + can1_ams_slave1_log0_init(&can1_ams_slave1_log0_frame); + can1_ams_slave1_log0_frame = canlib::encode::can1::ams_slave1_log0(ams_slave1_log0); + int frame_size = can1_ams_slave1_log0_pack(reinterpret_cast(&frame.data), &can1_ams_slave1_log0_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::pdu_heartbeat_t pdu_heartbeat) { + frame = can_frame(); + frame.can_id = 206; + frame.can_dlc = 1; + can1_pdu_heartbeat_t can1_pdu_heartbeat_frame; + can1_pdu_heartbeat_init(&can1_pdu_heartbeat_frame); + can1_pdu_heartbeat_frame = canlib::encode::can1::pdu_heartbeat(pdu_heartbeat); + int frame_size = can1_pdu_heartbeat_pack(reinterpret_cast(&frame.data), &can1_pdu_heartbeat_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ftcu_pneumatik_t ftcu_pneumatik) { + frame = can_frame(); + frame.can_id = 272; + frame.can_dlc = 8; + can1_ftcu_pneumatik_t can1_ftcu_pneumatik_frame; + can1_ftcu_pneumatik_init(&can1_ftcu_pneumatik_frame); + can1_ftcu_pneumatik_frame = canlib::encode::can1::ftcu_pneumatik(ftcu_pneumatik); + int frame_size = can1_ftcu_pneumatik_pack(reinterpret_cast(&frame.data), &can1_ftcu_pneumatik_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::acu_tx_commands_t acu_tx_commands) { + frame = can_frame(); + frame.can_id = 227; + frame.can_dlc = 6; + can1_acu_tx_commands_t can1_acu_tx_commands_frame; + can1_acu_tx_commands_init(&can1_acu_tx_commands_frame); + can1_acu_tx_commands_frame = canlib::encode::can1::acu_tx_commands(acu_tx_commands); + int frame_size = can1_acu_tx_commands_pack(reinterpret_cast(&frame.data), &can1_acu_tx_commands_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::acu_rx_commands_t acu_rx_commands) { + frame = can_frame(); + frame.can_id = 226; + frame.can_dlc = 4; + can1_acu_rx_commands_t can1_acu_rx_commands_frame; + can1_acu_rx_commands_init(&can1_acu_rx_commands_frame); + can1_acu_rx_commands_frame = canlib::encode::can1::acu_rx_commands(acu_rx_commands); + int frame_size = can1_acu_rx_commands_pack(reinterpret_cast(&frame.data), &can1_acu_rx_commands_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::acu_rx_t acu_rx) { + frame = can_frame(); + frame.can_id = 225; + frame.can_dlc = 3; + can1_acu_rx_t can1_acu_rx_frame; + can1_acu_rx_init(&can1_acu_rx_frame); + can1_acu_rx_frame = canlib::encode::can1::acu_rx(acu_rx); + int frame_size = can1_acu_rx_pack(reinterpret_cast(&frame.data), &can1_acu_rx_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave0_log0_t ams_slave0_log0) { + frame = can_frame(); + frame.can_id = 1536; + frame.can_dlc = 8; + can1_ams_slave0_log0_t can1_ams_slave0_log0_frame; + can1_ams_slave0_log0_init(&can1_ams_slave0_log0_frame); + can1_ams_slave0_log0_frame = canlib::encode::can1::ams_slave0_log0(ams_slave0_log0); + int frame_size = can1_ams_slave0_log0_pack(reinterpret_cast(&frame.data), &can1_ams_slave0_log0_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave0_log1_t ams_slave0_log1) { + frame = can_frame(); + frame.can_id = 1537; + frame.can_dlc = 8; + can1_ams_slave0_log1_t can1_ams_slave0_log1_frame; + can1_ams_slave0_log1_init(&can1_ams_slave0_log1_frame); + can1_ams_slave0_log1_frame = canlib::encode::can1::ams_slave0_log1(ams_slave0_log1); + int frame_size = can1_ams_slave0_log1_pack(reinterpret_cast(&frame.data), &can1_ams_slave0_log1_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave0_log3_t ams_slave0_log3) { + frame = can_frame(); + frame.can_id = 1539; + frame.can_dlc = 8; + can1_ams_slave0_log3_t can1_ams_slave0_log3_frame; + can1_ams_slave0_log3_init(&can1_ams_slave0_log3_frame); + can1_ams_slave0_log3_frame = canlib::encode::can1::ams_slave0_log3(ams_slave0_log3); + int frame_size = can1_ams_slave0_log3_pack(reinterpret_cast(&frame.data), &can1_ams_slave0_log3_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave0_log4_t ams_slave0_log4) { + frame = can_frame(); + frame.can_id = 1540; + frame.can_dlc = 6; + can1_ams_slave0_log4_t can1_ams_slave0_log4_frame; + can1_ams_slave0_log4_init(&can1_ams_slave0_log4_frame); + can1_ams_slave0_log4_frame = canlib::encode::can1::ams_slave0_log4(ams_slave0_log4); + int frame_size = can1_ams_slave0_log4_pack(reinterpret_cast(&frame.data), &can1_ams_slave0_log4_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave0_log5_t ams_slave0_log5) { + frame = can_frame(); + frame.can_id = 1541; + frame.can_dlc = 8; + can1_ams_slave0_log5_t can1_ams_slave0_log5_frame; + can1_ams_slave0_log5_init(&can1_ams_slave0_log5_frame); + can1_ams_slave0_log5_frame = canlib::encode::can1::ams_slave0_log5(ams_slave0_log5); + int frame_size = can1_ams_slave0_log5_pack(reinterpret_cast(&frame.data), &can1_ams_slave0_log5_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave0_log6_t ams_slave0_log6) { + frame = can_frame(); + frame.can_id = 1542; + frame.can_dlc = 8; + can1_ams_slave0_log6_t can1_ams_slave0_log6_frame; + can1_ams_slave0_log6_init(&can1_ams_slave0_log6_frame); + can1_ams_slave0_log6_frame = canlib::encode::can1::ams_slave0_log6(ams_slave0_log6); + int frame_size = can1_ams_slave0_log6_pack(reinterpret_cast(&frame.data), &can1_ams_slave0_log6_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::acu_tx_t acu_tx) { + frame = can_frame(); + frame.can_id = 224; + frame.can_dlc = 2; + can1_acu_tx_t can1_acu_tx_frame; + can1_acu_tx_init(&can1_acu_tx_frame); + can1_acu_tx_frame = canlib::encode::can1::acu_tx(acu_tx); + int frame_size = can1_acu_tx_pack(reinterpret_cast(&frame.data), &can1_acu_tx_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave5_status_t ams_slave5_status) { + frame = can_frame(); + frame.can_id = 133; + frame.can_dlc = 8; + can1_ams_slave5_status_t can1_ams_slave5_status_frame; + can1_ams_slave5_status_init(&can1_ams_slave5_status_frame); + can1_ams_slave5_status_frame = canlib::encode::can1::ams_slave5_status(ams_slave5_status); + int frame_size = can1_ams_slave5_status_pack(reinterpret_cast(&frame.data), &can1_ams_slave5_status_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave4_status_t ams_slave4_status) { + frame = can_frame(); + frame.can_id = 132; + frame.can_dlc = 8; + can1_ams_slave4_status_t can1_ams_slave4_status_frame; + can1_ams_slave4_status_init(&can1_ams_slave4_status_frame); + can1_ams_slave4_status_frame = canlib::encode::can1::ams_slave4_status(ams_slave4_status); + int frame_size = can1_ams_slave4_status_pack(reinterpret_cast(&frame.data), &can1_ams_slave4_status_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave3_status_t ams_slave3_status) { + frame = can_frame(); + frame.can_id = 131; + frame.can_dlc = 8; + can1_ams_slave3_status_t can1_ams_slave3_status_frame; + can1_ams_slave3_status_init(&can1_ams_slave3_status_frame); + can1_ams_slave3_status_frame = canlib::encode::can1::ams_slave3_status(ams_slave3_status); + int frame_size = can1_ams_slave3_status_pack(reinterpret_cast(&frame.data), &can1_ams_slave3_status_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave2_status_t ams_slave2_status) { + frame = can_frame(); + frame.can_id = 130; + frame.can_dlc = 8; + can1_ams_slave2_status_t can1_ams_slave2_status_frame; + can1_ams_slave2_status_init(&can1_ams_slave2_status_frame); + can1_ams_slave2_status_frame = canlib::encode::can1::ams_slave2_status(ams_slave2_status); + int frame_size = can1_ams_slave2_status_pack(reinterpret_cast(&frame.data), &can1_ams_slave2_status_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_error_t ams_error) { + frame = can_frame(); + frame.can_id = 12; + frame.can_dlc = 2; + can1_ams_error_t can1_ams_error_frame; + can1_ams_error_init(&can1_ams_error_frame); + can1_ams_error_frame = canlib::encode::can1::ams_error(ams_error); + int frame_size = can1_ams_error_pack(reinterpret_cast(&frame.data), &can1_ams_error_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ftcu_cooling_t ftcu_cooling) { + frame = can_frame(); + frame.can_id = 263; + frame.can_dlc = 8; + can1_ftcu_cooling_t can1_ftcu_cooling_frame; + can1_ftcu_cooling_init(&can1_ftcu_cooling_frame); + can1_ftcu_cooling_frame = canlib::encode::can1::ftcu_cooling(ftcu_cooling); + int frame_size = can1_ftcu_cooling_pack(reinterpret_cast(&frame.data), &can1_ftcu_cooling_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ftcu_brake_t_t ftcu_brake_t) { + frame = can_frame(); + frame.can_id = 261; + frame.can_dlc = 8; + can1_ftcu_brake_t_t can1_ftcu_brake_t_frame; + can1_ftcu_brake_t_init(&can1_ftcu_brake_t_frame); + can1_ftcu_brake_t_frame = canlib::encode::can1::ftcu_brake_t(ftcu_brake_t); + int frame_size = can1_ftcu_brake_t_pack(reinterpret_cast(&frame.data), &can1_ftcu_brake_t_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ftcu_wheelspeed_t ftcu_wheelspeed) { + frame = can_frame(); + frame.can_id = 260; + frame.can_dlc = 8; + can1_ftcu_wheelspeed_t can1_ftcu_wheelspeed_frame; + can1_ftcu_wheelspeed_init(&can1_ftcu_wheelspeed_frame); + can1_ftcu_wheelspeed_frame = canlib::encode::can1::ftcu_wheelspeed(ftcu_wheelspeed); + int frame_size = can1_ftcu_wheelspeed_pack(reinterpret_cast(&frame.data), &can1_ftcu_wheelspeed_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ftcu_timings_t ftcu_timings) { + frame = can_frame(); + frame.can_id = 258; + frame.can_dlc = 8; + can1_ftcu_timings_t can1_ftcu_timings_frame; + can1_ftcu_timings_init(&can1_ftcu_timings_frame); + can1_ftcu_timings_frame = canlib::encode::can1::ftcu_timings(ftcu_timings); + int frame_size = can1_ftcu_timings_pack(reinterpret_cast(&frame.data), &can1_ftcu_timings_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ftcu_driver_t ftcu_driver) { + frame = can_frame(); + frame.can_id = 273; + frame.can_dlc = 8; + can1_ftcu_driver_t can1_ftcu_driver_frame; + can1_ftcu_driver_init(&can1_ftcu_driver_frame); + can1_ftcu_driver_frame = canlib::encode::can1::ftcu_driver(ftcu_driver); + int frame_size = can1_ftcu_driver_pack(reinterpret_cast(&frame.data), &can1_ftcu_driver_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::tts_rr_t tts_rr) { + frame = can_frame(); + frame.can_id = 1796; + frame.can_dlc = 8; + can1_tts_rr_t can1_tts_rr_frame; + can1_tts_rr_init(&can1_tts_rr_frame); + can1_tts_rr_frame = canlib::encode::can1::tts_rr(tts_rr); + int frame_size = can1_tts_rr_pack(reinterpret_cast(&frame.data), &can1_tts_rr_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::tts_rl_t tts_rl) { + frame = can_frame(); + frame.can_id = 1795; + frame.can_dlc = 8; + can1_tts_rl_t can1_tts_rl_frame; + can1_tts_rl_init(&can1_tts_rl_frame); + can1_tts_rl_frame = canlib::encode::can1::tts_rl(tts_rl); + int frame_size = can1_tts_rl_pack(reinterpret_cast(&frame.data), &can1_tts_rl_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::tts_fr_t tts_fr) { + frame = can_frame(); + frame.can_id = 1794; + frame.can_dlc = 8; + can1_tts_fr_t can1_tts_fr_frame; + can1_tts_fr_init(&can1_tts_fr_frame); + can1_tts_fr_frame = canlib::encode::can1::tts_fr(tts_fr); + int frame_size = can1_tts_fr_pack(reinterpret_cast(&frame.data), &can1_tts_fr_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::tts_fl_t tts_fl) { + frame = can_frame(); + frame.can_id = 1793; + frame.can_dlc = 8; + can1_tts_fl_t can1_tts_fl_frame; + can1_tts_fl_init(&can1_tts_fl_frame); + can1_tts_fl_frame = canlib::encode::can1::tts_fl(tts_fl); + int frame_size = can1_tts_fl_pack(reinterpret_cast(&frame.data), &can1_tts_fl_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::stw_param_set_t stw_param_set) { + frame = can_frame(); + frame.can_id = 1026; + frame.can_dlc = 6; + can1_stw_param_set_t can1_stw_param_set_frame; + can1_stw_param_set_init(&can1_stw_param_set_frame); + can1_stw_param_set_frame = canlib::encode::can1::stw_param_set(stw_param_set); + int frame_size = can1_stw_param_set_pack(reinterpret_cast(&frame.data), &can1_stw_param_set_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave0_status_t ams_slave0_status) { + frame = can_frame(); + frame.can_id = 128; + frame.can_dlc = 8; + can1_ams_slave0_status_t can1_ams_slave0_status_frame; + can1_ams_slave0_status_init(&can1_ams_slave0_status_frame); + can1_ams_slave0_status_frame = canlib::encode::can1::ams_slave0_status(ams_slave0_status); + int frame_size = can1_ams_slave0_status_pack(reinterpret_cast(&frame.data), &can1_ams_slave0_status_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ssu_message_t ssu_message) { + frame = can_frame(); + frame.can_id = 1280; + frame.can_dlc = 4; + can1_ssu_message_t can1_ssu_message_frame; + can1_ssu_message_init(&can1_ssu_message_frame); + can1_ssu_message_frame = canlib::encode::can1::ssu_message(ssu_message); + int frame_size = can1_ssu_message_pack(reinterpret_cast(&frame.data), &can1_ssu_message_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_status_t ams_status) { + frame = can_frame(); + frame.can_id = 10; + frame.can_dlc = 8; + can1_ams_status_t can1_ams_status_frame; + can1_ams_status_init(&can1_ams_status_frame); + can1_ams_status_frame = canlib::encode::can1::ams_status(ams_status); + int frame_size = can1_ams_status_pack(reinterpret_cast(&frame.data), &can1_ams_status_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_slave_panic_t ams_slave_panic) { + frame = can_frame(); + frame.can_id = 9; + frame.can_dlc = 8; + can1_ams_slave_panic_t can1_ams_slave_panic_frame; + can1_ams_slave_panic_init(&can1_ams_slave_panic_frame); + can1_ams_slave_panic_frame = canlib::encode::can1::ams_slave_panic(ams_slave_panic); + int frame_size = can1_ams_slave_panic_pack(reinterpret_cast(&frame.data), &can1_ams_slave_panic_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::ams_in_t ams_in) { + frame = can_frame(); + frame.can_id = 11; + frame.can_dlc = 1; + can1_ams_in_t can1_ams_in_frame; + can1_ams_in_init(&can1_ams_in_frame); + can1_ams_in_frame = canlib::encode::can1::ams_in(ams_in); + int frame_size = can1_ams_in_pack(reinterpret_cast(&frame.data), &can1_ams_in_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::shunt_current_t shunt_current) { + frame = can_frame(); + frame.can_id = 1313; + frame.can_dlc = 6; + can1_shunt_current_t can1_shunt_current_frame; + can1_shunt_current_init(&can1_shunt_current_frame); + can1_shunt_current_frame = canlib::encode::can1::shunt_current(shunt_current); + int frame_size = can1_shunt_current_pack(reinterpret_cast(&frame.data), &can1_shunt_current_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::shunt_voltage1_t shunt_voltage1) { + frame = can_frame(); + frame.can_id = 1314; + frame.can_dlc = 6; + can1_shunt_voltage1_t can1_shunt_voltage1_frame; + can1_shunt_voltage1_init(&can1_shunt_voltage1_frame); + can1_shunt_voltage1_frame = canlib::encode::can1::shunt_voltage1(shunt_voltage1); + int frame_size = can1_shunt_voltage1_pack(reinterpret_cast(&frame.data), &can1_shunt_voltage1_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::shunt_voltage2_t shunt_voltage2) { + frame = can_frame(); + frame.can_id = 1315; + frame.can_dlc = 6; + can1_shunt_voltage2_t can1_shunt_voltage2_frame; + can1_shunt_voltage2_init(&can1_shunt_voltage2_frame); + can1_shunt_voltage2_frame = canlib::encode::can1::shunt_voltage2(shunt_voltage2); + int frame_size = can1_shunt_voltage2_pack(reinterpret_cast(&frame.data), &can1_shunt_voltage2_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::shunt_voltage3_t shunt_voltage3) { + frame = can_frame(); + frame.can_id = 1316; + frame.can_dlc = 6; + can1_shunt_voltage3_t can1_shunt_voltage3_frame; + can1_shunt_voltage3_init(&can1_shunt_voltage3_frame); + can1_shunt_voltage3_frame = canlib::encode::can1::shunt_voltage3(shunt_voltage3); + int frame_size = can1_shunt_voltage3_pack(reinterpret_cast(&frame.data), &can1_shunt_voltage3_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::shunt_temperature_t shunt_temperature) { + frame = can_frame(); + frame.can_id = 1317; + frame.can_dlc = 6; + can1_shunt_temperature_t can1_shunt_temperature_frame; + can1_shunt_temperature_init(&can1_shunt_temperature_frame); + can1_shunt_temperature_frame = canlib::encode::can1::shunt_temperature(shunt_temperature); + int frame_size = can1_shunt_temperature_pack(reinterpret_cast(&frame.data), &can1_shunt_temperature_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::pdu_command_t pdu_command) { + frame = can_frame(); + frame.can_id = 200; + frame.can_dlc = 7; + can1_pdu_command_t can1_pdu_command_frame; + can1_pdu_command_init(&can1_pdu_command_frame); + can1_pdu_command_frame = canlib::encode::can1::pdu_command(pdu_command); + int frame_size = can1_pdu_command_pack(reinterpret_cast(&frame.data), &can1_pdu_command_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::pdu_response_t pdu_response) { + frame = can_frame(); + frame.can_id = 201; + frame.can_dlc = 7; + can1_pdu_response_t can1_pdu_response_frame; + can1_pdu_response_init(&can1_pdu_response_frame); + can1_pdu_response_frame = canlib::encode::can1::pdu_response(pdu_response); + int frame_size = can1_pdu_response_pack(reinterpret_cast(&frame.data), &can1_pdu_response_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::as_mission_fb_t as_mission_fb) { + frame = can_frame(); + frame.can_id = 1040; + frame.can_dlc = 1; + can1_as_mission_fb_t can1_as_mission_fb_frame; + can1_as_mission_fb_init(&can1_as_mission_fb_frame); + can1_as_mission_fb_frame = canlib::encode::can1::as_mission_fb(as_mission_fb); + int frame_size = can1_as_mission_fb_pack(reinterpret_cast(&frame.data), &can1_as_mission_fb_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::stw_mission_selected_t stw_mission_selected) { + frame = can_frame(); + frame.can_id = 1024; + frame.can_dlc = 1; + can1_stw_mission_selected_t can1_stw_mission_selected_frame; + can1_stw_mission_selected_init(&can1_stw_mission_selected_frame); + can1_stw_mission_selected_frame = canlib::encode::can1::stw_mission_selected(stw_mission_selected); + int frame_size = can1_stw_mission_selected_pack(reinterpret_cast(&frame.data), &can1_stw_mission_selected_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::epsc_out_t epsc_out) { + frame = can_frame(); + frame.can_id = 293; + frame.can_dlc = 8; + can1_epsc_out_t can1_epsc_out_frame; + can1_epsc_out_init(&can1_epsc_out_frame); + can1_epsc_out_frame = canlib::encode::can1::epsc_out(epsc_out); + int frame_size = can1_epsc_out_pack(reinterpret_cast(&frame.data), &can1_epsc_out_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::epsc_steering_in_t epsc_steering_in) { + frame = can_frame(); + frame.can_id = 291; + frame.can_dlc = 2; + can1_epsc_steering_in_t can1_epsc_steering_in_frame; + can1_epsc_steering_in_init(&can1_epsc_steering_in_frame); + can1_epsc_steering_in_frame = canlib::encode::can1::epsc_steering_in(epsc_steering_in); + int frame_size = can1_epsc_steering_in_pack(reinterpret_cast(&frame.data), &can1_epsc_steering_in_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::stw_buttons_t stw_buttons) { + frame = can_frame(); + frame.can_id = 1025; + frame.can_dlc = 1; + can1_stw_buttons_t can1_stw_buttons_frame; + can1_stw_buttons_init(&can1_stw_buttons_frame); + can1_stw_buttons_frame = canlib::encode::can1::stw_buttons(stw_buttons); + int frame_size = can1_stw_buttons_pack(reinterpret_cast(&frame.data), &can1_stw_buttons_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::stw_status_t stw_status) { + frame = can_frame(); + frame.can_id = 1042; + frame.can_dlc = 7; + can1_stw_status_t can1_stw_status_frame; + can1_stw_status_init(&can1_stw_status_frame); + can1_stw_status_frame = canlib::encode::can1::stw_status(stw_status); + int frame_size = can1_stw_status_pack(reinterpret_cast(&frame.data), &can1_stw_status_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::pdu_current_1_t pdu_current_1) { + frame = can_frame(); + frame.can_id = 202; + frame.can_dlc = 8; + can1_pdu_current_1_t can1_pdu_current_1_frame; + can1_pdu_current_1_init(&can1_pdu_current_1_frame); + can1_pdu_current_1_frame = canlib::encode::can1::pdu_current_1(pdu_current_1); + int frame_size = can1_pdu_current_1_pack(reinterpret_cast(&frame.data), &can1_pdu_current_1_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::pdu_current_2_t pdu_current_2) { + frame = can_frame(); + frame.can_id = 203; + frame.can_dlc = 8; + can1_pdu_current_2_t can1_pdu_current_2_frame; + can1_pdu_current_2_init(&can1_pdu_current_2_frame); + can1_pdu_current_2_frame = canlib::encode::can1::pdu_current_2(pdu_current_2); + int frame_size = can1_pdu_current_2_pack(reinterpret_cast(&frame.data), &can1_pdu_current_2_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::pdu_current_3_t pdu_current_3) { + frame = can_frame(); + frame.can_id = 204; + frame.can_dlc = 8; + can1_pdu_current_3_t can1_pdu_current_3_frame; + can1_pdu_current_3_init(&can1_pdu_current_3_frame); + can1_pdu_current_3_frame = canlib::encode::can1::pdu_current_3(pdu_current_3); + int frame_size = can1_pdu_current_3_pack(reinterpret_cast(&frame.data), &can1_pdu_current_3_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::pdu_current_4_t pdu_current_4) { + frame = can_frame(); + frame.can_id = 205; + frame.can_dlc = 8; + can1_pdu_current_4_t can1_pdu_current_4_frame; + can1_pdu_current_4_init(&can1_pdu_current_4_frame); + can1_pdu_current_4_frame = canlib::encode::can1::pdu_current_4(pdu_current_4); + int frame_size = can1_pdu_current_4_pack(reinterpret_cast(&frame.data), &can1_pdu_current_4_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + +extern "C" void canlib::Transceiver::transmit(canlib::frame::decoded::can1::epsc_config_in_t epsc_config_in) { + frame = can_frame(); + frame.can_id = 292; + frame.can_dlc = 6; + can1_epsc_config_in_t can1_epsc_config_in_frame; + can1_epsc_config_in_init(&can1_epsc_config_in_frame); + can1_epsc_config_in_frame = canlib::encode::can1::epsc_config_in(epsc_config_in); + int frame_size = can1_epsc_config_in_pack(reinterpret_cast(&frame.data), &can1_epsc_config_in_frame, sizeof(frame.data)); + + if (frame_size < 0) { + perror("Pack"); + printf("CAN Frame size unacceptable"); + return; + } + + if (::write(socket_instance, &frame, sizeof(struct can_frame)) < 0) { + perror("Write to device: "); + printf("Not able to write to socket can"); + return; + } +} + + diff --git a/ros2_ws/src/ft_can_viewer/CMakeLists.txt b/ros2_ws/src/ft_can_viewer/CMakeLists.txt new file mode 100644 index 0000000..8e570bd --- /dev/null +++ b/ros2_ws/src/ft_can_viewer/CMakeLists.txt @@ -0,0 +1,38 @@ +cmake_minimum_required(VERSION 3.8) +project(ft_can_viewer) + +if(CMAKE_CXX_COMPILER_ID MATCHES "(GNU|Clang)") + add_compile_options(-Wall -Wextra) +endif() + +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + +find_package(ament_cmake REQUIRED) +find_package(rclcpp REQUIRED) +find_package(std_msgs REQUIRED) +find_package(ft_can_transceiver_lib REQUIRED) + +# Executable +add_executable(can_viewer_node src/can_viewer_node.cpp) +target_compile_features(can_viewer_node PUBLIC cxx_std_17) + +# ROS‑2‑Includes & -Deps +ament_target_dependencies( + can_viewer_node + rclcpp + std_msgs + ft_can_transceiver_lib +) + +# Ganz wichtiger Link‑Step: +target_link_libraries( + can_viewer_node + ft_can_transceiver_lib +) + +install( + TARGETS can_viewer_node + DESTINATION lib/${PROJECT_NAME} +) + +ament_package() diff --git a/ros2_ws/src/ft_can_viewer/package.xml b/ros2_ws/src/ft_can_viewer/package.xml new file mode 100644 index 0000000..70fd833 --- /dev/null +++ b/ros2_ws/src/ft_can_viewer/package.xml @@ -0,0 +1,18 @@ + + + + ft_can_viewer + 0.1.0 + CAN - ROS2 Publisher für Foxglove mit Transceiver-Lib + Elias + MIT + + ament_cmake + rclcpp + std_msgs + ft_can_transceiver_lib + + + ament_cmake + + diff --git a/ros2_ws/src/ft_can_viewer/src/can_viewer_node.cpp b/ros2_ws/src/ft_can_viewer/src/can_viewer_node.cpp new file mode 100644 index 0000000..842e2f9 --- /dev/null +++ b/ros2_ws/src/ft_can_viewer/src/can_viewer_node.cpp @@ -0,0 +1,54 @@ +#include +#include +#include +#include +#include +#include + +class CanViewerNode : public rclcpp::Node { +public: + CanViewerNode() : Node("can_viewer_node"), transceiver_("vcan0", {}) { + allow_torque_pub_ = this->create_publisher("can/telemetrie/allow_torque", 10); + brake_ok_pub_ = this->create_publisher("can/telemetrie/brake_ok", 10); + torque_limit_pub_ = this->create_publisher("can/telemetrie/torque_limit", 10); + + canlib::callback::can1::telemetrie = [this](can1_telemetrie_t /*frame_raw*/, canlib::frame::decoded::can1::telemetrie_t frame_decoded) { + std_msgs::msg::Bool msg_allow, msg_brake; + std_msgs::msg::Float64 msg_torque; + + msg_allow.data = frame_decoded.allow_torque; + msg_brake.data = frame_decoded.brake_ok; + msg_torque.data = frame_decoded.torque_limit; + + allow_torque_pub_->publish(msg_allow); + brake_ok_pub_->publish(msg_brake); + torque_limit_pub_->publish(msg_torque); + + RCLCPP_INFO(this->get_logger(), "Telemetrie: allow_torque=%d brake_ok=%d torque_limit=%f", msg_allow.data, msg_brake.data, msg_torque.data); + }; + + // Empfangsthread starten + receiver_thread_ = std::thread([this]() { + while (rclcpp::ok()) { + transceiver_.receive(); + } + }); + receiver_thread_.detach(); + } + +private: + canlib::Transceiver transceiver_; + std::thread receiver_thread_; + // Die Publisher + rclcpp::Publisher::SharedPtr allow_torque_pub_; + rclcpp::Publisher::SharedPtr brake_ok_pub_; + rclcpp::Publisher::SharedPtr torque_limit_pub_; +}; + +int main(int argc, char * argv[]) { + rclcpp::init(argc, argv); + auto node = std::make_shared(); + rclcpp::spin(node); + rclcpp::shutdown(); + return 0; +} \ No newline at end of file