diff --git a/.gitignore b/.gitignore index 73ae222..bac52e6 100644 --- a/.gitignore +++ b/.gitignore @@ -57,7 +57,6 @@ doc/_vapi_code doc/DoxygenWarning.txt # Conan intermediate files and folders - cmake_install.cmake conan.lock conanbuildinfo.cmake @@ -65,9 +64,13 @@ conanbuildinfo.txt conan_imports_manifest.txt conaninfo.txt graph_info.json +# Conan general +conan_tools.txt +conanbuild.yml +conanfile_mingw.py +conanfile_unix.py # Byte-compiled / optimized / DLL files - __pycache__/ *.py[cod] *$py.class @@ -100,3 +103,7 @@ sdv_services/can_communication_silkit/sil-kit;* # CppCheck directories analysis-cppcheck-build-dir/ + +#azure & git +azure-pipelines.yml +refresh_git_branch_list.cmd \ No newline at end of file diff --git a/examples/auto_headlamp_example/simulation_artifacts/carla_bridge_coupecar.fmu b/examples/auto_headlamp_example/simulation_artifacts/carla_bridge_coupecar.fmu new file mode 100644 index 0000000..c820706 --- /dev/null +++ b/examples/auto_headlamp_example/simulation_artifacts/carla_bridge_coupecar.fmu @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c98083f107c553708a3742946c8b2168170dcc5d83c7c4471237e4b1680a3b3b +size 310594 diff --git a/examples/auto_headlamp_example/simulation_artifacts/carla_bridge_patrolcar.fmu b/examples/auto_headlamp_example/simulation_artifacts/carla_bridge_patrolcar.fmu new file mode 100644 index 0000000..7555bcb --- /dev/null +++ b/examples/auto_headlamp_example/simulation_artifacts/carla_bridge_patrolcar.fmu @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:987d6ba759180e7e394d119a9e4eb9dabcba3319373d9a65bbaa2cc0284a53b4 +size 310592 diff --git a/examples/auto_headlamp_example/simulation_artifacts/carla_bridge_source_files.zip b/examples/auto_headlamp_example/simulation_artifacts/carla_bridge_source_files.zip new file mode 100644 index 0000000..009bae1 --- /dev/null +++ b/examples/auto_headlamp_example/simulation_artifacts/carla_bridge_source_files.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06a0cefdc8ea139e063b1f6ac98c8a7acede1ad4a62f0b2786ce4e186051858b +size 317682 diff --git a/examples/door_demo_example/bs/bs_front_door_left/bs_front_door_left.cpp b/examples/door_demo_example/bs/bs_front_door_left/bs_front_door_left.cpp index 81c7770..c6b0b0a 100644 --- a/examples/door_demo_example/bs/bs_front_door_left/bs_front_door_left.cpp +++ b/examples/door_demo_example/bs/bs_front_door_left/bs_front_door_left.cpp @@ -8,7 +8,7 @@ #include "bs_front_door_left.h" /** - * @brief ConstructorF + * @brief Constructor */ CBasicServiceFrontDoorLeft::CBasicServiceFrontDoorLeft() { diff --git a/examples/door_demo_example/bs/bs_front_door_left/bs_front_door_left.h b/examples/door_demo_example/bs/bs_front_door_left/bs_front_door_left.h index 7cdc098..66e9d3b 100644 --- a/examples/door_demo_example/bs/bs_front_door_left/bs_front_door_left.h +++ b/examples/door_demo_example/bs/bs_front_door_left/bs_front_door_left.h @@ -84,10 +84,10 @@ public: private: - bool m_leftDoorIsOpen01 { 0 }; - mutable std::mutex m_leftDoorIsOpen01MutexCallbacks; ///< Mutex protecting m_leftDoorIsOpen01Callbacks + bool m_leftDoorIsOpen01 { 0 }; ///< open&close state of the door + mutable std::mutex m_leftDoorIsOpen01MutexCallbacks; ///< Mutex protecting m_leftDoorIsOpen01Callbacks std::set m_leftDoorIsOpen01Callbacks; ///< collection of events to be called - vss::Vehicle::Chassis::Door::Axle01::LeftDevice::IVSS_WriteLock* m_ptrLock = nullptr; + vss::Vehicle::Chassis::Door::Axle01::LeftDevice::IVSS_WriteLock* m_ptrLock = nullptr; ///< Interface pointer to lock/unlock the door }; DEFINE_SDV_OBJECT(CBasicServiceFrontDoorLeft) diff --git a/examples/door_demo_example/bs/bs_front_door_right/bs_front_door_right.cpp b/examples/door_demo_example/bs/bs_front_door_right/bs_front_door_right.cpp index f3206af..678bd7f 100644 --- a/examples/door_demo_example/bs/bs_front_door_right/bs_front_door_right.cpp +++ b/examples/door_demo_example/bs/bs_front_door_right/bs_front_door_right.cpp @@ -8,7 +8,7 @@ #include "bs_front_door_right.h" /** - * @brief ConstructorF + * @brief Constructor */ CBasicServiceFrontDoorRight::CBasicServiceFrontDoorRight() { diff --git a/examples/door_demo_example/bs/bs_front_door_right/bs_front_door_right.h b/examples/door_demo_example/bs/bs_front_door_right/bs_front_door_right.h index e35d9de..4acd429 100644 --- a/examples/door_demo_example/bs/bs_front_door_right/bs_front_door_right.h +++ b/examples/door_demo_example/bs/bs_front_door_right/bs_front_door_right.h @@ -84,10 +84,10 @@ public: private: - bool m_rightDoorIsOpen01 { 0 }; - mutable std::mutex m_rightDoorIsOpen01MutexCallbacks; ///< Mutex protecting m_rightDoorIsOpen01Callbacks + bool m_rightDoorIsOpen01 { 0 }; ///< open&close state of the door + mutable std::mutex m_rightDoorIsOpen01MutexCallbacks; ///< Mutex protecting m_rightDoorIsOpen01Callbacks std::set m_rightDoorIsOpen01Callbacks; ///< collection of events to be called - vss::Vehicle::Chassis::Door::Axle01::RightDevice::IVSS_WriteLock* m_ptrLock = nullptr; + vss::Vehicle::Chassis::Door::Axle01::RightDevice::IVSS_WriteLock* m_ptrLock = nullptr; ///< Interface pointer to lock/unlock the door }; DEFINE_SDV_OBJECT(CBasicServiceFrontDoorRight) diff --git a/examples/door_demo_example/bs/bs_rear_door_left/bs_rear_door_left.cpp b/examples/door_demo_example/bs/bs_rear_door_left/bs_rear_door_left.cpp index 2601066..f96b0b1 100644 --- a/examples/door_demo_example/bs/bs_rear_door_left/bs_rear_door_left.cpp +++ b/examples/door_demo_example/bs/bs_rear_door_left/bs_rear_door_left.cpp @@ -8,7 +8,7 @@ #include "bs_rear_door_left.h" /** - * @brief ConstructorF + * @brief Constructor */ CBasicServiceRearDoorLeft::CBasicServiceRearDoorLeft() { diff --git a/examples/door_demo_example/bs/bs_rear_door_left/bs_rear_door_left.h b/examples/door_demo_example/bs/bs_rear_door_left/bs_rear_door_left.h index 140412c..fe556d8 100644 --- a/examples/door_demo_example/bs/bs_rear_door_left/bs_rear_door_left.h +++ b/examples/door_demo_example/bs/bs_rear_door_left/bs_rear_door_left.h @@ -84,10 +84,10 @@ public: private: - bool m_leftDoorIsOpen02 { 0 }; - mutable std::mutex m_leftDoorIsOpen02MutexCallbacks; ///< Mutex protecting m_leftDoorIsOpen02Callbacks + bool m_leftDoorIsOpen02 { 0 }; ///< open&close state of the door + mutable std::mutex m_leftDoorIsOpen02MutexCallbacks; ///< Mutex protecting m_leftDoorIsOpen02Callbacks std::set m_leftDoorIsOpen02Callbacks; ///< collection of events to be called - vss::Vehicle::Chassis::Door::Axle02::LeftDevice::IVSS_WriteLock* m_ptrLock = nullptr; + vss::Vehicle::Chassis::Door::Axle02::LeftDevice::IVSS_WriteLock* m_ptrLock = nullptr; ///< Interface pointer to lock/unlock the door }; DEFINE_SDV_OBJECT(CBasicServiceRearDoorLeft) diff --git a/examples/door_demo_example/bs/bs_rear_door_right/bs_rear_door_right.cpp b/examples/door_demo_example/bs/bs_rear_door_right/bs_rear_door_right.cpp index 27e173e..63fb299 100644 --- a/examples/door_demo_example/bs/bs_rear_door_right/bs_rear_door_right.cpp +++ b/examples/door_demo_example/bs/bs_rear_door_right/bs_rear_door_right.cpp @@ -8,7 +8,7 @@ #include "bs_rear_door_right.h" /** - * @brief ConstructorF + * @brief Constructor */ CBasicServiceRearDoorRight::CBasicServiceRearDoorRight() { diff --git a/examples/door_demo_example/bs/bs_rear_door_right/bs_rear_door_right.h b/examples/door_demo_example/bs/bs_rear_door_right/bs_rear_door_right.h index 00a2379..527a2b4 100644 --- a/examples/door_demo_example/bs/bs_rear_door_right/bs_rear_door_right.h +++ b/examples/door_demo_example/bs/bs_rear_door_right/bs_rear_door_right.h @@ -84,10 +84,10 @@ public: private: - bool m_rightDoorIsOpen02 { 0 }; - mutable std::mutex m_rightDoorIsOpen02MutexCallbacks; ///< Mutex protecting m_rightDoorIsOpen02Callbacks + bool m_rightDoorIsOpen02 { 0 }; ///< open&close state of the door + mutable std::mutex m_rightDoorIsOpen02MutexCallbacks; ///< Mutex protecting m_rightDoorIsOpen02Callbacks std::set m_rightDoorIsOpen02Callbacks; ///< collection of events to be called - vss::Vehicle::Chassis::Door::Axle02::RightDevice::IVSS_WriteLock* m_ptrLock = nullptr; + vss::Vehicle::Chassis::Door::Axle02::RightDevice::IVSS_WriteLock* m_ptrLock = nullptr; ///< Interface pointer to lock/unlock the door }; DEFINE_SDV_OBJECT(CBasicServiceRearDoorRight) diff --git a/examples/door_demo_example/vd/vd_front_door_left/vd_front_door_left.h b/examples/door_demo_example/vd/vd_front_door_left/vd_front_door_left.h index 46b9347..6622e91 100644 --- a/examples/door_demo_example/vd/vd_front_door_left/vd_front_door_left.h +++ b/examples/door_demo_example/vd/vd_front_door_left/vd_front_door_left.h @@ -90,12 +90,12 @@ private: */ void ExecuteAllCallBacksForLeftDoorIsOpen01(sdv::any_t value); - sdv::core::CSignal m_leftLatch01; - sdv::core::CSignal m_leftDoorIsOpen01Signal; ///< Signal of the vehicle device - mutable std::mutex m_leftDoorIsOpen01MutexCallbacks; ///< Mutex protecting m_leftDoorIsOpen01Callbacks + sdv::core::CSignal m_leftLatch01; ///< Signal to lock/unlock the door + sdv::core::CSignal m_leftDoorIsOpen01Signal; ///< Open/close signal of the vehicle device + mutable std::mutex m_leftDoorIsOpen01MutexCallbacks; ///< Mutex protecting m_leftDoorIsOpen01Callbacks std::set m_leftDoorIsOpen01Callbacks; ///< collection of events to be called - std::atomic m_status = { sdv::EObjectStatus::initialization_pending }; ///< To update the object status when it changes. + std::atomic m_status = { sdv::EObjectStatus::initialization_pending }; ///< To update the object status when it changes. }; DEFINE_SDV_OBJECT(CVehicleDeviceFrontDoorLeft) diff --git a/examples/door_demo_example/vd/vd_front_door_right/vd_front_door_right.h b/examples/door_demo_example/vd/vd_front_door_right/vd_front_door_right.h index 563b715..b71db53 100644 --- a/examples/door_demo_example/vd/vd_front_door_right/vd_front_door_right.h +++ b/examples/door_demo_example/vd/vd_front_door_right/vd_front_door_right.h @@ -90,12 +90,12 @@ private: */ void ExecuteAllCallBacksForRightDoorIsOpen01(sdv::any_t value); - sdv::core::CSignal m_rightLatch01; - sdv::core::CSignal m_rightDoorIsOpen01Signal; ///< Signal of the vehicle device - mutable std::mutex m_rightDoorIsOpen01MutexCallbacks; ///< Mutex protecting m_rightDoorIsOpen01Callbacks + sdv::core::CSignal m_rightLatch01; ///< Signal to lock/unlock the door + sdv::core::CSignal m_rightDoorIsOpen01Signal; ///< Open/close signal of the vehicle device + mutable std::mutex m_rightDoorIsOpen01MutexCallbacks; ///< Mutex protecting m_rightDoorIsOpen01Callbacks std::set m_rightDoorIsOpen01Callbacks; ///< collection of events to be called - std::atomic m_status = { sdv::EObjectStatus::initialization_pending }; ///< To update the object status when it changes. + std::atomic m_status = { sdv::EObjectStatus::initialization_pending }; ///< To update the object status when it changes. }; DEFINE_SDV_OBJECT(CVehicleDeviceFrontDoorRight) diff --git a/examples/door_demo_example/vd/vd_rear_door_left/vd_rear_door_left.h b/examples/door_demo_example/vd/vd_rear_door_left/vd_rear_door_left.h index dbdc401..b165c00 100644 --- a/examples/door_demo_example/vd/vd_rear_door_left/vd_rear_door_left.h +++ b/examples/door_demo_example/vd/vd_rear_door_left/vd_rear_door_left.h @@ -90,12 +90,12 @@ private: */ void ExecuteAllCallBacksForLeftDoorIsOpen02(sdv::any_t value); - sdv::core::CSignal m_leftLatch02; - sdv::core::CSignal m_leftDoorIsOpen02Signal; ///< Signal of the vehicle device - mutable std::mutex m_leftDoorIsOpen02MutexCallbacks; ///< Mutex protecting m_leftDoorIsOpen02Callbacks + sdv::core::CSignal m_leftLatch02; ///< Signal to lock/unlock the door + sdv::core::CSignal m_leftDoorIsOpen02Signal; ///< Open/close signal of the vehicle device + mutable std::mutex m_leftDoorIsOpen02MutexCallbacks; ///< Mutex protecting m_leftDoorIsOpen02Callbacks std::set m_leftDoorIsOpen02Callbacks; ///< collection of events to be called - std::atomic m_status = { sdv::EObjectStatus::initialization_pending }; ///< To update the object status when it changes. + std::atomic m_status = { sdv::EObjectStatus::initialization_pending }; ///< To update the object status when it changes. }; DEFINE_SDV_OBJECT(CVehicleDeviceRearDoorLeft) diff --git a/examples/door_demo_example/vd/vd_rear_door_right/vd_rear_door_right.h b/examples/door_demo_example/vd/vd_rear_door_right/vd_rear_door_right.h index 9c18ba2..f0e1385 100644 --- a/examples/door_demo_example/vd/vd_rear_door_right/vd_rear_door_right.h +++ b/examples/door_demo_example/vd/vd_rear_door_right/vd_rear_door_right.h @@ -90,12 +90,12 @@ private: */ void ExecuteAllCallBacksForRightDoorIsOpen02(sdv::any_t value); - sdv::core::CSignal m_rightLatch02; - sdv::core::CSignal m_rightDoorIsOpen02Signal; ///< Signal of the vehicle device - mutable std::mutex m_rightDoorIsOpen02MutexCallbacks; ///< Mutex protecting m_rightDoorIsOpen02Callbacks + sdv::core::CSignal m_rightLatch02; ///< Signal to lock/unlock the door + sdv::core::CSignal m_rightDoorIsOpen02Signal; ///< Open/close signal of the vehicle device + mutable std::mutex m_rightDoorIsOpen02MutexCallbacks; ///< Mutex protecting m_rightDoorIsOpen02Callbacks std::set m_rightDoorIsOpen02Callbacks; ///< collection of events to be called - std::atomic m_status = { sdv::EObjectStatus::initialization_pending }; ///< To update the object status when it changes. + std::atomic m_status = { sdv::EObjectStatus::initialization_pending }; ///< To update the object status when it changes. }; DEFINE_SDV_OBJECT(CVehicleDeviceRearDoorRight) diff --git a/examples/open_trunk_example/open_trunk_app/console.cpp b/examples/open_trunk_example/open_trunk_app/console.cpp index c4a4a1b..a3295f8 100644 --- a/examples/open_trunk_example/open_trunk_app/console.cpp +++ b/examples/open_trunk_example/open_trunk_app/console.cpp @@ -221,7 +221,7 @@ void CConsole::WriteSpeed(float value) if (m_SpeedVD != value) { m_SpeedVD = value; - PrintValue(g_sVehicleDeviceSpeed, "Vehicle Speed RX", m_SpeedVD, "m/s"); + PrintValue(g_sVehicleDeviceSpeed, "Vehicle Speed RX", m_SpeedVD, "km/h"); } } @@ -230,7 +230,7 @@ void CConsole::SetSpeed(float value) if (m_SpeedBS != value) { m_SpeedBS = value; - PrintValue(g_sBasicServiceSpeed, "Vehicle Speed RX", m_SpeedBS * 3.6f, "km/h"); + PrintValue(g_sBasicServiceSpeed, "Vehicle Speed RX", m_SpeedBS, "km/h"); } } diff --git a/examples/open_trunk_example/trunk_service/complex_service.h b/examples/open_trunk_example/trunk_service/complex_service.h index 38e42d4..2759cc0 100644 --- a/examples/open_trunk_example/trunk_service/complex_service.h +++ b/examples/open_trunk_example/trunk_service/complex_service.h @@ -16,7 +16,10 @@ /** - * @brief Open trunk service: opens the trunk if vehicle is not moving + * @brief Open trunk example service + * @details This complex service checks the speed of the vehicle. in case the vehicle is oving, it prohibits the opening of the trunk. + * Input events from basic service: vehicle speed in km/h + * Output call for basic service: opening the trunk */ class CTrunkExampleService : public sdv::CSdvObject , public sdv::IObjectControl @@ -75,12 +78,12 @@ public: /** * @brief Set vehicleSpeed signal - * @param[in] value vehicleSpeed + * @param[in] value vehicle speed in km/h */ virtual void SetSpeed(float value) override; /** - * @brief Save call to open the trunk. Opening the trunk is onkly allowed when the vehicle is not moving + * @brief Save call to open the trunk. Opening the trunk is only allowed when the vehicle is not moving * @return Returns whether the trunk could be opened or not. */ virtual bool PopTrunk() override; diff --git a/examples/open_trunk_example/vss_open_trunk_example.csv b/examples/open_trunk_example/vss_open_trunk_example.csv index 4127b0a..642479c 100644 --- a/examples/open_trunk_example/vss_open_trunk_example.csv +++ b/examples/open_trunk_example/vss_open_trunk_example.csv @@ -1,6 +1,6 @@ ;Class name;Function name;Signal name;vss;Signal direction;type;DBC CAN name includes CAN message name ;;;;;;; -VD;VehicleSpeed;Speed;vehicleSpeed;Vehicle.Speed;RX;float;CAN_Input.Speed +VD;VehicleSpeed;Speed;vehicleSpeed;Vehicle.Speed;RX;float;CAN_Input.Speed;"float vehicleSpeed = value.get() * 3.6f;" VD;VehicleTrunk;Open;trunk;Vehicle.Body.Trunk;TX;boolean;CAN_Output.OpenTrunk BS;VehicleSpeed;Speed;vehicleSpeed;Vehicle.Speed;RX;float;Vehicle.Speed BS;VehicleTrunk;Open;trunk;Vehicle.Body.Trunk;TX;boolean;Vehicle.Body.Trunk diff --git a/examples/system_demo_example/example_app/console.cpp b/examples/system_demo_example/example_app/console.cpp index 40d1ba0..c6bde02 100644 --- a/examples/system_demo_example/example_app/console.cpp +++ b/examples/system_demo_example/example_app/console.cpp @@ -274,8 +274,8 @@ void CConsole::UpdateData() PrintText(g_sDLSteeringWheel, "Data link signals are unavailable!"); // Print basic service event values - PrintValue(g_sBSSteeringWheel, "Steering Angle", m_fSteeringWheelAngle * 57.296f , "deg"); - PrintValue(g_sBSVehicleSpeed, "Vehicle Speed RX", m_fVehicleSpeed * 3.6f , "km/h"); + PrintValue(g_sBSSteeringWheel, "Steering Angle", m_fSteeringWheelAngle, "deg"); + PrintValue(g_sBSVehicleSpeed, "Vehicle Speed RX", m_fVehicleSpeed, "km/h"); // Get complex service information if (m_pCounterSteeringSvc) diff --git a/examples/system_demo_example/example_service/complex_service.cpp b/examples/system_demo_example/example_service/complex_service.cpp index ea6df6a..ebc3358 100644 --- a/examples/system_demo_example/example_service/complex_service.cpp +++ b/examples/system_demo_example/example_service/complex_service.cpp @@ -1,7 +1,7 @@ #include #include "complex_service.h" -const float g_fSpeedThreshold = 30.0f / 3.6f; +const float g_fSpeedThreshold = 30.0f; CCounterSteeringExampleService::CCounterSteeringExampleService() { @@ -141,8 +141,8 @@ void CCounterSteeringExampleService::UpdateRearAxleAngle() if (CounterSteeringActive()) { // Get steering wheel angle percentage - // The steering wheel can have values from -16...16 rad. - float fSteeringWheelPercent = m_fSteeringWheel / 16.0f; + // The steering wheel can have values from -916.736 to 916.736 degrees. + float fSteeringWheelPercent = m_fSteeringWheel / 916.736f; if (fSteeringWheelPercent > 1.0) fSteeringWheelPercent = 1.0; if (fSteeringWheelPercent < -1.0) fSteeringWheelPercent = -1.0; diff --git a/examples/system_demo_example/vss_demo_example.csv b/examples/system_demo_example/vss_demo_example.csv index 6eba93d..0b619ee 100644 --- a/examples/system_demo_example/vss_demo_example.csv +++ b/examples/system_demo_example/vss_demo_example.csv @@ -1,7 +1,7 @@ ;Class name;Function name;Signal name;vss;Signal direction;type;DBC CAN name includes CAN message name ;;;;;;; -VD;SteeringWheel;SteeringWheel;wheelAngle;Vehicle.Chassis.SteeringWheel.Angle;RX;float;CAN_Input.SteeringWheel -VD;VehicleSpeed;Speed;vehicleSpeed;Vehicle.Speed;RX;float;CAN_Input.Speed +VD;SteeringWheel;SteeringWheel;wheelAngle;Vehicle.Chassis.SteeringWheel.Angle;RX;float;CAN_Input.SteeringWheel;"float wheelAngle = value.get() * 57.296f ;" +VD;VehicleSpeed;Speed;vehicleSpeed;Vehicle.Speed;RX;float;CAN_Input.Speed;"float vehicleSpeed = value.get() * 3.6f;" VD;VehicleChassisAxle;RearAxle;axleAngle;Vehicle.Chassis.RearAxle.Row.Wheel;TX;float;CAN_Output.RearAngle VD;IsActiveCounter;Counter;liveCounter;Vehicle.Software.Application.IsActiveCounter;TX;uint8;CAN_Output.IsActiveCounter BS;SteeringWheel;SteeringWheel;wheelAngle;Vehicle.Chassis.SteeringWheel.Angle;RX;float;Vehicle.Chassis.SteeringWheel.Angle diff --git a/framework_tests/CMakeLists.txt b/framework_tests/CMakeLists.txt index a92b38c..873b7ff 100644 --- a/framework_tests/CMakeLists.txt +++ b/framework_tests/CMakeLists.txt @@ -124,4 +124,4 @@ endif() add_subdirectory(dbc_util) add_subdirectory(vss_util) add_subdirectory(test_vss) - +add_subdirectory(test_vss_formula) diff --git a/framework_tests/test_vss_formula/CMakeLists.txt b/framework_tests/test_vss_formula/CMakeLists.txt new file mode 100644 index 0000000..5ac4ca6 --- /dev/null +++ b/framework_tests/test_vss_formula/CMakeLists.txt @@ -0,0 +1,59 @@ +# Define project +project (VSSComponentsFormulaTests VERSION 1.0 LANGUAGES CXX) + +# Use new policy for project version settings and default warning level +cmake_policy(SET CMP0048 NEW) # requires CMake 3.14 +cmake_policy(SET CMP0092 NEW) # requires CMake 3.15 + +set(CMAKE_CXX_STANDARD 17) + +# Libary symbols are hidden by default +set(CMAKE_CXX_VISIBILITY_PRESET hidden) + +# Include directory to the core framework +include_directories(${SDV_FRAMEWORK_DEV_INCLUDE}) +file (COPY ${PROJECT_SOURCE_DIR}/config/rxformulatypeint32.toml DESTINATION ${CMAKE_BINARY_DIR}/bin/config/) +file (COPY ${PROJECT_SOURCE_DIR}/config/rxformulatypestring.toml DESTINATION ${CMAKE_BINARY_DIR}/bin/config/) + +# VSS util component formula test executable +add_executable(ComponentFormulaTest_VSSComponents load_components_test.cpp) + +include_directories(${CMAKE_CURRENT_LIST_DIR}/../vss_util/generated/with_formula/vss_files/) + +if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(THREADS_PREFER_PTHREAD_FLAG ON) + target_link_libraries(ComponentFormulaTest_VSSComponents ${CMAKE_THREAD_LIBS_INIT} GTest::GTest) + if (WIN32) + target_link_libraries(ComponentFormulaTest_VSSComponents Ws2_32 Winmm Rpcrt4.lib) + else() + target_link_libraries(ComponentFormulaTest_VSSComponents ${CMAKE_DL_LIBS} rt) + endif() +else() + target_link_libraries(ComponentFormulaTest_VSSComponents GTest::GTest Rpcrt4.lib) +endif() + +# Add the VSS utility component formula test +add_test(NAME ComponentFormulaTest_VSSComponents COMMAND ComponentFormulaTest_VSSComponents WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) + +# Execute the test +add_custom_command(TARGET ComponentFormulaTest_VSSComponents POST_BUILD + COMMAND ${CMAKE_COMMAND} -E env TEST_EXECUTION_MODE=CMake "$" --gtest_output=xml:${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ComponentFormulaTest_VSSComponents.xml + VERBATIM +) + +# Build dependencies +add_dependencies(ComponentFormulaTest_VSSComponents + testcase5_vd_rxclassforint32_rx testcase5_vd_rxclassforint32_rx + testcase5_vd_rxclassforstring_rx testcase5_vd_rxclassforstring_rx) + + + + + + + + + + + + diff --git a/framework_tests/test_vss_formula/config/data_dispatch_service.toml b/framework_tests/test_vss_formula/config/data_dispatch_service.toml new file mode 100644 index 0000000..8a04127 --- /dev/null +++ b/framework_tests/test_vss_formula/config/data_dispatch_service.toml @@ -0,0 +1,6 @@ +[Configuration] +Version = 100 + +[[Component]] +Path = "data_dispatch_service.sdv" +Class = "DataDispatchService" diff --git a/framework_tests/test_vss_formula/config/rxformulatypeint32.toml b/framework_tests/test_vss_formula/config/rxformulatypeint32.toml new file mode 100644 index 0000000..b15cfc4 --- /dev/null +++ b/framework_tests/test_vss_formula/config/rxformulatypeint32.toml @@ -0,0 +1,11 @@ +[Configuration] +Version = 100 + +[[Component]] +Path = "testcase5_vd_rxclassforint32_rx.sdv" +Class = "Vehicle.Chassis.Body.Int32_Device" + +[[Component]] +Path = "testcase5_bs_rxclassforint32_rx.sdv" +Class = "Vehicle.Chassis.Body.Int32_Service" + diff --git a/framework_tests/test_vss_formula/config/rxformulatypestring.toml b/framework_tests/test_vss_formula/config/rxformulatypestring.toml new file mode 100644 index 0000000..7dfb10e --- /dev/null +++ b/framework_tests/test_vss_formula/config/rxformulatypestring.toml @@ -0,0 +1,11 @@ +[Configuration] +Version = 100 + +[[Component]] +Path = "testcase5_vd_rxclassforstring_rx.sdv" +Class = "Vehicle.Chassis.Body.String_Device" + +[[Component]] +Path = "testcase5_bs_rxclassforstring_rx.sdv" +Class = "Vehicle.Chassis.Body.String_Service" + diff --git a/framework_tests/test_vss_formula/load_components_test.cpp b/framework_tests/test_vss_formula/load_components_test.cpp new file mode 100644 index 0000000..7ee6c3d --- /dev/null +++ b/framework_tests/test_vss_formula/load_components_test.cpp @@ -0,0 +1,104 @@ +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef _WIN32 +#include +#endif + +bool InitializeAppControl(sdv::app::CAppControl* appControl, const std::string& configFileName) +{ + auto bResult = appControl->AddModuleSearchDir("../../bin"); + bResult &= appControl->Startup(""); + appControl->SetConfigMode(); + bResult &= appControl->AddConfigSearchDir("../../tests/bin/config"); + + if (!configFileName.empty()) + { + bResult &= appControl->LoadConfig(configFileName.c_str()) == sdv::core::EConfigProcessResult::successful; + } + + return bResult; +} + + +TEST(VSSComponentTest, RXInt32) +{ + sdv::app::CAppControl appControl; + + auto bResult = InitializeAppControl(&appControl, "data_dispatch_service.toml"); + ASSERT_EQ(bResult, true); + + sdv::core::CDispatchService dispatch; + sdv::core::CSignal signalRx; + signalRx = dispatch.RegisterRxSignal(testcase5::dsSignalInt32); + ASSERT_TRUE(signalRx); + + bResult &= appControl.LoadConfig("rxformulatypeint32.toml") == sdv::core::EConfigProcessResult::successful; + ASSERT_EQ(bResult, true); + + auto basicService = sdv::core::GetObject("Vehicle.Chassis.Body.Int32_Service").GetInterface(); + ASSERT_TRUE(basicService); + + appControl.SetRunningMode(); + const int32_t expected = 123; + signalRx.Write(expected); + std::this_thread::sleep_for(std::chrono::milliseconds(3)); + ASSERT_EQ(expected * 2, basicService->GetSignalTypeInt32()); + + signalRx.Reset(); + appControl.Shutdown(); +} + +TEST(VSSComponentTest, RXString) +{ + sdv::app::CAppControl appControl; + + auto bResult = InitializeAppControl(&appControl, "data_dispatch_service.toml"); + ASSERT_EQ(bResult, true); + + sdv::core::CDispatchService dispatch; + sdv::core::CSignal signalRx; + signalRx = dispatch.RegisterRxSignal(testcase5::dsSignalString); + ASSERT_TRUE(signalRx); + + bResult &= appControl.LoadConfig("rxformulatypestring.toml") == sdv::core::EConfigProcessResult::successful; + ASSERT_EQ(bResult, true); + + auto basicService = sdv::core::GetObject("Vehicle.Chassis.Body.String_Service").GetInterface(); + ASSERT_TRUE(basicService); + + appControl.SetRunningMode(); + std::string expected = "some text written"; + signalRx.Write(expected); + expected.append("_string_added"); + std::this_thread::sleep_for(std::chrono::milliseconds(3)); + ASSERT_EQ(expected, basicService->GetSignalTypeString()); + + signalRx.Reset(); + appControl.Shutdown(); +} + +extern "C" int main(int argc, char* argv[]) +{ + + + ::testing::InitGoogleTest(&argc, argv); + int result = RUN_ALL_TESTS(); + + return result; +} + +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif diff --git a/framework_tests/vss_util/CMakeLists.txt b/framework_tests/vss_util/CMakeLists.txt index a349f78..393133b 100644 --- a/framework_tests/vss_util/CMakeLists.txt +++ b/framework_tests/vss_util/CMakeLists.txt @@ -40,6 +40,17 @@ if(VSS_CONFIGURATION_FAILED) message(FATAL_ERROR "Configuration failed due to missing folders.") endif() +# Execute vss_with_formula to create IDL files testcase with vehcile device has a convertion formula +message("Create interface code for 'vss_with_formula.csv'.") +execute_process(COMMAND "${SDV_VSS_UTIL}" "${CMAKE_CURRENT_LIST_DIR}/vss_with_formula.csv" "-O${CMAKE_CURRENT_LIST_DIR}/generated/with_formula/" --prefixtestcase5 --version1.0.0.1 --enable_components) +set(MULTIPLE_NAMES_FOLDER "${CMAKE_CURRENT_LIST_DIR}/generated/with_formula/") +if(EXISTS "${WITH_FORMULA_FOLDER}") + message(STATUS "(OK) Folder exists: ${WITH_FORMULA_FOLDER}") +else() + message(WARNING "(Fail) Folder does NOT exist: ${WITH_FORMULA_FOLDER}") + set(VSS_CONFIGURATION_FAILED TRUE) +endif() + # Execute idl_compiler to create interface code for 'vss_unique_names.csv'. message("vss_unique_names.csv: compile all 8 idl files") @@ -203,6 +214,13 @@ execute_process(COMMAND "${SDV_IDL_COMPILER}" "${CMAKE_CURRENT_LIST_DIR}/generat execute_process(COMMAND "${SDV_IDL_COMPILER}" "${CMAKE_CURRENT_LIST_DIR}/generated/all_types/vss_files/vss_vehiclechassisvehiclewchar_vd_rx.idl" "-O${CMAKE_CURRENT_LIST_DIR}/generated/all_types/vss_files/" "-I${SDV_FRAMEWORK_DEV_INCLUDE}" -Igenerated/vss_files/ --no_ps) execute_process(COMMAND "${SDV_IDL_COMPILER}" "${CMAKE_CURRENT_LIST_DIR}/generated/all_types/vss_files/vss_vehiclechassisvehiclewchar_vd_tx.idl" "-O${CMAKE_CURRENT_LIST_DIR}/generated/all_types/vss_files/" "-I${SDV_FRAMEWORK_DEV_INCLUDE}" -Igenerated/vss_files/ --no_ps) +# Execute idl_compiler to create interface code for 'vss_with_formula.csv'. +message("vss_with_formula.csv: compile all 4 idl files") +execute_process(COMMAND "${SDV_IDL_COMPILER}" "${CMAKE_CURRENT_LIST_DIR}/generated/with_formula/vss_files/vss_vehiclechassisbodyint32_vd_rx.idl" "-O${CMAKE_CURRENT_LIST_DIR}/generated/with_formula/vss_files/" "-I${SDV_FRAMEWORK_DEV_INCLUDE}" -Igenerated/vss_files/ --no_ps) +execute_process(COMMAND "${SDV_IDL_COMPILER}" "${CMAKE_CURRENT_LIST_DIR}/generated/with_formula/vss_files/vss_vehiclechassisbodystring_vd_rx.idl" "-O${CMAKE_CURRENT_LIST_DIR}/generated/with_formula/vss_files/" "-I${SDV_FRAMEWORK_DEV_INCLUDE}" -Igenerated/vss_files/ --no_ps) +execute_process(COMMAND "${SDV_IDL_COMPILER}" "${CMAKE_CURRENT_LIST_DIR}/generated/with_formula/vss_files/vss_vehiclechassisbodyint32_bs_rx.idl" "-O${CMAKE_CURRENT_LIST_DIR}/generated/with_formula/vss_files/" "-I${SDV_FRAMEWORK_DEV_INCLUDE}" -Igenerated/vss_files/ --no_ps) +execute_process(COMMAND "${SDV_IDL_COMPILER}" "${CMAKE_CURRENT_LIST_DIR}/generated/with_formula/vss_files/vss_vehiclechassisbodystring_bs_rx.idl" "-O${CMAKE_CURRENT_LIST_DIR}/generated/with_formula/vss_files/" "-I${SDV_FRAMEWORK_DEV_INCLUDE}" -Igenerated/vss_files/ --no_ps) + # Compile all components from 'vss_all_types.csv'. message("vss_all_types.csv: compile 112 components") add_subdirectory(generated/all_types/vss_files/vd_rxclassforboolean) @@ -321,5 +339,9 @@ add_subdirectory(generated/all_types/vss_files/bs_txclassforunsignedlong) add_subdirectory(generated/all_types/vss_files/bs_txclassforunsignedlonglong) add_subdirectory(generated/all_types/vss_files/bs_txclassforunsignedshort) - - +# Compile all components from 'vss_with_formula.csv'. +message("vss_all_types.csv: compile 4 components") +add_subdirectory(generated/with_formula/vss_files/vd_rxclassforint32) +add_subdirectory(generated/with_formula/vss_files/vd_rxclassforstring) +add_subdirectory(generated/with_formula/vss_files/bs_rxclassforint32) +add_subdirectory(generated/with_formula/vss_files/bs_rxclassforstring) diff --git a/framework_tests/vss_util/vss_all_types.csv b/framework_tests/vss_util/vss_all_types.csv index dd194ab..4c70a48 100644 --- a/framework_tests/vss_util/vss_all_types.csv +++ b/framework_tests/vss_util/vss_all_types.csv @@ -1,114 +1,114 @@ -;Class name;Function name;Signal name;vss;Signal direction;type;DBC CAN name includes CAN message name;;;;; -;;;;;;;;;;;; -VD;RXClassForBoolean;SignalTypeBoolean;signalBoolean;Vehicle.Chassis.Vehicle.Boolean;RX;boolean;CAN_Input.boolean;;;;;char -VD;RXClassForFloat;SignalTypeFloat;signalFloat;Vehicle.Chassis.Vehicle.Float;RX;float;CAN_Input.float;;;;;char16 -VD;RXClassForDouble;SignalTypeDouble;signalDouble;Vehicle.Chassis.Vehicle.Double;RX;double;CAN_Input.double;;;;;char32 -VD;RXClassForLongDouble;SignalTypeLongDouble;signalLongDouble;Vehicle.Chassis.Vehicle.LongDouble;RX;long double;CAN_Input.long_double;;;;;wchar -VD;RXClassForShort;SignalTypeShort;signalShort;Vehicle.Chassis.Vehicle.Short;RX;short;CAN_Input.short;;;;;u8string -VD;RXClassForUnsignedShort;SignalTypeUnsignedShort;signalUnsignedShort;Vehicle.Chassis.Vehicle.UnsignedShort;RX;unsigned short;CAN_Input.unsigned_short;;;;;u16string -VD;RXClassForLong;SignalTypeLong;signalLong;Vehicle.Chassis.Vehicle.Long;RX;long;CAN_Input.long;;;;;u32string -VD;RXClassForUnsignedLong;SignalTypeUnsignedLong;signalUnsignedLong;Vehicle.Chassis.Vehicle.UnsignedLong;RX;unsigned long;CAN_Input.unsigned_long;;;;;native -VD;RXClassForLongLong;SignalTypeLongLong;signalLongLong;Vehicle.Chassis.Vehicle.LongLong;RX;long long;CAN_Input.long_long;;;;; -VD;RXClassForUnsignedLongLong;SignalTypeUnsignedLongLong;signalUnsignedLongLong;Vehicle.Chassis.Vehicle.UnsignedLongLong;RX;unsigned long long;CAN_Input.unsigned_long_long;;;;; -VD;RXClassForInt8;SignalTypeInt8;signalInt8;Vehicle.Chassis.Vehicle.Int8;RX;int8;CAN_Input.int8;;;;; -VD;RXClassForUint8;SignalTypeUint8;signalUint8;Vehicle.Chassis.Vehicle.Uint8;RX;uint8;CAN_Input.uint8;;;;; -VD;RXClassForInt16;SignalTypeInt16;signalInt16;Vehicle.Chassis.Vehicle.Int16;RX;int16;CAN_Input.int16;;;;; -VD;RXClassForUint16;SignalTypeUint16;signalUint16;Vehicle.Chassis.Vehicle.Uint16;RX;uint16;CAN_Input.uint16;;;;; -VD;RXClassForInt32;SignalTypeInt32;signalInt32;Vehicle.Chassis.Vehicle.Int32;RX;int32;CAN_Input.int32;;;;; -VD;RXClassForUint32;SignalTypeUint32;signalUint32;Vehicle.Chassis.Vehicle.Uint32;RX;uint32;CAN_Input.uint32;;;;; -VD;RXClassForInt64;SignalTypeInt64;signalInt64;Vehicle.Chassis.Vehicle.Int64;RX;int64;CAN_Input.int64;;;;; -VD;RXClassForUint64;SignalTypeUint64;signalUint64;Vehicle.Chassis.Vehicle.Uint64;RX;uint64;CAN_Input.uint64;;;;; -VD;RXClassForString;SignalTypeString;signalString;Vehicle.Chassis.Vehicle.String;RX;string;CAN_Input.string;;;;; -VD;RXClassForWString;SignalTypeWString;signalWString;Vehicle.Chassis.Vehicle.WString;RX;wstring;CAN_Input.WString;;;;; -VD;RXClassForChar;SignalTypeChar;signalChar;Vehicle.Chassis.Vehicle.Char;RX;char;CAN_Input.char;;;;; -VD;RXClassForChar16;SignalTypeChar16;signalChar16;Vehicle.Chassis.Vehicle.Char16;RX;char16;CAN_Input.char16;;;;; -VD;RXClassForChar32;SignalTypeChar32;signalChar32;Vehicle.Chassis.Vehicle.Char32;RX;char32;CAN_Input.char32;;;;; -VD;RXClassForWChar;SignalTypeWChar;signalWChar;Vehicle.Chassis.Vehicle.WChar;RX;wchar;CAN_Input.wchar;;;;; -VD;RXClassForU8String;SignalTypeU8String;signalU8String;Vehicle.Chassis.Vehicle.U8String;RX;u8string;CAN_Input.u8string;;;;; -VD;RXClassForU16String;SignalTypeU16String;signalU16String;Vehicle.Chassis.Vehicle.U16String;RX;u16string;CAN_Input.u16string;;;;; -VD;RXClassForU32String;SignalTypeU32String;signalU32String;Vehicle.Chassis.Vehicle.U32String;RX;u32string;CAN_Input.u32string;;;;; -VD;RXClassForNative;SignalTypeNative;signalNative;Vehicle.Chassis.Vehicle.Native;RX;native;CAN_Input.native;;;;; -VD;TXClassForBoolean;SignalTypeBoolean;signalBoolean;Vehicle.Chassis.Vehicle.Boolean;TX;boolean;CAN_Output.boolean;;;;; -VD;TXClassForFloat;SignalTypeFloat;signalFloat;Vehicle.Chassis.Vehicle.Float;TX;float;CAN_Output.float;;;;; -VD;TXClassForDouble;SignalTypeDouble;signalDouble;Vehicle.Chassis.Vehicle.Double;TX;double;CAN_Output.double;;;;; -VD;TXClassForLongDouble;SignalTypeLongDouble;signalLongDouble;Vehicle.Chassis.Vehicle.LongDouble;TX;long double;CAN_Output.long_double;;;;; -VD;TXClassForShort;SignalTypeShort;signalShort;Vehicle.Chassis.Vehicle.Short;TX;short;CAN_Output.short;;;;; -VD;TXClassForUnsignedShort;SignalTypeUnsignedShort;signalUnsignedShort;Vehicle.Chassis.Vehicle.UnsignedShort;TX;unsigned short;CAN_Output.unsigned_short;;;;; -VD;TXClassForLong;SignalTypeLong;signalLong;Vehicle.Chassis.Vehicle.Long;TX;long;CAN_Output.long;;;;; -VD;TXClassForUnsignedLong;SignalTypeUnsignedLong;signalUnsignedLong;Vehicle.Chassis.Vehicle.UnsignedLong;TX;unsigned long;CAN_Output.unsigned_long;;;;; -VD;TXClassForLongLong;SignalTypeLongLong;signalLongLong;Vehicle.Chassis.Vehicle.LongLong;TX;long long;CAN_Output.long_long;;;;; -VD;TXClassForUnsignedLongLong;SignalTypeUnsignedLongLong;signalUnsignedLongLong;Vehicle.Chassis.Vehicle.UnsignedLongLong;TX;unsigned long long;CAN_Output.unsigned_long_long;;;;; -VD;TXClassForInt8;SignalTypeInt8;signalInt8;Vehicle.Chassis.Vehicle.Int8;TX;int8;CAN_Output.int8;;;;; -VD;TXClassForUint8;SignalTypeUint8;signalUint8;Vehicle.Chassis.Vehicle.Uint8;TX;uint8;CAN_Output.uint8;;;;; -VD;TXClassForInt16;SignalTypeInt16;signalInt16;Vehicle.Chassis.Vehicle.Int16;TX;int16;CAN_Output.int16;;;;; -VD;TXClassForUint16;SignalTypeUint16;signalUint16;Vehicle.Chassis.Vehicle.Uint16;TX;uint16;CAN_Output.uint16;;;;; -VD;TXClassForInt32;SignalTypeInt32;signalInt32;Vehicle.Chassis.Vehicle.Int32;TX;int32;CAN_Output.int32;;;;; -VD;TXClassForUint32;SignalTypeUint32;signalUint32;Vehicle.Chassis.Vehicle.Uint32;TX;uint32;CAN_Output.uint32;;;;; -VD;TXClassForInt64;SignalTypeInt64;signalInt64;Vehicle.Chassis.Vehicle.Int64;TX;int64;CAN_Output.int64;;;;; -VD;TXClassForUint64;SignalTypeUint64;signalUint64;Vehicle.Chassis.Vehicle.Uint64;TX;uint64;CAN_Output.uint64;;;;; -VD;TXClassForString;SignalTypeString;signalString;Vehicle.Chassis.Vehicle.String;TX;string;CAN_Output.string;;;;; -VD;TXClassForWString;SignalTypeWString;signalWString;Vehicle.Chassis.Vehicle.WString;TX;wstring;CAN_Output.WString;;;;; -VD;TXClassForChar;SignalTypeChar;signalChar;Vehicle.Chassis.Vehicle.Char;TX;char;CAN_Output.char;;;;; -VD;TXClassForChar16;SignalTypeChar16;signalChar16;Vehicle.Chassis.Vehicle.Char16;TX;char16;CAN_Output.char16;;;;; -VD;TXClassForChar32;SignalTypeChar32;signalChar32;Vehicle.Chassis.Vehicle.Char32;TX;char32;CAN_Output.char32;;;;; -VD;TXClassForWChar;SignalTypeWChar;signalWChar;Vehicle.Chassis.Vehicle.WChar;TX;wchar;CAN_Output.wchar;;;;; -VD;TXClassForU8String;SignalTypeU8String;signalU8String;Vehicle.Chassis.Vehicle.U8String;TX;u8string;CAN_Output.u8string;;;;; -VD;TXClassForU16String;SignalTypeU16String;signalU16String;Vehicle.Chassis.Vehicle.U16String;TX;u16string;CAN_Output.u16string;;;;; -VD;TXClassForU32String;SignalTypeU32String;signalU32String;Vehicle.Chassis.Vehicle.U32String;TX;u32string;CAN_Output.u32string;;;;; -VD;TXClassForNative;SignalTypeNative;signalNative;Vehicle.Chassis.Vehicle.Native;TX;native;CAN_Output.native;;;;; -BS;RXClassForBoolean;SignalTypeBoolean;signalBoolean;Vehicle.Chassis.Vehicle.Boolean;RX;boolean;Vehicle.Chassis.Vehicle.Boolean;;;;; -BS;RXClassForFloat;SignalTypeFloat;signalFloat;Vehicle.Chassis.Vehicle.Float;RX;float;Vehicle.Chassis.Vehicle.Float;;;;; -BS;RXClassForDouble;SignalTypeDouble;signalDouble;Vehicle.Chassis.Vehicle.Double;RX;double;Vehicle.Chassis.Vehicle.Double;;;;; -BS;RXClassForLongDouble;SignalTypeLongDouble;signalLongDouble;Vehicle.Chassis.Vehicle.LongDouble;RX;long double;Vehicle.Chassis.Vehicle.LongDouble;;;;; -BS;RXClassForShort;SignalTypeShort;signalShort;Vehicle.Chassis.Vehicle.Short;RX;short;Vehicle.Chassis.Vehicle.Short;;;;; -BS;RXClassForUnsignedShort;SignalTypeUnsignedShort;signalUnsignedShort;Vehicle.Chassis.Vehicle.UnsignedShort;RX;unsigned short;Vehicle.Chassis.Vehicle.UnsignedShort;;;;; -BS;RXClassForLong;SignalTypeLong;signalLong;Vehicle.Chassis.Vehicle.Long;RX;long;Vehicle.Chassis.Vehicle.Long;;;;; -BS;RXClassForUnsignedLong;SignalTypeUnsignedLong;signalUnsignedLong;Vehicle.Chassis.Vehicle.UnsignedLong;RX;unsigned long;Vehicle.Chassis.Vehicle.UnsignedLong;;;;; -BS;RXClassForLongLong;SignalTypeLongLong;signalLongLong;Vehicle.Chassis.Vehicle.LongLong;RX;long long;Vehicle.Chassis.Vehicle.LongLong;;;;; -BS;RXClassForUnsignedLongLong;SignalTypeUnsignedLongLong;signalUnsignedLongLong;Vehicle.Chassis.Vehicle.UnsignedLongLong;RX;unsigned long long;Vehicle.Chassis.Vehicle.UnsignedLongLong;;;;; -BS;RXClassForInt8;SignalTypeInt8;signalInt8;Vehicle.Chassis.Vehicle.Int8;RX;int8;Vehicle.Chassis.Vehicle.Int8;;;;; -BS;RXClassForUint8;SignalTypeUint8;signalUint8;Vehicle.Chassis.Vehicle.Uint8;RX;uint8;Vehicle.Chassis.Vehicle.Uint8;;;;; -BS;RXClassForInt16;SignalTypeInt16;signalInt16;Vehicle.Chassis.Vehicle.Int16;RX;int16;Vehicle.Chassis.Vehicle.Int16;;;;; -BS;RXClassForUint16;SignalTypeUint16;signalUint16;Vehicle.Chassis.Vehicle.Uint16;RX;uint16;Vehicle.Chassis.Vehicle.Uint16;;;;; -BS;RXClassForInt32;SignalTypeInt32;signalInt32;Vehicle.Chassis.Vehicle.Int32;RX;int32;Vehicle.Chassis.Vehicle.Int32;;;;; -BS;RXClassForUint32;SignalTypeUint32;signalUint32;Vehicle.Chassis.Vehicle.Uint32;RX;uint32;Vehicle.Chassis.Vehicle.Uint32;;;;; -BS;RXClassForInt64;SignalTypeInt64;signalInt64;Vehicle.Chassis.Vehicle.Int64;RX;int64;Vehicle.Chassis.Vehicle.Int64;;;;; -BS;RXClassForUint64;SignalTypeUint64;signalUint64;Vehicle.Chassis.Vehicle.Uint64;RX;uint64;Vehicle.Chassis.Vehicle.Uint64;;;;; -BS;RXClassForString;SignalTypeString;signalString;Vehicle.Chassis.Vehicle.String;RX;string;Vehicle.Chassis.Vehicle.String;;;;; -BS;RXClassForWString;SignalTypeWString;signalWString;Vehicle.Chassis.Vehicle.WString;RX;wstring;Vehicle.Chassis.Vehicle.WString;;;;; -BS;RXClassForChar;SignalTypeChar;signalChar;Vehicle.Chassis.Vehicle.Char;RX;char;Vehicle.Chassis.Vehicle.Char;;;;; -BS;RXClassForChar16;SignalTypeChar16;signalChar16;Vehicle.Chassis.Vehicle.Char16;RX;char16;Vehicle.Chassis.Vehicle.Char16;;;;; -BS;RXClassForChar32;SignalTypeChar32;signalChar32;Vehicle.Chassis.Vehicle.Char32;RX;char32;Vehicle.Chassis.Vehicle.Char32;;;;; -BS;RXClassForWChar;SignalTypeWChar;signalWChar;Vehicle.Chassis.Vehicle.WChar;RX;wchar;Vehicle.Chassis.Vehicle.WChar;;;;; -BS;RXClassForU8String;SignalTypeU8String;signalU8String;Vehicle.Chassis.Vehicle.U8String;RX;u8string;Vehicle.Chassis.Vehicle.U8String;;;;; -BS;RXClassForU16String;SignalTypeU16String;signalU16String;Vehicle.Chassis.Vehicle.U16String;RX;u16string;Vehicle.Chassis.Vehicle.U16String;;;;; -BS;RXClassForU32String;SignalTypeU32String;signalU32String;Vehicle.Chassis.Vehicle.U32String;RX;u32string;Vehicle.Chassis.Vehicle.U32String;;;;; -BS;RXClassForNative;SignalTypeNative;signalNative;Vehicle.Chassis.Vehicle.Native;RX;native;Vehicle.Chassis.Vehicle.Native;;;;; -BS;TXClassForBoolean;SignalTypeBoolean;signalBoolean;Vehicle.Chassis.Vehicle.Boolean;TX;boolean;Vehicle.Chassis.Vehicle.Boolean;;;;; -BS;TXClassForFloat;SignalTypeFloat;signalFloat;Vehicle.Chassis.Vehicle.Float;TX;float;Vehicle.Chassis.Vehicle.Float;;;;; -BS;TXClassForDouble;SignalTypeDouble;signalDouble;Vehicle.Chassis.Vehicle.Double;TX;double;Vehicle.Chassis.Vehicle.Double;;;;; -BS;TXClassForLongDouble;SignalTypeLongDouble;signalLongDouble;Vehicle.Chassis.Vehicle.LongDouble;TX;long double;Vehicle.Chassis.Vehicle.LongDouble;;;;; -BS;TXClassForShort;SignalTypeShort;signalShort;Vehicle.Chassis.Vehicle.Short;TX;short;Vehicle.Chassis.Vehicle.Short;;;;; -BS;TXClassForUnsignedShort;SignalTypeUnsignedShort;signalUnsignedShort;Vehicle.Chassis.Vehicle.UnsignedShort;TX;unsigned short;Vehicle.Chassis.Vehicle.UnsignedShort;;;;; -BS;TXClassForLong;SignalTypeLong;signalLong;Vehicle.Chassis.Vehicle.Long;TX;long;Vehicle.Chassis.Vehicle.Long;;;;; -BS;TXClassForUnsignedLong;SignalTypeUnsignedLong;signalUnsignedLong;Vehicle.Chassis.Vehicle.UnsignedLong;TX;unsigned long;Vehicle.Chassis.Vehicle.UnsignedLong;;;;; -BS;TXClassForLongLong;SignalTypeLongLong;signalLongLong;Vehicle.Chassis.Vehicle.LongLong;TX;long long;Vehicle.Chassis.Vehicle.LongLong;;;;; -BS;TXClassForUnsignedLongLong;SignalTypeUnsignedLongLong;signalUnsignedLongLong;Vehicle.Chassis.Vehicle.UnsignedLongLong;TX;unsigned long long;Vehicle.Chassis.Vehicle.UnsignedLongLong;;;;; -BS;TXClassForInt8;SignalTypeInt8;signalInt8;Vehicle.Chassis.Vehicle.Int8;TX;int8;Vehicle.Chassis.Vehicle.Int8;;;;; -BS;TXClassForUint8;SignalTypeUint8;signalUint8;Vehicle.Chassis.Vehicle.Uint8;TX;uint8;Vehicle.Chassis.Vehicle.Uint8;;;;; -BS;TXClassForInt16;SignalTypeInt16;signalInt16;Vehicle.Chassis.Vehicle.Int16;TX;int16;Vehicle.Chassis.Vehicle.Int16;;;;; -BS;TXClassForUint16;SignalTypeUint16;signalUint16;Vehicle.Chassis.Vehicle.Uint16;TX;uint16;Vehicle.Chassis.Vehicle.Uint16;;;;; -BS;TXClassForInt32;SignalTypeInt32;signalInt32;Vehicle.Chassis.Vehicle.Int32;TX;int32;Vehicle.Chassis.Vehicle.Int32;;;;; -BS;TXClassForUint32;SignalTypeUint32;signalUint32;Vehicle.Chassis.Vehicle.Uint32;TX;uint32;Vehicle.Chassis.Vehicle.Uint32;;;;; -BS;TXClassForInt64;SignalTypeInt64;signalInt64;Vehicle.Chassis.Vehicle.Int64;TX;int64;Vehicle.Chassis.Vehicle.Int64;;;;; -BS;TXClassForUint64;SignalTypeUint64;signalUint64;Vehicle.Chassis.Vehicle.Uint64;TX;uint64;Vehicle.Chassis.Vehicle.Uint64;;;;; -BS;TXClassForString;SignalTypeString;signalString;Vehicle.Chassis.Vehicle.String;TX;string;Vehicle.Chassis.Vehicle.String;;;;; -BS;TXClassForWString;SignalTypeWString;signalWString;Vehicle.Chassis.Vehicle.WString;TX;wstring;Vehicle.Chassis.Vehicle.WString;;;;; -BS;TXClassForChar;SignalTypeChar;signalChar;Vehicle.Chassis.Vehicle.Char;TX;char;Vehicle.Chassis.Vehicle.Char;;;;; -BS;TXClassForChar16;SignalTypeChar16;signalChar16;Vehicle.Chassis.Vehicle.Char16;TX;char16;Vehicle.Chassis.Vehicle.Char16;;;;; -BS;TXClassForChar32;SignalTypeChar32;signalChar32;Vehicle.Chassis.Vehicle.Char32;TX;char32;Vehicle.Chassis.Vehicle.Char32;;;;; -BS;TXClassForWChar;SignalTypeWChar;signalWChar;Vehicle.Chassis.Vehicle.WChar;TX;wchar;Vehicle.Chassis.Vehicle.WChar;;;;; -BS;TXClassForU8String;SignalTypeU8String;signalU8String;Vehicle.Chassis.Vehicle.U8String;TX;u8string;Vehicle.Chassis.Vehicle.U8String;;;;; -BS;TXClassForU16String;SignalTypeU16String;signalU16String;Vehicle.Chassis.Vehicle.U16String;TX;u16string;Vehicle.Chassis.Vehicle.U16String;;;;; -BS;TXClassForU32String;SignalTypeU32String;signalU32String;Vehicle.Chassis.Vehicle.U32String;TX;u32string;Vehicle.Chassis.Vehicle.U32String;;;;; -BS;TXClassForNative;SignalTypeNative;signalNative;Vehicle.Chassis.Vehicle.Native;TX;native;Vehicle.Chassis.Vehicle.Native;;;;; +;Class name;Function name;Signal name;vss;Signal direction;type;DBC CAN name includes CAN message name +;;;;;;; +VD;RXClassForBoolean;SignalTypeBoolean;signalBoolean;Vehicle.Chassis.Vehicle.Boolean;RX;boolean;CAN_Input.boolean +VD;RXClassForFloat;SignalTypeFloat;signalFloat;Vehicle.Chassis.Vehicle.Float;RX;float;CAN_Input.float +VD;RXClassForDouble;SignalTypeDouble;signalDouble;Vehicle.Chassis.Vehicle.Double;RX;double;CAN_Input.double +VD;RXClassForLongDouble;SignalTypeLongDouble;signalLongDouble;Vehicle.Chassis.Vehicle.LongDouble;RX;long double;CAN_Input.long_double +VD;RXClassForShort;SignalTypeShort;signalShort;Vehicle.Chassis.Vehicle.Short;RX;short;CAN_Input.short +VD;RXClassForUnsignedShort;SignalTypeUnsignedShort;signalUnsignedShort;Vehicle.Chassis.Vehicle.UnsignedShort;RX;unsigned short;CAN_Input.unsigned_short +VD;RXClassForLong;SignalTypeLong;signalLong;Vehicle.Chassis.Vehicle.Long;RX;long;CAN_Input.long +VD;RXClassForUnsignedLong;SignalTypeUnsignedLong;signalUnsignedLong;Vehicle.Chassis.Vehicle.UnsignedLong;RX;unsigned long;CAN_Input.unsigned_long +VD;RXClassForLongLong;SignalTypeLongLong;signalLongLong;Vehicle.Chassis.Vehicle.LongLong;RX;long long;CAN_Input.long_long +VD;RXClassForUnsignedLongLong;SignalTypeUnsignedLongLong;signalUnsignedLongLong;Vehicle.Chassis.Vehicle.UnsignedLongLong;RX;unsigned long long;CAN_Input.unsigned_long_long +VD;RXClassForInt8;SignalTypeInt8;signalInt8;Vehicle.Chassis.Vehicle.Int8;RX;int8;CAN_Input.int8 +VD;RXClassForUint8;SignalTypeUint8;signalUint8;Vehicle.Chassis.Vehicle.Uint8;RX;uint8;CAN_Input.uint8 +VD;RXClassForInt16;SignalTypeInt16;signalInt16;Vehicle.Chassis.Vehicle.Int16;RX;int16;CAN_Input.int16 +VD;RXClassForUint16;SignalTypeUint16;signalUint16;Vehicle.Chassis.Vehicle.Uint16;RX;uint16;CAN_Input.uint16 +VD;RXClassForInt32;SignalTypeInt32;signalInt32;Vehicle.Chassis.Vehicle.Int32;RX;int32;CAN_Input.int32 +VD;RXClassForUint32;SignalTypeUint32;signalUint32;Vehicle.Chassis.Vehicle.Uint32;RX;uint32;CAN_Input.uint32 +VD;RXClassForInt64;SignalTypeInt64;signalInt64;Vehicle.Chassis.Vehicle.Int64;RX;int64;CAN_Input.int64 +VD;RXClassForUint64;SignalTypeUint64;signalUint64;Vehicle.Chassis.Vehicle.Uint64;RX;uint64;CAN_Input.uint64 +VD;RXClassForString;SignalTypeString;signalString;Vehicle.Chassis.Vehicle.String;RX;string;CAN_Input.string +VD;RXClassForWString;SignalTypeWString;signalWString;Vehicle.Chassis.Vehicle.WString;RX;wstring;CAN_Input.WString +VD;RXClassForChar;SignalTypeChar;signalChar;Vehicle.Chassis.Vehicle.Char;RX;char;CAN_Input.char +VD;RXClassForChar16;SignalTypeChar16;signalChar16;Vehicle.Chassis.Vehicle.Char16;RX;char16;CAN_Input.char16 +VD;RXClassForChar32;SignalTypeChar32;signalChar32;Vehicle.Chassis.Vehicle.Char32;RX;char32;CAN_Input.char32 +VD;RXClassForWChar;SignalTypeWChar;signalWChar;Vehicle.Chassis.Vehicle.WChar;RX;wchar;CAN_Input.wchar +VD;RXClassForU8String;SignalTypeU8String;signalU8String;Vehicle.Chassis.Vehicle.U8String;RX;u8string;CAN_Input.u8string +VD;RXClassForU16String;SignalTypeU16String;signalU16String;Vehicle.Chassis.Vehicle.U16String;RX;u16string;CAN_Input.u16string +VD;RXClassForU32String;SignalTypeU32String;signalU32String;Vehicle.Chassis.Vehicle.U32String;RX;u32string;CAN_Input.u32string +VD;RXClassForNative;SignalTypeNative;signalNative;Vehicle.Chassis.Vehicle.Native;RX;native;CAN_Input.native +VD;TXClassForBoolean;SignalTypeBoolean;signalBoolean;Vehicle.Chassis.Vehicle.Boolean;TX;boolean;CAN_Output.boolean +VD;TXClassForFloat;SignalTypeFloat;signalFloat;Vehicle.Chassis.Vehicle.Float;TX;float;CAN_Output.float +VD;TXClassForDouble;SignalTypeDouble;signalDouble;Vehicle.Chassis.Vehicle.Double;TX;double;CAN_Output.double +VD;TXClassForLongDouble;SignalTypeLongDouble;signalLongDouble;Vehicle.Chassis.Vehicle.LongDouble;TX;long double;CAN_Output.long_double +VD;TXClassForShort;SignalTypeShort;signalShort;Vehicle.Chassis.Vehicle.Short;TX;short;CAN_Output.short +VD;TXClassForUnsignedShort;SignalTypeUnsignedShort;signalUnsignedShort;Vehicle.Chassis.Vehicle.UnsignedShort;TX;unsigned short;CAN_Output.unsigned_short +VD;TXClassForLong;SignalTypeLong;signalLong;Vehicle.Chassis.Vehicle.Long;TX;long;CAN_Output.long +VD;TXClassForUnsignedLong;SignalTypeUnsignedLong;signalUnsignedLong;Vehicle.Chassis.Vehicle.UnsignedLong;TX;unsigned long;CAN_Output.unsigned_long +VD;TXClassForLongLong;SignalTypeLongLong;signalLongLong;Vehicle.Chassis.Vehicle.LongLong;TX;long long;CAN_Output.long_long +VD;TXClassForUnsignedLongLong;SignalTypeUnsignedLongLong;signalUnsignedLongLong;Vehicle.Chassis.Vehicle.UnsignedLongLong;TX;unsigned long long;CAN_Output.unsigned_long_long +VD;TXClassForInt8;SignalTypeInt8;signalInt8;Vehicle.Chassis.Vehicle.Int8;TX;int8;CAN_Output.int8 +VD;TXClassForUint8;SignalTypeUint8;signalUint8;Vehicle.Chassis.Vehicle.Uint8;TX;uint8;CAN_Output.uint8 +VD;TXClassForInt16;SignalTypeInt16;signalInt16;Vehicle.Chassis.Vehicle.Int16;TX;int16;CAN_Output.int16 +VD;TXClassForUint16;SignalTypeUint16;signalUint16;Vehicle.Chassis.Vehicle.Uint16;TX;uint16;CAN_Output.uint16 +VD;TXClassForInt32;SignalTypeInt32;signalInt32;Vehicle.Chassis.Vehicle.Int32;TX;int32;CAN_Output.int32 +VD;TXClassForUint32;SignalTypeUint32;signalUint32;Vehicle.Chassis.Vehicle.Uint32;TX;uint32;CAN_Output.uint32 +VD;TXClassForInt64;SignalTypeInt64;signalInt64;Vehicle.Chassis.Vehicle.Int64;TX;int64;CAN_Output.int64 +VD;TXClassForUint64;SignalTypeUint64;signalUint64;Vehicle.Chassis.Vehicle.Uint64;TX;uint64;CAN_Output.uint64 +VD;TXClassForString;SignalTypeString;signalString;Vehicle.Chassis.Vehicle.String;TX;string;CAN_Output.string +VD;TXClassForWString;SignalTypeWString;signalWString;Vehicle.Chassis.Vehicle.WString;TX;wstring;CAN_Output.WString +VD;TXClassForChar;SignalTypeChar;signalChar;Vehicle.Chassis.Vehicle.Char;TX;char;CAN_Output.char +VD;TXClassForChar16;SignalTypeChar16;signalChar16;Vehicle.Chassis.Vehicle.Char16;TX;char16;CAN_Output.char16 +VD;TXClassForChar32;SignalTypeChar32;signalChar32;Vehicle.Chassis.Vehicle.Char32;TX;char32;CAN_Output.char32 +VD;TXClassForWChar;SignalTypeWChar;signalWChar;Vehicle.Chassis.Vehicle.WChar;TX;wchar;CAN_Output.wchar +VD;TXClassForU8String;SignalTypeU8String;signalU8String;Vehicle.Chassis.Vehicle.U8String;TX;u8string;CAN_Output.u8string +VD;TXClassForU16String;SignalTypeU16String;signalU16String;Vehicle.Chassis.Vehicle.U16String;TX;u16string;CAN_Output.u16string +VD;TXClassForU32String;SignalTypeU32String;signalU32String;Vehicle.Chassis.Vehicle.U32String;TX;u32string;CAN_Output.u32string +VD;TXClassForNative;SignalTypeNative;signalNative;Vehicle.Chassis.Vehicle.Native;TX;native;CAN_Output.native +BS;RXClassForBoolean;SignalTypeBoolean;signalBoolean;Vehicle.Chassis.Vehicle.Boolean;RX;boolean;Vehicle.Chassis.Vehicle.Boolean +BS;RXClassForFloat;SignalTypeFloat;signalFloat;Vehicle.Chassis.Vehicle.Float;RX;float;Vehicle.Chassis.Vehicle.Float +BS;RXClassForDouble;SignalTypeDouble;signalDouble;Vehicle.Chassis.Vehicle.Double;RX;double;Vehicle.Chassis.Vehicle.Double +BS;RXClassForLongDouble;SignalTypeLongDouble;signalLongDouble;Vehicle.Chassis.Vehicle.LongDouble;RX;long double;Vehicle.Chassis.Vehicle.LongDouble +BS;RXClassForShort;SignalTypeShort;signalShort;Vehicle.Chassis.Vehicle.Short;RX;short;Vehicle.Chassis.Vehicle.Short +BS;RXClassForUnsignedShort;SignalTypeUnsignedShort;signalUnsignedShort;Vehicle.Chassis.Vehicle.UnsignedShort;RX;unsigned short;Vehicle.Chassis.Vehicle.UnsignedShort +BS;RXClassForLong;SignalTypeLong;signalLong;Vehicle.Chassis.Vehicle.Long;RX;long;Vehicle.Chassis.Vehicle.Long +BS;RXClassForUnsignedLong;SignalTypeUnsignedLong;signalUnsignedLong;Vehicle.Chassis.Vehicle.UnsignedLong;RX;unsigned long;Vehicle.Chassis.Vehicle.UnsignedLong +BS;RXClassForLongLong;SignalTypeLongLong;signalLongLong;Vehicle.Chassis.Vehicle.LongLong;RX;long long;Vehicle.Chassis.Vehicle.LongLong +BS;RXClassForUnsignedLongLong;SignalTypeUnsignedLongLong;signalUnsignedLongLong;Vehicle.Chassis.Vehicle.UnsignedLongLong;RX;unsigned long long;Vehicle.Chassis.Vehicle.UnsignedLongLong +BS;RXClassForInt8;SignalTypeInt8;signalInt8;Vehicle.Chassis.Vehicle.Int8;RX;int8;Vehicle.Chassis.Vehicle.Int8 +BS;RXClassForUint8;SignalTypeUint8;signalUint8;Vehicle.Chassis.Vehicle.Uint8;RX;uint8;Vehicle.Chassis.Vehicle.Uint8 +BS;RXClassForInt16;SignalTypeInt16;signalInt16;Vehicle.Chassis.Vehicle.Int16;RX;int16;Vehicle.Chassis.Vehicle.Int16 +BS;RXClassForUint16;SignalTypeUint16;signalUint16;Vehicle.Chassis.Vehicle.Uint16;RX;uint16;Vehicle.Chassis.Vehicle.Uint16 +BS;RXClassForInt32;SignalTypeInt32;signalInt32;Vehicle.Chassis.Vehicle.Int32;RX;int32;Vehicle.Chassis.Vehicle.Int32 +BS;RXClassForUint32;SignalTypeUint32;signalUint32;Vehicle.Chassis.Vehicle.Uint32;RX;uint32;Vehicle.Chassis.Vehicle.Uint32 +BS;RXClassForInt64;SignalTypeInt64;signalInt64;Vehicle.Chassis.Vehicle.Int64;RX;int64;Vehicle.Chassis.Vehicle.Int64 +BS;RXClassForUint64;SignalTypeUint64;signalUint64;Vehicle.Chassis.Vehicle.Uint64;RX;uint64;Vehicle.Chassis.Vehicle.Uint64 +BS;RXClassForString;SignalTypeString;signalString;Vehicle.Chassis.Vehicle.String;RX;string;Vehicle.Chassis.Vehicle.String +BS;RXClassForWString;SignalTypeWString;signalWString;Vehicle.Chassis.Vehicle.WString;RX;wstring;Vehicle.Chassis.Vehicle.WString +BS;RXClassForChar;SignalTypeChar;signalChar;Vehicle.Chassis.Vehicle.Char;RX;char;Vehicle.Chassis.Vehicle.Char +BS;RXClassForChar16;SignalTypeChar16;signalChar16;Vehicle.Chassis.Vehicle.Char16;RX;char16;Vehicle.Chassis.Vehicle.Char16 +BS;RXClassForChar32;SignalTypeChar32;signalChar32;Vehicle.Chassis.Vehicle.Char32;RX;char32;Vehicle.Chassis.Vehicle.Char32 +BS;RXClassForWChar;SignalTypeWChar;signalWChar;Vehicle.Chassis.Vehicle.WChar;RX;wchar;Vehicle.Chassis.Vehicle.WChar +BS;RXClassForU8String;SignalTypeU8String;signalU8String;Vehicle.Chassis.Vehicle.U8String;RX;u8string;Vehicle.Chassis.Vehicle.U8String +BS;RXClassForU16String;SignalTypeU16String;signalU16String;Vehicle.Chassis.Vehicle.U16String;RX;u16string;Vehicle.Chassis.Vehicle.U16String +BS;RXClassForU32String;SignalTypeU32String;signalU32String;Vehicle.Chassis.Vehicle.U32String;RX;u32string;Vehicle.Chassis.Vehicle.U32String +BS;RXClassForNative;SignalTypeNative;signalNative;Vehicle.Chassis.Vehicle.Native;RX;native;Vehicle.Chassis.Vehicle.Native +BS;TXClassForBoolean;SignalTypeBoolean;signalBoolean;Vehicle.Chassis.Vehicle.Boolean;TX;boolean;Vehicle.Chassis.Vehicle.Boolean +BS;TXClassForFloat;SignalTypeFloat;signalFloat;Vehicle.Chassis.Vehicle.Float;TX;float;Vehicle.Chassis.Vehicle.Float +BS;TXClassForDouble;SignalTypeDouble;signalDouble;Vehicle.Chassis.Vehicle.Double;TX;double;Vehicle.Chassis.Vehicle.Double +BS;TXClassForLongDouble;SignalTypeLongDouble;signalLongDouble;Vehicle.Chassis.Vehicle.LongDouble;TX;long double;Vehicle.Chassis.Vehicle.LongDouble +BS;TXClassForShort;SignalTypeShort;signalShort;Vehicle.Chassis.Vehicle.Short;TX;short;Vehicle.Chassis.Vehicle.Short +BS;TXClassForUnsignedShort;SignalTypeUnsignedShort;signalUnsignedShort;Vehicle.Chassis.Vehicle.UnsignedShort;TX;unsigned short;Vehicle.Chassis.Vehicle.UnsignedShort +BS;TXClassForLong;SignalTypeLong;signalLong;Vehicle.Chassis.Vehicle.Long;TX;long;Vehicle.Chassis.Vehicle.Long +BS;TXClassForUnsignedLong;SignalTypeUnsignedLong;signalUnsignedLong;Vehicle.Chassis.Vehicle.UnsignedLong;TX;unsigned long;Vehicle.Chassis.Vehicle.UnsignedLong +BS;TXClassForLongLong;SignalTypeLongLong;signalLongLong;Vehicle.Chassis.Vehicle.LongLong;TX;long long;Vehicle.Chassis.Vehicle.LongLong +BS;TXClassForUnsignedLongLong;SignalTypeUnsignedLongLong;signalUnsignedLongLong;Vehicle.Chassis.Vehicle.UnsignedLongLong;TX;unsigned long long;Vehicle.Chassis.Vehicle.UnsignedLongLong +BS;TXClassForInt8;SignalTypeInt8;signalInt8;Vehicle.Chassis.Vehicle.Int8;TX;int8;Vehicle.Chassis.Vehicle.Int8 +BS;TXClassForUint8;SignalTypeUint8;signalUint8;Vehicle.Chassis.Vehicle.Uint8;TX;uint8;Vehicle.Chassis.Vehicle.Uint8 +BS;TXClassForInt16;SignalTypeInt16;signalInt16;Vehicle.Chassis.Vehicle.Int16;TX;int16;Vehicle.Chassis.Vehicle.Int16 +BS;TXClassForUint16;SignalTypeUint16;signalUint16;Vehicle.Chassis.Vehicle.Uint16;TX;uint16;Vehicle.Chassis.Vehicle.Uint16 +BS;TXClassForInt32;SignalTypeInt32;signalInt32;Vehicle.Chassis.Vehicle.Int32;TX;int32;Vehicle.Chassis.Vehicle.Int32 +BS;TXClassForUint32;SignalTypeUint32;signalUint32;Vehicle.Chassis.Vehicle.Uint32;TX;uint32;Vehicle.Chassis.Vehicle.Uint32 +BS;TXClassForInt64;SignalTypeInt64;signalInt64;Vehicle.Chassis.Vehicle.Int64;TX;int64;Vehicle.Chassis.Vehicle.Int64 +BS;TXClassForUint64;SignalTypeUint64;signalUint64;Vehicle.Chassis.Vehicle.Uint64;TX;uint64;Vehicle.Chassis.Vehicle.Uint64 +BS;TXClassForString;SignalTypeString;signalString;Vehicle.Chassis.Vehicle.String;TX;string;Vehicle.Chassis.Vehicle.String +BS;TXClassForWString;SignalTypeWString;signalWString;Vehicle.Chassis.Vehicle.WString;TX;wstring;Vehicle.Chassis.Vehicle.WString +BS;TXClassForChar;SignalTypeChar;signalChar;Vehicle.Chassis.Vehicle.Char;TX;char;Vehicle.Chassis.Vehicle.Char +BS;TXClassForChar16;SignalTypeChar16;signalChar16;Vehicle.Chassis.Vehicle.Char16;TX;char16;Vehicle.Chassis.Vehicle.Char16 +BS;TXClassForChar32;SignalTypeChar32;signalChar32;Vehicle.Chassis.Vehicle.Char32;TX;char32;Vehicle.Chassis.Vehicle.Char32 +BS;TXClassForWChar;SignalTypeWChar;signalWChar;Vehicle.Chassis.Vehicle.WChar;TX;wchar;Vehicle.Chassis.Vehicle.WChar +BS;TXClassForU8String;SignalTypeU8String;signalU8String;Vehicle.Chassis.Vehicle.U8String;TX;u8string;Vehicle.Chassis.Vehicle.U8String +BS;TXClassForU16String;SignalTypeU16String;signalU16String;Vehicle.Chassis.Vehicle.U16String;TX;u16string;Vehicle.Chassis.Vehicle.U16String +BS;TXClassForU32String;SignalTypeU32String;signalU32String;Vehicle.Chassis.Vehicle.U32String;TX;u32string;Vehicle.Chassis.Vehicle.U32String +BS;TXClassForNative;SignalTypeNative;signalNative;Vehicle.Chassis.Vehicle.Native;TX;native;Vehicle.Chassis.Vehicle.Native diff --git a/framework_tests/vss_util/vss_with_formula.csv b/framework_tests/vss_util/vss_with_formula.csv new file mode 100644 index 0000000..723e898 --- /dev/null +++ b/framework_tests/vss_util/vss_with_formula.csv @@ -0,0 +1,6 @@ +;Class name;Function name;Signal name;vss;Signal direction;type;DBC CAN name includes CAN message name;Formula +;;;;;;;; +VD;RXClassForInt32;SignalTypeInt32;signalInt32;Vehicle.Chassis.Body.Int32;RX;int32;CAN_Input.int32;"int32_t signalInt32 = value.get(); signalInt32 *= 2;" +VD;RXClassForString;SignalTypeString;signalString;Vehicle.Chassis.Body.String;RX;string;CAN_Input.string;"sdv::string signalString = value.get(); signalString.append(""_string_added"");" +BS;RXClassForInt32;SignalTypeInt32;signalInt32;Vehicle.Chassis.Body.Int32;RX;int32;Vehicle.Chassis.Body.Int32; +BS;RXClassForString;SignalTypeString;signalString;Vehicle.Chassis.Body.String;RX;string;Vehicle.Chassis.Body.String; diff --git a/sdv_executables/sdv_vss_util/csv_file_reader.cpp b/sdv_executables/sdv_vss_util/csv_file_reader.cpp index 50c73ca..4b592e6 100644 --- a/sdv_executables/sdv_vss_util/csv_file_reader.cpp +++ b/sdv_executables/sdv_vss_util/csv_file_reader.cpp @@ -32,13 +32,14 @@ void CCSVFileReader::Help() std::cout << " [required] Column 'CAN name' must contain a character '.' (for vehicle device signal)." << std::endl; std::cout << " [required] Last column: in case of vehicle device it is 'CAN name'." << std::endl; std::cout << " [required] Last column: in case of basic service it is avss from vehicle device." << std::endl; + std::cout << " [optional] additonal column: c++ code to recalulate the signal value in the vehicle device." << std::endl; std::cout << " [recommended] Cells may be empty. In that case either a default string is created or previous entry is used." << std::endl; std::cout << " [recommended] Column Class name should start with uppercase character." << std::endl; std::cout << " [recommended] Column Function name should start with uppercase character." << std::endl; std::cout << " [recommended] Column Signal name should start with lowercase character." << std::endl; std::cout << "Summary can be found in file 'summary.txt'." << std::endl; std::cout << "Columns:" << std::endl; - std::cout << "Device Type ';' Class name ';' Function name ';' Signal name ';' Interface (vss) ';' Direction ';' Signal value type ';' 'CAN name' or Interface(vss)" << std::endl; + std::cout << "Device Type ';' Class name ';' Function name ';' Signal name ';' Interface (vss) ';' Direction ';' Signal value type ';' 'CAN name' or Interface(vss); Formula (is optional, normally empty)" << std::endl; std::cout << std::endl; std::cout << "e.g." << std::endl; std::cout << "VD ';' FrontWheel ';' SetAverageAngle ';' averageAngle ';' Vehicle.Chassis.Axle.Row.Wheel.AverageAngle ';' RX ';' float ';' CANMsg.Angle" << std::endl; @@ -82,7 +83,28 @@ void CCSVFileReader::ReadLine(const std::string& ssLine, const uint32_t index, s { item = Trim(item); auto cType = GetCTypeFromIDLType(item); // maybe its a IDL type - if (MustNotContainSpaces(item) || (cType.size() != 0)) + + if ((parts.size() == (vssVDColumns::column_vdFormula)) && !item.empty()) + { + // we have the formula column, if not empty, collect everything + auto collectItem = item; + while (std::getline(ss, item, ';')) + { + collectItem.append(";"); + collectItem.append(item); + } + + // Remove " from front and end + if (!collectItem.empty() && collectItem.front() == '"' && collectItem.back() == '"') { + collectItem = collectItem.substr(1, collectItem.size() - 2); + } + + // Replace all occurrences of "" with " + collectItem = std::regex_replace(collectItem, std::regex("\"\""), "\""); + + parts.push_back(collectItem); + } + else if (MustNotContainSpaces(item) || (cType.size() != 0)) { parts.push_back(item); } @@ -94,6 +116,10 @@ void CCSVFileReader::ReadLine(const std::string& ssLine, const uint32_t index, s } } } + if (parts.size() == (endColumn - 1)) + { + parts.push_back(""); + } if (parts.size() >= endColumn) { ParseColumns(parts, index); @@ -140,7 +166,7 @@ void CCSVFileReader::ParseColumns(const std::vector& parts, const u signal.className = GenerateDefaultIfEmpty(parts[vssVDColumns::column_className], "ClassName", index); if (AddFunctionVDDefinition(signal, parts[vssVDColumns::column_functionName], parts[vssVDColumns::column_signalName], - parts[vssVDColumns::column_canSignalName], parts[vssVDColumns::column_signalCType], index)) + parts[vssVDColumns::column_canSignalName], parts[vssVDColumns::column_signalCType], parts[vssVDColumns::column_vdFormula], index)) { ValidateVDCodeStyle(signal, m_verbose); m_vdSignals.push_back(signal); @@ -185,7 +211,7 @@ bool CCSVFileReader::AddToExistingVDSignal(std::vector & si AddFunctionVDDefinition(signal, parts[vssVDColumns::column_functionName], parts[vssVDColumns::column_signalName], - parts[vssVDColumns::column_canSignalName], parts[vssVDColumns::column_signalCType], index); + parts[vssVDColumns::column_canSignalName], parts[vssVDColumns::column_signalCType], parts[vssVDColumns::column_vdFormula], index); return true; } } @@ -215,7 +241,7 @@ bool CCSVFileReader::AddToExistingBSSignal(std::vector & si } bool CCSVFileReader::AddFunctionVDDefinition(SSignalVDDefinition& signal, const std::string& functionName, const std::string& signalName, - const std::string& canSignalName, const std::string& idlType, const uint32_t index) + const std::string& canSignalName, const std::string& idlType, const std::string& formula, const uint32_t index) { if (!MustContainDotOrIsEmpty(canSignalName, true)) // can signal must must not be empty { @@ -238,6 +264,7 @@ bool CCSVFileReader::AddFunctionVDDefinition(SSignalVDDefinition& signal, const func.signalName = GenerateDefaultIfEmpty(signalName, "variableName", index); func.canSignalName = canSignalName; func.idlType = idlType; + func.formula = formula; ValidateVDCodeStyle(func, m_verbose); signal.vecFunctions.push_back(func); diff --git a/sdv_executables/sdv_vss_util/csv_file_reader.h b/sdv_executables/sdv_vss_util/csv_file_reader.h index 8decd57..74d45fb 100644 --- a/sdv_executables/sdv_vss_util/csv_file_reader.h +++ b/sdv_executables/sdv_vss_util/csv_file_reader.h @@ -2,6 +2,7 @@ #define CSV_FILE_READER_H #include +#include #include "vss_helper.h" @@ -54,6 +55,7 @@ private: column_signalCType, column_canSignalName, column_vdDefinition = column_canSignalName, + column_vdFormula, column_end } vssVDColumns; @@ -116,11 +118,12 @@ private: * @param[in] signalName signal name * @param[in] canSignalName can signal name * @param[in] idlType idl type + * @param[in] formula code to convert signal value in vehicle device * @param[in] index line number * @return True if function definition was added, otherwise false */ - bool AddFunctionVDDefinition(SSignalVDDefinition& signal, const std::string& functionName, - const std::string& signalName, const std::string& canSignalName, const std::string& idlType, const uint32_t index); + bool AddFunctionVDDefinition(SSignalVDDefinition& signal, const std::string& functionName, const std::string& signalName, + const std::string& canSignalName, const std::string& idlType, const std::string& formula, const uint32_t index); /** * @brief add function definition to the container of an existing signal (basic service) diff --git a/sdv_executables/sdv_vss_util/main.cpp b/sdv_executables/sdv_vss_util/main.cpp index 26dec93..4ee2bae 100644 --- a/sdv_executables/sdv_vss_util/main.cpp +++ b/sdv_executables/sdv_vss_util/main.cpp @@ -79,7 +79,7 @@ extern "C" int main(int iArgc, const char* rgszArgv[]) rArgVerboseDef.AddSubOptionName("verbose"); cmdln.DefineSubOption("prefix", ssPrefix, "prefix, used by cmake library and signal definition in signal_identifier.h file."); cmdln.DefineSubOption("enable_components", bEnableComponents, "Creates additionally to the idl files the code for the components."); - cmdln.DefineSubOption("version", ssVersion, "Optional: version information of the dbc file."); + cmdln.DefineSubOption("version", ssVersion, "Optional: version information for the created files."); cmdln.DefineOption("O", pathOutputDir, "Set output directory (required)."); cmdln.DefineDefaultArgument(ssVSSFileName, "Excel file."); cmdln.Parse(static_cast(iArgc), rgszArgv); diff --git a/sdv_executables/sdv_vss_util/vss_helper.h b/sdv_executables/sdv_vss_util/vss_helper.h index a981dda..3b5fca4 100644 --- a/sdv_executables/sdv_vss_util/vss_helper.h +++ b/sdv_executables/sdv_vss_util/vss_helper.h @@ -140,6 +140,7 @@ public: std::string functionName; ///< signal value set function name std::string signalName; ///< signal name std::string canSignalName; ///< can signal name (combination of signak messages and signal name) + std::string formula; ///< c++ code if the value has to be converted }; /** diff --git a/sdv_executables/sdv_vss_util/vss_vd_codingrx.cpp b/sdv_executables/sdv_vss_util/vss_vd_codingrx.cpp index 93f2e5c..0782437 100644 --- a/sdv_executables/sdv_vss_util/vss_vd_codingrx.cpp +++ b/sdv_executables/sdv_vss_util/vss_vd_codingrx.cpp @@ -418,6 +418,27 @@ std::string CVSSVDCodingRX::Code_VD_RXRegister( const std::string& class_name, c mapKeywords["signal_name"] = function.signalName; mapKeywords["value_ctype"] = GetCTypeFromIDLType(function.idlType); mapKeywords["class_name_lowercase"] = class_name_lowercase; + if (!function.formula.empty()) + { + auto formula = " " + function.formula; + std::string target = ";"; + std::string replacement = ";\n"; + + size_t pos = 0; + while ((pos = formula.find(target, pos)) != std::string::npos) + { + formula.replace(pos, target.length(), replacement); + pos += replacement.length(); + } + + mapKeywords["convertFormula"] = formula; + } + else + { + std::stringstream formula; + formula << Code_VD_RXFormular(function); + mapKeywords["convertFormula"] = formula.str(); + } return ReplaceKeywords(R"code( /** @@ -452,13 +473,7 @@ void CVehicleDevice%class_name%::Unregister%function_name%Event(vss::%vssWithCol */ void CVehicleDevice%class_name%::ExecuteAllCallBacksFor%start_with_uppercase%(sdv::any_t value) { - %value_ctype% %signal_name% = value.get<%value_ctype%>(); - - // - // TODO: - // Convert vehicle specific value to abstract unit/range - // - +%convertFormula% std::lock_guard lock(m_%signal_name%MutexCallbacks); for (const auto& callback : m_%signal_name%Callbacks) { @@ -467,3 +482,18 @@ void CVehicleDevice%class_name%::ExecuteAllCallBacksFor%start_with_uppercase%(sd } )code", mapKeywords); } + +std::string CVSSVDCodingRX::Code_VD_RXFormular(const SFunctionVDDefinition& function) const +{ + CKeywordMap mapKeywords; + mapKeywords["signal_name"] = function.signalName; + mapKeywords["value_ctype"] = GetCTypeFromIDLType(function.idlType); + + return ReplaceKeywords(R"code( %value_ctype% %signal_name% = value.get<%value_ctype%>(); + + // + // TODO: + // Convert vehicle specific value to abstract unit/range + // +)code", mapKeywords); +} diff --git a/sdv_executables/sdv_vss_util/vss_vd_codingrx.h b/sdv_executables/sdv_vss_util/vss_vd_codingrx.h index 7487974..e42e30d 100644 --- a/sdv_executables/sdv_vss_util/vss_vd_codingrx.h +++ b/sdv_executables/sdv_vss_util/vss_vd_codingrx.h @@ -143,6 +143,13 @@ protected: std::string Code_VD_RXRegister(const std::string& class_name, const SFunctionVDDefinition& function, const std::string& vssWithColons) const; + /** + * @brief create code to get the value or use use user defined c++ code + * @param[in] function function definition structure + * @return default code to get the value + */ + std::string Code_VD_RXFormular(const SFunctionVDDefinition& function) const; + std::string m_ssPrefix; ///< prefix, used by cmake library and signal definition in signal_identifier.h file. };