Precommit (#1)

* first commit

* cleanup
This commit is contained in:
tompzf
2025-11-04 13:28:06 +01:00
committed by GitHub
parent dba45dc636
commit 6ed4b1534e
898 changed files with 256340 additions and 0 deletions

View File

@@ -0,0 +1,211 @@
project(SystemDemoExample)
# 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})
######################################################################################################################################################################
# preparation
######################################################################################################################################################################
# REMARK: The code generation for the proxy/stub, interface definitions and serialization, the vehicle devices and the basic
# services are generated during the configuration phase of CMake. This is necessary, since CMakeFiles.txt files are generated and
# they have to be available during the configuration phase of CMake to be taken into the build process. Requisite for the code
# generation during the configuration time of CMake is the availability of the tools to do the generation. Hence the tools cannot be
# created during the build process, which is executed after the configuraiton process.
# Execute sdv_vss_util to create IDL files for devices and basic services.
message("Create interface code for devices and basic services of open trunk example.")
execute_process(COMMAND "${SDV_VSS_UTIL}" "${PROJECT_SOURCE_DIR}/vss_open_trunk_example.csv" "-O${PROJECT_SOURCE_DIR}/generated/" --prefixtrunk --version1.0.0.1 --enable_components)
# Execute the IDL compiler for the VSS interfaces to digest interface code. Compile with --no_ps as we do not need proxies and stubs as we do not like to expose these interfaces for complex services or applications
message("Compiling vss_vehiclebodytrunk_vd_tx.idl")
execute_process(COMMAND "${SDV_IDL_COMPILER}" "${PROJECT_SOURCE_DIR}/generated/vss_files/vss_vehiclebodytrunk_vd_tx.idl" "-O${PROJECT_SOURCE_DIR}/generated/vss_files/" "-I${SDV_FRAMEWORK_DEV_INCLUDE}" -Igenerated/vss_files/ --no_ps)
message("Compiling vss_vehiclespeed_vd_rx.idl")
execute_process(COMMAND "${SDV_IDL_COMPILER}" "${PROJECT_SOURCE_DIR}/generated/vss_files/vss_vehiclespeed_vd_rx.idl" "-O${PROJECT_SOURCE_DIR}/generated/vss_files/" "-I${SDV_FRAMEWORK_DEV_INCLUDE}" -Igenerated/vss_files/ --no_ps)
# We need proxies and stubs for basic services to give access to the interfaces for complex services ans applications: --ps_lib_namedemo_proxystub
message("Compiling vss_vehiclebodytrunk_bs_tx.idl")
execute_process(COMMAND "${SDV_IDL_COMPILER}" "${PROJECT_SOURCE_DIR}/generated/vss_files/vss_vehiclebodytrunk_bs_tx.idl" "-O${PROJECT_SOURCE_DIR}/generated/vss_files/" "-I${SDV_FRAMEWORK_DEV_INCLUDE}" -Igenerated/vss_files/ --ps_lib_nametrunk_proxystub)
message("Compiling vss_vehiclespeed_bs_rx.idl")
execute_process(COMMAND "${SDV_IDL_COMPILER}" "${PROJECT_SOURCE_DIR}/generated/vss_files/vss_vehiclespeed_bs_rx.idl" "-O${PROJECT_SOURCE_DIR}/generated/vss_files/" "-I${SDV_FRAMEWORK_DEV_INCLUDE}" -Igenerated/vss_files/ --ps_lib_nametrunk_proxystub)
# Execute sdv_dbc_util to create data link code & FMU code.
message("Create data link for open trunk example")
execute_process(COMMAND ${SDV_DBC_UTIL} "${PROJECT_SOURCE_DIR}/open_trunk_example.dbc" "-O${PROJECT_SOURCE_DIR}/generated/" --nodestrunk --version1.0.0.1 --moduleTrunkExampleFMU --dl_lib_namecan_dl_trunk)
# Execute the IDL compiler for the complex service to digest interface code.
message("Compiling trunkkit.idl")
execute_process(COMMAND "${SDV_IDL_COMPILER}" "${PROJECT_SOURCE_DIR}/trunk_service/trunkkit.idl" "-O${PROJECT_SOURCE_DIR}/generated/trunk_service/" "-I${SDV_FRAMEWORK_DEV_INCLUDE}" -Itrunk_service/ --ps_lib_nametrunk_service_proxystub)
######################################################################################################################################################################
# data link component
######################################################################################################################################################################
# REMARK: CAN data link code was generated during the configuration phase of CMake. Following below is the build step to build the
# component that was generated.
message("Include: example component can_dl_trunk")
add_subdirectory(generated/can_dl)
#######################################################################################################################################################################
## vehicle devices and basic services
#######################################################################################################################################################################
# REMARK: Proxy/stub and vehicle device and basic service code was generated during the configuration phase of CMake. Following
# below are the build steps to build the components that were generated.
message("Include: trunk proxy/stub for vehicle devices and basic services")
include_directories(${CMAKE_CURRENT_LIST_DIR}/generated/vss_files)
add_subdirectory(generated/vss_files/ps)
add_subdirectory(generated/vss_files/vd_vehicletrunk)
add_subdirectory(generated/vss_files/vd_vehiclespeed)
add_subdirectory(generated/vss_files/bs_vehicletrunk)
add_subdirectory(generated/vss_files/bs_vehiclespeed)
######################################################################################################################################################################
# complex service
######################################################################################################################################################################
message("Include: proxy/stub for complex trunk service")
include_directories(${CMAKE_CURRENT_LIST_DIR}/generated/trunk_service)
add_subdirectory(generated/trunk_service/ps)
message("Include: example component trunk_complex_service")
add_library(trunk_complex_service SHARED
trunk_service/complex_service.h
trunk_service/complex_service.cpp
)
set_target_properties(trunk_complex_service PROPERTIES OUTPUT_NAME "trunk_complex_service")
set_target_properties(trunk_complex_service PROPERTIES PREFIX "")
set_target_properties(trunk_complex_service PROPERTIES SUFFIX ".sdv")
######################################################################################################################################################################
# basic_system trunk application
######################################################################################################################################################################
# Define the executable
add_executable(open_trunk_example
open_trunk_app/trunk_example.cpp
open_trunk_app/trunk_application.cpp
open_trunk_app/trunk_application.h
open_trunk_app/console.cpp
open_trunk_app/console.h
open_trunk_app/signal_names.h
)
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if (WIN32)
target_link_libraries(open_trunk_example Ws2_32 Winmm Rpcrt4.lib)
else()
target_link_libraries(open_trunk_example ${CMAKE_DL_LIBS} rt ${CMAKE_THREAD_LIBS_INIT})
endif()
else()
target_link_libraries(open_trunk_example Rpcrt4.lib)
endif()
#[[
######################################################################################################################################################################
# open trunk application
######################################################################################################################################################################
# Define the executable
add_executable(system_trunk_example
example_app/system_trunk_example.cpp
example_app/control.h
example_app/control.cpp
example_app/console.h
example_app/console.cpp
example_app/signal_names.h
)
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if (WIN32)
target_link_libraries(system_trunk_example Ws2_32 Winmm Rpcrt4.lib)
else()
target_link_libraries(system_trunk_example ${CMAKE_DL_LIBS} rt ${CMAKE_THREAD_LIBS_INIT})
endif()
else()
target_link_libraries(system_trunk_example Rpcrt4.lib)
endif()
#]]
# Copy the config files
file (COPY ${PROJECT_SOURCE_DIR}/config/can_com_simulation_trunk.toml DESTINATION ${CMAKE_BINARY_DIR}/bin/config)
file (COPY ${PROJECT_SOURCE_DIR}/config/complex_service_trunk.toml DESTINATION ${CMAKE_BINARY_DIR}/bin/config)
file (COPY ${PROJECT_SOURCE_DIR}/config/data_dispatch_trunk.toml DESTINATION ${CMAKE_BINARY_DIR}/bin/config)
file (COPY ${PROJECT_SOURCE_DIR}/config/data_link_trunk.toml DESTINATION ${CMAKE_BINARY_DIR}/bin/config)
file (COPY ${PROJECT_SOURCE_DIR}/config/task_timer_trunk.toml DESTINATION ${CMAKE_BINARY_DIR}/bin/config)
file (COPY ${PROJECT_SOURCE_DIR}/config/trunk_vehicle_device_and_basic_service.toml DESTINATION ${CMAKE_BINARY_DIR}/bin/config)
# Copy the ASC files used by can_com_sim.sdv which includes the CAN messages
# Required in both locations when running standalone or as instance
file (COPY ${PROJECT_SOURCE_DIR}/open_trunk_receiver.asc DESTINATION ${CMAKE_BINARY_DIR}/bin)
file (COPY ${PROJECT_SOURCE_DIR}/open_trunk_receiver.asc DESTINATION ${CMAKE_BINARY_DIR}../../bin)
######################################################################################################################################################################
# create instance 3005 of system trunk application
######################################################################################################################################################################
# REMARK: Currently the "sdv_packager" tool takes the created component(s), creates a configuration and installation manifest and
# copies the package including manifest and configuration to the runtime installation directory (SDV_FRAMEWORK_RUNTIME
# environment variable with instance #3001). The copying into the target directory is not the wanted installation procedure and only
# a bypass feature of the packager. The proper installation would be creating a installation package with the packager, uploading
# the package to the target system and installing the package using the "sdv_control" tool. Since the creation and installation of
# packages is not available yet, the bypass solution is the only solution available at the moment.
add_custom_target(trunk_interface_config
ALL
DEPENDS
can_dl_trunk
trunk_vd_vehiclespeed_rx
trunk_vd_vehicletrunk_tx
COMMAND "${SDV_PACKAGER}" DIRECT_INSTALL ExampleInterfaceComponents --instance3005 can_dl_trunk.sdv trunk_vd_vehiclespeed_rx.sdv trunk_vd_vehicletrunk_tx.sdv "-I${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" --interface_config --overwrite
VERBATIM
)
add_custom_target(trunk_abstract_config
ALL
DEPENDS
trunk_proxystub
trunk_bs_vehiclespeed_rx
trunk_bs_vehicletrunk_tx
COMMAND "${SDV_PACKAGER}" DIRECT_INSTALL ExampleAbstractComponents --instance3005 trunk_proxystub.sdv trunk_bs_vehiclespeed_rx.sdv trunk_bs_vehicletrunk_tx.sdv "-I${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" --abstract_config --overwrite
VERBATIM
)
add_custom_target(trunk_user_config
ALL
DEPENDS
trunk_complex_service
trunk_service_proxystub
COMMAND "${SDV_PACKAGER}" DIRECT_INSTALL TrunkApplication --instance3005 trunk_complex_service.sdv trunk_service_proxystub.sdv "-I${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" --user_config --overwrite
VERBATIM
)
######################################################################################################################################################################
# TODO: SDV_PACKAGER does not create the toml files, therefore we need to copy them
######################################################################################################################################################################
file (COPY ${PROJECT_SOURCE_DIR}/coreconfig/trunk.toml DESTINATION ${SDV_FRAMEWORK_RUNTIME}/3005)
file (COPY ${PROJECT_SOURCE_DIR}/coreconfig/platform.toml DESTINATION ${SDV_FRAMEWORK_RUNTIME}/3005)
file (COPY ${PROJECT_SOURCE_DIR}/coreconfig/settings.toml DESTINATION ${SDV_FRAMEWORK_RUNTIME}/3005)
file (COPY ${PROJECT_SOURCE_DIR}/coreconfig/vehicle_abstract.toml DESTINATION ${SDV_FRAMEWORK_RUNTIME}/3005)
file (COPY ${PROJECT_SOURCE_DIR}/coreconfig/vehicle_ifc.toml DESTINATION ${SDV_FRAMEWORK_RUNTIME}/3005)

View File

@@ -0,0 +1,8 @@
[Configuration]
Version = 100
[[Component]]
Path = "can_com_sim.sdv"
Class = "CAN_Com_Sim"
Source="open_trunk_receiver.asc"
Target="open_trunk_writer.asc"

View File

@@ -0,0 +1,6 @@
[Configuration]
Version = 100
[[Component]]
Path = "trunk_complex_service.sdv"
Class = "Open Trunk Service"

View File

@@ -0,0 +1,8 @@
[Configuration]
Version = 100
[[Component]]
Path = "data_dispatch_service.sdv"
Class = "DataDispatchService"

View File

@@ -0,0 +1,6 @@
[Configuration]
Version = 100
[[Component]]
Path = "can_dl_trunk.sdv"
Class = "CAN_data_link"

View File

@@ -0,0 +1,6 @@
[Configuration]
Version = 100
[[Component]]
Path = "task_timer.sdv"
Class = "TaskTimerService"

View File

@@ -0,0 +1,22 @@
[Configuration]
Version = 100
[[Component]]
Path = "trunk_vd_vehiclespeed_rx.sdv"
Class = "Vehicle.Speed_Device"
[[Component]]
Path = "trunk_vd_vehicletrunk_tx.sdv"
Class = "Vehicle.Body.Trunk_Device"
[[Component]]
Path = "trunk_bs_vehiclespeed_rx.sdv"
Class = "Vehicle.Speed_Service"
[[Component]]
Path = "trunk_bs_vehicletrunk_tx.sdv"
Class = "Vehicle.Body.Trunk_Service"

View File

@@ -0,0 +1,8 @@
[Configuration]
Version = 100
[[Component]]
Path = "can_com_sim.sdv"
Class = "CAN_Com_Sim"
Source="open_trunk_receiver.asc"
Target="open_trunk_writer.asc"

View File

@@ -0,0 +1,28 @@
# Settings file
[Settings]
Version = 100
# The system config array can contain zero or more configurations that are loaded at the time
# the system ist started. It is advisable to split the configurations in:
# platform config - containing all the components needed to interact with the OS,
# middleware, vehicle bus, Ethernet.
# vehicle interface - containing the vehicle bus interpretation components like data link
# based on DBC and devices for their abstraction.
# vehicle abstraction - containing the basic services
# Load the system configurations by providing the "SystemConfig" keyword as an array of strings.
# A relative path is relative to the installation directory (being "exe_location/instance_id").
#
# Example:
# SystemConfig = [ "platform.toml", "vehicle_ifc.toml", "vehicle_abstract.toml" ]
#
SystemConfig = [ "platform.toml", "vehicle_ifc.toml", "vehicle_abstract.toml" ]
# The application config contains the configuration file that can be updated when services and
# apps are being added to the system (or being removed from the system). Load the application
# config by providing the "AppConfig" keyword as a string value. A relative path is relative to
# the installation directory (being "exe_location/instance_id").
#
# Example
# AppConfig = "app_config.toml"
#
AppConfig = "trunk.toml"

View File

@@ -0,0 +1,20 @@
[Configuration]
Version = 100
[[Component]]
Path = "trunk_complex_service.sdv"
Class = "Open Trunk Service"
Name = "Open Trunk Service"
[[Module]]
Path = "trunk_service_proxystub.sdv"
[[Module.Component]]
Class = "Proxy_13181601229896482092"
Aliases = ["Proxy_ITrunkKitService"]
Type = "Proxy"
[[Module.Component]]
Class = "Stub_13181601229896482092"
Aliases = ["Stub_ITrunkKitService"]
Type = "Stub"

View File

@@ -0,0 +1,19 @@
[Configuration]
Version = 100
[[Component]]
Path = "trunk_bs_vehiclespeed_rx.sdv"
Class = "Vehicle.Speed_Service"
Name = "Vehicle.Speed_Service"
[[Component]]
Path = "trunk_bs_vehicletrunk_tx.sdv"
Class = "Vehicle.Body.Trunk_Service"
Name = "Vehicle.Body.Trunk_Service"
[[Module]]
Path = "trunk_proxystub.sdv"

View File

@@ -0,0 +1,19 @@
[Configuration]
Version = 100
[[Component]]
Path = "can_dl_trunk.sdv"
Class = "CAN_data_link"
Name = "DataLink"
[[Component]]
Path = "trunk_vd_vehiclespeed_rx.sdv"
Class = "Vehicle.Speed_Device"
Name = "Vehicle.Speed_Device"
[[Component]]
Path = "trunk_vd_vehicletrunk_tx.sdv"
Class = "Vehicle.Body.Trunk_Device"
Name = "Vehicle.Body.Trunk_Device"

View File

@@ -0,0 +1,309 @@
#include "console.h"
#ifdef _WIN32
#include <conio.h> // Needed for _kbhit
#else
#include <fcntl.h>
#endif
const CConsole::SConsolePos g_sTitle{ 1, 1 };
const CConsole::SConsolePos g_sSubTitle{ 3, 1 };
const CConsole::SConsolePos g_sSeparator1{ 5, 1 };
const CConsole::SConsolePos g_sDataLink{ 7, 1 };
const CConsole::SConsolePos g_sDataLinkSpeed{ 8, 1 };
const CConsole::SConsolePos g_sSeparator2{ 10, 1 };
const CConsole::SConsolePos g_sVehicleDevice{ 12, 1 };
const CConsole::SConsolePos g_sVehicleDeviceSpeed{ 13, 1 };
const CConsole::SConsolePos g_sSeparator3{ 15, 1 };
const CConsole::SConsolePos g_sBasicService{ 17, 1 };
const CConsole::SConsolePos g_sBasicServiceSpeed{ 18, 1 };
const CConsole::SConsolePos g_sSeparator4{ 20, 1 };
const CConsole::SConsolePos g_sComment1{ 22, 1 };
const CConsole::SConsolePos g_sComment2{ 23, 1 };
const CConsole::SConsolePos g_sComment3{ 24, 1 };
const CConsole::SConsolePos g_sComment4{ 25, 1 };
const CConsole::SConsolePos g_sComment5{ 26, 1 };
const CConsole::SConsolePos g_sSeparator5{ 28, 1 };
const CConsole::SConsolePos g_sComplexServcie1{ 30, 1 };
const CConsole::SConsolePos g_sComplexServcie2{ 31, 1 };
const CConsole::SConsolePos g_sSeparator6{ 33, 1 };
const CConsole::SConsolePos g_sControlDescription{ 35, 1 };
const CConsole::SConsolePos g_sCursor{ 36, 1 };
CConsole::CConsole()
{
#ifdef _WIN32
// Enable ANSI escape codes
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (hStdOut != INVALID_HANDLE_VALUE && GetConsoleMode(hStdOut, &m_dwConsoleOutMode))
SetConsoleMode(hStdOut, m_dwConsoleOutMode | ENABLE_VIRTUAL_TERMINAL_PROCESSING);
HANDLE hStdIn = GetStdHandle(STD_INPUT_HANDLE);
if (hStdIn != INVALID_HANDLE_VALUE && GetConsoleMode(hStdIn, &m_dwConsoleInMode))
SetConsoleMode(hStdIn, m_dwConsoleInMode & ~(ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT));
#elif defined __unix__
// Disable echo
tcgetattr(STDIN_FILENO, &m_sTermAttr);
struct termios sTermAttrTemp = m_sTermAttr;
sTermAttrTemp.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &sTermAttrTemp);
m_iFileStatus = fcntl(STDIN_FILENO, F_GETFL, 0);
fcntl(STDIN_FILENO, F_SETFL, m_iFileStatus | O_NONBLOCK);
#else
#error The OS is not supported!
#endif
}
CConsole::~CConsole()
{
SetCursorPos(g_sCursor);
#ifdef _WIN32
// Return to the stored console mode
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (hStdOut != INVALID_HANDLE_VALUE)
SetConsoleMode(hStdOut, m_dwConsoleOutMode);
HANDLE hStdIn = GetStdHandle(STD_INPUT_HANDLE);
if (hStdIn != INVALID_HANDLE_VALUE)
SetConsoleMode(hStdIn, m_dwConsoleInMode);
#elif defined __unix__
// Return the previous file status flags.
fcntl(STDIN_FILENO, F_SETFL, m_iFileStatus);
// Return to previous terminal state
tcsetattr(STDIN_FILENO, TCSANOW, &m_sTermAttr);
#endif
}
void CConsole::PrintHeader(uint32_t uiInstance)
{
// Clear the screen...
std::cout << "\x1b[2J";
std::string subTtitle = "Standalone application, this is not Mixed-Critical mode!";
if (uiInstance != 0)
{
subTtitle = "Connected to core instance ";
subTtitle.append(std::to_string(uiInstance));
subTtitle.append(", this is NOT Mixed-Critical mode yet!");
}
// Print the titles
PrintText(g_sTitle, "Open Trunk example: Open trunk when vehicle is not moving");
PrintText(g_sSubTitle, subTtitle);
PrintText(g_sSeparator1, "============================================================================");
PrintText(g_sDataLink, "Data dispatch service:");
PrintText(g_sDataLinkSpeed, "Data Link not available");
PrintText(g_sSeparator2, "----------------------------------------------------------------------------");
PrintText(g_sVehicleDevice, "Vehicle Device:");
PrintText(g_sVehicleDeviceSpeed, "Vehicle Device Interface not available.");
PrintText(g_sSeparator3, "----------------------------------------------------------------------------");
PrintText(g_sBasicService, "Basic Service:");
PrintText(g_sBasicServiceSpeed, "Basic Service Interface not available.");
PrintText(g_sSeparator4, "============================================================================");
PrintText(g_sComment1, "The complex service which checks the speed of the vehicle can be seen");
PrintText(g_sComment2, "as an ASIL A/B component and will block the call from QM.");
PrintText(g_sComment3, "The extern apllication can be seen as a QM function.");
PrintText(g_sComment4, "If this example would run in a mixed critical environment the connection");
PrintText(g_sComment5, "from QM to basic service interface would be forbidden.");
PrintText(g_sSeparator5, "============================================================================");
PrintText(g_sComplexServcie1, "Basic Service Interface not available.");
PrintText(g_sComplexServcie2, "Complex Service Interface not available.");
PrintText(g_sSeparator6, "----------------------------------------------------------------------------");
PrintText(g_sControlDescription, "Press 'X' to quit; 'C' to clear screen, '1' or '2' to open trunk ");
}
bool CConsole::PrepareDataConsumers()
{
// Subscribe for the speed and trunk signal
sdv::core::CDispatchService dispatch;
m_SignalSpeed = dispatch.Subscribe(trunk::dsVehicleSpeed, [&](sdv::any_t value) { CallbackSpeed(value); });
if (m_SignalSpeed)
PrintValue(g_sDataLinkSpeed, "Vehicle Speed RX", m_SpeedDL, "m/s");
// Registrate for the vehicle device & basic service of the speed.
auto vehicleDevice = sdv::core::GetObject("Vehicle.Speed_Device").GetInterface<vss::Vehicle::SpeedDevice::IVSS_Speed>();
if (vehicleDevice)
{
PrintValue(g_sVehicleDeviceSpeed, "Vehicle Speed RX", m_SpeedVD, "m/s");
vehicleDevice->RegisterSpeedEvent(dynamic_cast<vss::Vehicle::SpeedDevice::IVSS_WriteSpeed_Event*> (this));
}
auto basicService = sdv::core::GetObject("Vehicle.Speed_Service").GetInterface<vss::Vehicle::SpeedService::IVSS_GetSpeed>();
if (basicService)
{
PrintValue(g_sBasicServiceSpeed, "Vehicle Speed RX", m_SpeedBS, "km/h");
basicService->RegisterOnSignalChangeOfVehicleSpeed(dynamic_cast<vss::Vehicle::SpeedService::IVSS_SetSpeed_Event*> (this));
}
// Request the basic service for opening the drunk.
m_pTrunkSvc = sdv::core::GetObject("Vehicle.Body.Trunk_Service").GetInterface<vss::Vehicle::Body::TrunkService::IVSS_SetOpen>();
if (m_pTrunkSvc)
PrintText(g_sComplexServcie1, "Basic Service available");
m_pITrunkComplexService = sdv::core::GetObject("Open Trunk Service").GetInterface<ITrunkKitService>();
if (m_pITrunkComplexService)
PrintText(g_sComplexServcie2, "Complex Service available");
return true;
}
void CConsole::ResetSignals()
{
// Set the cursor position at the end
SetCursorPos(g_sCursor);
auto vehicleDevice = sdv::core::GetObject("Vehicle.Speed_Device").GetInterface<vss::Vehicle::SpeedDevice::IVSS_Speed>();
if (vehicleDevice)
vehicleDevice->UnregisterSpeedEvent(dynamic_cast<vss::Vehicle::SpeedDevice::IVSS_WriteSpeed_Event*> (this));
auto basicService = sdv::core::GetObject("Vehicle.Speed_Service").GetInterface<vss::Vehicle::SpeedService::IVSS_GetSpeed>();
if (basicService)
basicService->UnregisterOnSignalChangeOfVehicleSpeed(dynamic_cast<vss::Vehicle::SpeedService::IVSS_SetSpeed_Event*> (this));
// Unregister the data link signalss
if (m_SignalSpeed)
m_SignalSpeed.Reset();
}
void CConsole::CallbackSpeed(sdv::any_t value)
{
if (m_SpeedDL != value.get<float>())
{
m_SpeedDL = value.get<float>();
PrintValue(g_sDataLinkSpeed, "Vehicle Speed RX", m_SpeedDL, "m/s");
}
}
CConsole::SConsolePos CConsole::GetCursorPos() const
{
SConsolePos sPos{};
std::cout << "\033[6n";
char buff[128];
int indx = 0;
for(;;) {
int cc = std::cin.get();
buff[indx] = (char)cc;
indx++;
if(cc == 'R') {
buff[indx + 1] = '\0';
break;
}
}
int iRow = 0, iCol = 0;
sscanf(buff, "\x1b[%d;%dR", &iRow, &iCol);
sPos.uiRow = static_cast<uint32_t>(iRow);
sPos.uiCol = static_cast<uint32_t>(iCol);
fseek(stdin, 0, SEEK_END);
return sPos;
}
void CConsole::SetCursorPos(SConsolePos sPos)
{
std::cout << "\033[" << sPos.uiRow << ";" << sPos.uiCol << "H";
}
void CConsole::PrintText(SConsolePos sPos, const std::string& rssText)
{
auto text = rssText;
while (text.length() < 76)
text.append(" ");
std::lock_guard<std::mutex> lock(m_mtxPrintToConsole);
SetCursorPos(sPos);
std::cout << text;
}
void CConsole::WriteSpeed(float value)
{
if (m_SpeedVD != value)
{
m_SpeedVD = value;
PrintValue(g_sVehicleDeviceSpeed, "Vehicle Speed RX", m_SpeedVD, "m/s");
}
}
void CConsole::SetSpeed(float value)
{
if (m_SpeedBS != value)
{
m_SpeedBS = value;
PrintValue(g_sBasicServiceSpeed, "Vehicle Speed RX", m_SpeedBS * 3.6f, "km/h");
}
}
bool CConsole::KeyHit()
{
#ifdef _WIN32
return _kbhit();
#elif __unix__
int ch = getchar();
if (ch != EOF) {
ungetc(ch, stdin);
return true;
}
return false;
#endif
}
char CConsole::GetChar()
{
#ifdef _WIN32
return static_cast<char>(_getch());
#else
return getchar();
#endif
}
void CConsole::RunUntilBreak()
{
bool bRunning = true;
while (bRunning)
{
// Check for a key
if (!KeyHit())
{
std::this_thread::sleep_for(std::chrono::milliseconds(100));
continue;
}
// Get a keyboard value (if there is any).
char c = GetChar();
switch (c)
{
case 'c':
case 'C':
PrintText(g_sComplexServcie1, " ");
PrintText(g_sComplexServcie2, " ");
break;
case '1':
if (m_pTrunkSvc)
{
if (m_pTrunkSvc->SetOpen(true))
PrintText(g_sComplexServcie1, "Open trunk via basic service - will not be available in Mixed-Critical mode!");
else
PrintText(g_sComplexServcie1, "Open trunk via basic service failed.");
}
break;
case '2':
if (m_pITrunkComplexService)
{
if (m_pITrunkComplexService->PopTrunk())
PrintText(g_sComplexServcie2, "Safety open trunk via complex service.");
else
PrintText(g_sComplexServcie2, "Safety open trunk via complex service failed, car is moving");
}
break;
case 'x':
case 'X':
bRunning = false;
break;
default:
break;
}
}
}

View File

@@ -0,0 +1,190 @@
#ifndef CONSOLE_OUTPUT_H
#define CONSOLE_OUTPUT_H
#include <iostream>
#include <string>
#include <functional>
#include <support/signal_support.h>
#include <support/app_control.h>
#include <support/component_impl.h>
#include <support/timer.h>
#include "signal_names.h"
#include <fcntl.h>
#include "../generated/vss_files/vss_vehiclebodytrunk_bs_tx.h"
#include "../generated/vss_files/vss_vehiclespeed_bs_rx.h"
#include "../generated/vss_files/vss_vehiclespeed_vd_rx.h"
// Complex service trunk interface - located in ../generated/trunk_service
#include "trunkkit.h"
#ifdef __unix__
#include <termios.h> // Needed for tcgetattr and fcntl
#include <unistd.h>
#endif
/**
* @brief Console operation class.
* @details This class retrieves RX data from the data dispatch service, vehicle device & basic service of speed on event change.
* Furthermore, it shows TX value by polling the RX signals.
*/
class CConsole : public vss::Vehicle::SpeedDevice::IVSS_WriteSpeed_Event
, public vss::Vehicle::SpeedService::IVSS_SetSpeed_Event
{
public:
/**
* @brief Screen position structure
*/
struct SConsolePos
{
uint32_t uiRow; ///< Row position (starts at 1)
uint32_t uiCol; ///< Column position (starts at 1)
};
/**
* @brief Constructor
*/
CConsole();
/**
* @brief Destructor
*/
~CConsole();
/**
* @brief Print the header.
* @param[in] uiInstance Instance number the application will connect to. 0 will start a standalone application
*/
void PrintHeader(uint32_t uiInstance);
/**
* @brief Prepare the data consumers..
* @return Returns whether the preparation of the data consumers was successful or not.
*/
bool PrepareDataConsumers();
/**
* @brief Run loop as long as user input does not exit
* Allow user to open/close trunk.
*/
void RunUntilBreak();
/**
* @brief Write vehicleSpeed signal
* @param[in] value vehicleSpeed
*/
virtual void WriteSpeed(float value) override;
/**
* @brief Set vehicleSpeed signal
* @param[in] value vehicleSpeed
*/
virtual void SetSpeed(float value) override;
/**
* @brief For gracefully shutdown all signals need to be reset.
*/
void ResetSignals();
private:
/**
* @brief Callback function for speed.
* @param[in] value The value of the signal to update.
*/
void CallbackSpeed(sdv::any_t value);
/**
* @brief Key hit check. Windows uses the _kbhit function; POSIX emulates this.
* @return Returns whether a key has been pressed.
*/
bool KeyHit();
/**
* @brief Get the character from the keyboard buffer if pressed.
* @return Returns the character from the keyboard buffer.
*/
char GetChar();
/**
* @brief Get the cursor position of the console.
* @return The cursor position.
*/
SConsolePos GetCursorPos() const;
/**
* @brief Set the current cursor position for the console.
* @param[in] sPos Console position to place the current cursor at.
*/
void SetCursorPos(SConsolePos sPos);
/**
* @brief Print text at a specific location.
* @param[in] sPos The location to print text at.
* @param[in] rssText Reference to the text to print.
*/
void PrintText(SConsolePos sPos, const std::string& rssText);
/**
* @brief Print a value string at a specific location.
* @tparam TValue Type of value.
* @param[in] sPos The location to print the value at.
* @param[in] rssName Reference to the value.
* @param[in] tValue The value.
* @param[in] rssStatus Status, becuse we have signals of type bool
*/
template <typename TValue>
void PrintValue(SConsolePos sPos, const std::string& rssName, TValue tValue, const std::string& rssStatus);
/**
* @brief Align string between name and value.
* @param[in] message Reference to the message to align.
* @param[in] desiredLength The desired length or 0 when no length is specified.
* @return The aligned string.
*/
std::string AlignString(const std::string& message, uint32_t desiredLength = 0);
mutable std::mutex m_mtxPrintToConsole; ///< Mutex to print complete message
bool m_bRunning = false; ///< When set, the application is running.
mutable std::mutex m_mPrintToConsole; ///< Mutex to print complete message
sdv::core::CSignal m_SignalSpeed; ///< Speed
float m_SpeedDL = 0.0; ///< Speed Data Link
float m_SpeedVD = 0.0; ///< Speed Data Link
float m_SpeedBS = 0.0; ///< Speed Data Link
vss::Vehicle::Body::TrunkService::IVSS_SetOpen* m_pTrunkSvc = nullptr; ///< Front Left Door
ITrunkKitService* m_pITrunkComplexService = nullptr; ///< Trunk Service interface pointer.
#ifdef _WIN32
DWORD m_dwConsoleOutMode = 0u; ///< The console mode before switching on ANSI support.
DWORD m_dwConsoleInMode = 0u; ///< The console mode before switching on ANSI support.
#elif defined __unix__
struct termios m_sTermAttr{}; ///< The terminal attributes before disabling echo.
int m_iFileStatus = 0; ///< The file status flags for STDIN.
#else
#error The OS is not supported!
#endif
};
template <typename TValue>
inline void CConsole::PrintValue(SConsolePos sPos, const std::string& rssName, TValue tValue, const std::string& rssUnits)
{
const size_t nValueNameLen = 30;
std::stringstream sstreamValueText;
sstreamValueText << rssName <<
std::string(nValueNameLen - std::min(rssName.size(), static_cast<size_t>(nValueNameLen - 1)) - 1, '.') <<
" " << std::fixed << std::setprecision(2) << tValue << " " << rssUnits << " ";
std::lock_guard<std::mutex> lock(m_mPrintToConsole);
SetCursorPos(sPos);
std::cout << sstreamValueText.str();
}
template <>
inline void CConsole::PrintValue<bool>(SConsolePos sPos, const std::string& rssName, bool bValue, const std::string& rssStatus)
{;
PrintValue(sPos, rssName, bValue ? "" : "", rssStatus);
}
#endif // !define CONSOLE_OUTPUT_H

View File

@@ -0,0 +1,25 @@
/**
* namespace for the signal names
* in case /interfaces/signal_identifier.h
* exists, use the file, otherwise define the namespace
*/
#ifndef SIGNAL_NAMES_H
#define SIGNAL_NAMES_H
#ifdef __has_include
#if __has_include("../interfaces/signal_identifier.h")
#include "../interfaces/signal_identifier.h"
#else
namespace trunk
{
// Data Dispatch Service signal names to dbc variable names C-type RX/TX vss name space
static std::string dsVehicleSpeed = "CAN_Input.Speed"; ///< bool RX Vehicle.Speed
static std::string dsTrunk = "CAN_Output.OpenTrunk"; ///< bool TX Vehicle.Body.Trunk
} // trunk
#endif
#endif
#endif // SIGNAL_NAMES_H

View File

@@ -0,0 +1,98 @@
#include "trunk_application.h"
#include "signal_names.h"
#ifdef _WIN32
#include <conio.h> // Needed for _kbhit
#else
#include <fcntl.h>
#endif
bool CTrunkControl::LoadConfigFile(const std::string& inputMsg, const std::string& configFileName)
{
std::string msg = inputMsg;
if (m_appcontrol.LoadConfig(configFileName) == sdv::core::EConfigProcessResult::successful)
{
msg.append("ok\n");
std::cout << msg.c_str();
return true;
}
msg.append("FAILED.\n");
std::cout << msg.c_str();
return false;
}
bool CTrunkControl::IsSDVFrameworkEnvironmentSet()
{
const char* envVariable = std::getenv("SDV_FRAMEWORK_RUNTIME");
if (envVariable)
{
return true;
}
return false;
}
bool CTrunkControl::Initialize(uint32_t uiInstance)
{
if (m_bInitialized)
return true;
if (!IsSDVFrameworkEnvironmentSet())
{
// if SDV_FRAMEWORK_RUNTIME environment variable is not set we need to set the Framework Runtime directory
m_appcontrol.SetFrameworkRuntimeDirectory("../../bin");
}
if (uiInstance != 0)
{
std::stringstream sstreamAppConfig;
sstreamAppConfig << "[Application]" << std::endl;
sstreamAppConfig << "Mode=\"External\"" << std::endl;
sstreamAppConfig << "Instance=" << uiInstance << std::endl;
sstreamAppConfig << "Retries=" << 6 << std::endl;
sstreamAppConfig << "[Console]" << std::endl;
sstreamAppConfig << "Report=\"Silent\"" << std::endl;
if (!m_appcontrol.Startup(sstreamAppConfig.str()))
return false;
}
else
{
if (!m_appcontrol.Startup(""))
return false;
// Switch to config mode.
m_appcontrol.SetConfigMode();
bool bResult = LoadConfigFile("Load dispatch service: ", "data_dispatch_trunk.toml");
bResult &= LoadConfigFile("Load task_timer_trunk: ", "task_timer_trunk.toml");
bResult &= LoadConfigFile("Load can_com_simulation_trunk: ", "can_com_simulation_trunk.toml");
bResult &= LoadConfigFile("Load data_link_trunk: ", "data_link_trunk.toml");
bResult &= LoadConfigFile("Load trunk_vehicle_device_and_basic_service: ", "trunk_vehicle_device_and_basic_service.toml");
bResult &= LoadConfigFile("Load trunk service (complex service): ", "complex_service_trunk.toml");
if (!bResult)
{
SDV_LOG_ERROR("One or more configurations could not be loaded. Cannot continue.");
return false;
}
}
m_bInitialized = true;
return true;
}
void CTrunkControl::Shutdown()
{
if (!m_bInitialized)
m_appcontrol.Shutdown();
m_bInitialized = false;
}
void CTrunkControl::SetRunningMode()
{
m_appcontrol.SetRunningMode();
}

View File

@@ -0,0 +1,49 @@
#include <string>
#include <support/app_control.h>
#include <support/signal_support.h>
#include "vss_vehiclespeed_bs_rx.h"
/**
* @brief Application Class of the open trunk example
*/
class CTrunkControl
{
public:
/**
* @brief Start and initialize the application control and load vehicle devices and basic services
* @param[in] uiInstance Instance number the application will connect to. 0 will start a standalone application
* @return Return true on success otherwise false
*/
bool Initialize(uint32_t uiInstance);
/**
* @brief After initialization/configuration the system mode needs to be set to running mode
*/
void SetRunningMode();
/**
* @brief Shutdown the system.
*/
void Shutdown();
private:
/**
* @brief check if SDV_FRAMEWORK_RUNTIME environment variable exists
* @return Return true if environment variable is found otherwise false
*/
bool IsSDVFrameworkEnvironmentSet();
/**
* @brief Loac config file and register vehicle device and basic service.
* @param[in] inputMsg message string to be printed on console in case of success and failure
* @param[in] configFileName config toml file name
* @return Return true on success otherwise false
*/
bool LoadConfigFile(const std::string& inputMsg, const std::string& configFileName);
sdv::app::CAppControl m_appcontrol; ///< App-control of SDV V-API.
bool m_bInitialized = false; ///< Set when initialized.
};

View File

@@ -0,0 +1,60 @@
#include <iostream>
#include <cstdlib> // for std::strtol
#include "trunk_application.h"
#include "console.h"
#if defined(_WIN32) && defined(_UNICODE)
extern "C" int wmain(int argc, wchar_t* argv[])
{
uint32_t uiInstance = 0;
if (argc < 2)
{
std::cout << "Missing instance number to connect to, '0' will run as standalone application" << std::endl;
return 1;
}
try
{
uiInstance = std::stoi(argv[1]);
}
catch (const std::exception& )
{
uiInstance = 0;
}
#else
extern "C" int main(int argc, char* argv[])
{
uint32_t uiInstance = 0;
if (argc < 2)
{
std::cout << "Missing instance number to connect to, '0' will run as standalone application" << std::endl;
return 1;
}
try
{
uiInstance = std::stoi(argv[1]);
}
catch (const std::exception& )
{
uiInstance = 0;
}
#endif
CTrunkControl appobj;
if (!appobj.Initialize(uiInstance))
{
std::cout << "ERROR: Failed to initialize application control." << std::endl;
return 0;
}
CConsole visual_obj;
visual_obj.PrintHeader(uiInstance);
visual_obj.PrepareDataConsumers();
appobj.SetRunningMode();
visual_obj.RunUntilBreak();
visual_obj.ResetSignals();
appobj.Shutdown();
return 0;
}

View File

@@ -0,0 +1,123 @@
VERSION "PrivateCAN"
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_: trunk
VAL_TABLE_ Fault_Codes 27 "UKWN" 26 "VEHSPDMAX_EXDD" 25 "STS_ALIVE" 24 "STEER_NOT_E2E_MODE" 23 "OTA_SPD" 22 "OTA_TIMER_DOWNLOAD_FAILED" 21 "OTA_MAX_TIME" 20 "CUBIXAD_STEERSTREQ_NOTACTV" 19 "CUBIXAD_DRVSTREQ_NOTACTV" 18 "SFTYDRV_INTV" 17 "LSDC_ALIVE" 16 "CUBIXAD_ALIVE" 15 "IBC_MAB_NO_PRIO" 14 "IBC_NOT_RDY" 13 "IBC_ALIVE" 12 "LSDC_GEAR" 11 "LSDC_SPD" 10 "LSDC_ACCL" 9 "IBC_NOT_MAB_MOD" 8 "GOLDBOX_ALIVE" 7 "CUBIXAD_GEAR" 6 "CUBIXAD_SPD_TESTTRACK" 5 "DRVREQCHG" 4 "RDY_TIMER" 3 "SFTY_CDN_FAILED" 2 "ACTVNCHK_SPD" 1 "ACTVNCHK_TIMR" 0 "NONE" ;
VAL_TABLE_ TestMapID 6 "E_TESTMAPID_UNDEFINED" 5 "E_TESTMAPID_TEST_DRIVE" 4 "E_TESTMAPID_AD_AREA" 3 "E_TESTMAPID_STUTT_ARENA" 2 "E_TESTMAPID_ZF_LASTMILE" 1 "E_TESTMAPID_ZF_TESTTRACK_2" 0 "E_TESTMAPID_NONE" ;
VAL_TABLE_ CtrlReqStates 7 "CtrlSts3b_RESERVED_4" 6 "CtrlSts3b_RESERVED_3" 5 "CtrlSts3b_RESERVED_2" 4 "CtrlSts3b_RESERVED_1" 3 "CtrlSts3b_ERROR" 2 "CtrlSts3b_CONTROL_REQUESTED" 1 "CtrlSts3b_CONTROL_NOT_REQUESTED" 0 "CtrlSts3b_INIT" ;
VAL_TABLE_ SteerActrReSts 7 "Diag" 6 "Inactive" 5 "Ramping" 4 "Yellow" 3 "Red" 2 "Normal" 1 "Pending" 0 "Initialisation" ;
VAL_TABLE_ SwtPark1 1 "SwtParkActv" 0 "SwtParkNotActv" ;
VAL_TABLE_ PE_State 2 "ERROR" 1 "INIT" 0 "NO_ERROR" ;
VAL_TABLE_ SSM_Req 7 "HMS_TAKEOVER" 6 "RESERVED" 5 "RELESE_VIA_RAMP" 4 "DRIVEOFF" 3 "HOLD_STANDBY" 2 "PARK" 1 "HOLD" 0 "NO_REQUEST" ;
VAL_TABLE_ IBC_StandStillMode 12 "SSM_ERROR" 11 "SSM_INIT" 10 "SSM_DRIVEOFF_STANDBY_ACTIVE" 9 "SSM_HOLD_STANDBY_ACTIVE" 8 "SSM_HILL_SLIPPOFF_DETECTED" 7 "SSM_RELEASE_REQ_FROM_DRIVER" 6 "SSM_RELEASE_REQ_ACTIVE" 5 "SSM_DRIVEOFF_ACTIVE" 4 "SSM_PARK_RETAINED_ACTIVE" 3 "SSM_PARK_ACTIVE" 2 "SSM_PARK_REQUESTED" 1 "SSM_HOLD_ACTIVE" 0 "SSM_NO_ACTIVE_FUNCTION" ;
VAL_TABLE_ AppTgtStDrv 3 "ACTIVE" 2 "READY" 1 "RESERVED" 0 "NOT_ACTIVE" ;
VAL_TABLE_ IBC_Status 4 "IBC_MAB_ERR_COMM" 3 "IBC_MAB_NO_PRIO" 2 "IBC_IN_MAB_MODE" 1 "IBC_READY" 0 "IBC_NOT_READY_FAILED" ;
VAL_TABLE_ GearLvrIndcn 7 "GearLvrIndcn2_Undefd" 6 "GearLvrIndcn2_Resd2" 5 "GearLvrIndcn2_Resd1" 4 "GearLvrIndcn2_ManModeIndcn" 3 "GearLvrIndcn2_DrvIndcn" 2 "GearLvrIndcn2_NeutIndcn" 1 "GearLvrIndcn2_RvsIndcn" 0 "GearLvrIndcn2_ParkIndcn" ;
VAL_TABLE_ LvlgAdjReq 7 "LvlgAdjReq_Resd2" 6 "LvlgAdjReq_Resd1" 5 "LvlgAdjReq_Ll2" 4 "LvlgAdjReq_Ll1" 3 "LvlgAdjReq_Nrh" 2 "LvlgAdjReq_Hl1" 1 "LvlgAdjReq_Hl2" 0 "LvlgAdjReq_Ukwn" ;
VAL_TABLE_ DrvModReq 15 "Err" 14 "Rock" 13 "Mud" 12 "Sand" 11 "Snow" 10 "Power" 9 "Hybrid" 8 "Pure_EV" 7 "Race" 6 "Adaptive" 5 "Offroad_CrossTerrain" 4 "Individual" 3 "Dynamic_Sport" 2 "Comfort_Normal" 1 "ECO" 0 "Undefd" ;
VAL_TABLE_ MAB_Info_Message 4 "DRV_GEARLVR_TO_P" 3 "DRV_P_TO_D" 2 "LSDC_DI_NOT_PSBL" 1 "LSDC_ENA_NOT_POSSIBLE" 0 "NONE" ;
VAL_TABLE_ MAB_OvrdTool_Sts 11 "HACKATHON" 10 "OTA" 9 "INIT" 8 "FINSHD" 7 "FLT" 6 "CUBIX_AD" 5 "SAVE_THE_SPOILER" 4 "LSDC" 3 "RDY" 2 "ACTVN_CHK" 1 "NO_MANIPULATION" 0 "NONE" ;
VAL_TABLE_ HMI_Drvr_Req 9 "FCT_DEACTVN_REQ" 8 "FCT_ACTVN_OTA_CFMD" 7 "FCT_ACTVN_OTA_REQ" 6 "FCT_ACTVN_SAVETHESPOILER_CFMD" 5 "FCT_ACTVN_SAVETHESPOILER_REQ" 4 "FCT_ACTVN_LSDC_CFMD" 3 "FCT_ACTVN_LSDC_REQ" 2 "FCT_ACTVN_CUBIXAD_CFMD" 1 "FCT_ACTVN_CUBIXAD_REQ" 0 "FCT_ACTVN_NONE" ;
VAL_TABLE_ Info_Message 4 "DRV_GEARLVR_TO_P" 3 "DRV_P_TO_D" 2 "LSDC_DI_NOT_PSBL" 1 "LSDC_ENA_NOT_POSSIBLE" 0 "NONE" ;
VAL_TABLE_ HMI_Fct_Req 8 "FCT_DEACTVN_REQ" 7 "FCT_ACTVN_OTA_REQ" 6 "FCT_ACTVN_SAVETHESPOILER_CFMD" 5 "FCT_ACTVN_SAVETHESPOILER_REQ" 4 "FCT_ACTVN_LSDC_CFMD" 3 "FCT_ACTVN_LSDC_REQ" 2 "FCT_ACTVN_AI4MTN_CFMD" 1 "FCT_ACTVN_AI4MTN_REQ" 0 "FCT_ACTVN_NONE" ;
VAL_TABLE_ SOVD_states 2 "SOVD_SHOWCASE_ACTIVE" 1 "SOVD_SHOWCASE_DEACTIVE" 0 "SOVD_NONE" ;
VAL_TABLE_ OTA_states 7 "OTA_DOWNLOAD_FAILED" 6 "OTA_INSTALL_FAILED" 5 "OTA_INSTALL_FINISHED" 4 "OTA_INSTALL_START" 3 "OTA_DOWNLOAD_START" 2 "OTA_SCHEDULED" 1 "OTA_STANDBY" 0 "OTA_NONE" ;
BO_ 0 CAN_Input: 8 Vector__XXX
SG_ Speed : 55|15@0+ (0.00391,0) [0|128.11897] "m/s" trunk
BO_ 3 CAN_Output: 2 trunk
SG_ OpenTrunk : 1|1@0+ (1,0) [0|1] "" Vector__XXX
CM_ SG_ 0 Speed "Vehicle speed longitudinal based on wheel speed sensors and longitudinal acceleration.";
CM_ SG_ 3 OpenTrunk "Simple counter runs up and start again with 0";
BA_DEF_ "Baudrate" INT 1000 1000000;
BA_DEF_ "BusType" STRING ;
BA_DEF_ "DBName" STRING ;
BA_DEF_ "ProtocolType" STRING ;
BA_DEF_ BU_ "NmAsrNode" ENUM "No","Yes";
BA_DEF_ BU_ "NmAsrNodeIdentifier" INT 0 255;
BA_DEF_ BO_ "GenMsgCycleTime" INT 0 65536;
BA_DEF_ BO_ "GenMsgCycleTimeFast" FLOAT 0 300000;
BA_DEF_ BO_ "GenMsgDelayTime" INT 0 65536;
BA_DEF_ BO_ "GenMsgNrOfRepetition" INT 0 100000;
BA_DEF_ BO_ "GenMsgSendType" ENUM "cyclic","spontaneous","not-used","not-used","not-used","cyclicAndSpontaneous","not-used","cyclicIfActive","NoMsgSendType";
BA_DEF_ BO_ "GenMsgStartDelayTime" INT 0 65536;
BA_DEF_ SG_ "GenSigSendType" ENUM "Cyclic","OnWrite","OnWriteWithRepetition","OnChange","OnChangeWithRepetition","IfActive","IfActiveWithRepetition","NoSigSendType";
BA_DEF_ SG_ "GenSigStartValue" HEX 0 80000000;
BA_DEF_ BO_ "GenMsgILSupport" ENUM "No","Yes";
BA_DEF_ BO_ "NmAsrMessage" ENUM "No","Yes";
BA_DEF_ "NmAsrBaseAddress" HEX 0 536870911;
BA_DEF_ "NmAsrMessageCount" INT 0 255;
BA_DEF_ BU_ "NodeLayerModules" STRING ;
BA_DEF_ BU_ "ILused" ENUM "No","Yes";
BA_DEF_ SG_ "GenSigFuncType" ENUM "NoFunction","n/a","n/a","n/a","n/a","n/a","n/a","n/a","n/a","n/a","n/a","n/a","n/a","n/a","n/a","CHK","CNTR","n/a","n/a","n/a","CNTR_AR_01","CRC_AR_01_BOTH","CRC_AR_01_ALT","CRC_AR_01_LOW","CRC_AR_01_NIBBLE","CNTR_AR_04","CRC_AR_04A","CNTR_AR_05","CRC_AR_05";
BA_DEF_ SG_ "GenSigDataID" STRING ;
BA_DEF_ SG_ "SigGroup" STRING ;
BA_DEF_DEF_ "Baudrate" 1000;
BA_DEF_DEF_ "BusType" "";
BA_DEF_DEF_ "DBName" "";
BA_DEF_DEF_ "ProtocolType" "";
BA_DEF_DEF_ "NmAsrNode" "No";
BA_DEF_DEF_ "NmAsrNodeIdentifier" 0;
BA_DEF_DEF_ "GenMsgCycleTime" 0;
BA_DEF_DEF_ "GenMsgCycleTimeFast" 0;
BA_DEF_DEF_ "GenMsgDelayTime" 0;
BA_DEF_DEF_ "GenMsgNrOfRepetition" 0;
BA_DEF_DEF_ "GenMsgSendType" "NoMsgSendType";
BA_DEF_DEF_ "GenMsgStartDelayTime" 0;
BA_DEF_DEF_ "GenSigSendType" "NoSigSendType";
BA_DEF_DEF_ "GenSigStartValue" 0;
BA_DEF_DEF_ "GenMsgILSupport" "Yes";
BA_DEF_DEF_ "NmAsrMessage" "No";
BA_DEF_DEF_ "NmAsrBaseAddress" 1280;
BA_DEF_DEF_ "NmAsrMessageCount" 64;
BA_DEF_DEF_ "NodeLayerModules" "CANoeILNLSPA.dll";
BA_DEF_DEF_ "ILused" "Yes";
BA_DEF_DEF_ "GenSigFuncType" "NoFunction";
BA_DEF_DEF_ "GenSigDataID" "";
BA_DEF_DEF_ "SigGroup" "";
BA_ "ProtocolType" "CAN";
BA_ "BusType" "CAN";
BA_ "Baudrate" 500000;
BA_ "DBName" "PrivateCAN";
BA_ "GenMsgSendType" BO_ 0 0;
BA_ "GenMsgCycleTime" BO_ 0 10;
BA_ "GenMsgSendType" BO_ 3 0;
BA_ "GenMsgCycleTime" BO_ 3 10;

View File

@@ -0,0 +1,733 @@
date 08/28/25 19:10:31
base hex timestamps absolute
Begin Triggerblock 08/28/25 19:10:31
0.000000 Start of measurement
0.201165 1 0 Rx d 8 00 00 00 00 00 00 00 32
0.401499 1 0 Rx d 8 00 00 00 00 00 00 00 66
0.602210 1 0 Rx d 8 00 00 00 00 00 00 00 98
0.802858 1 0 Rx d 8 00 00 00 00 00 00 00 CC
1.003648 1 0 Rx d 8 00 00 00 00 00 00 01 00
1.204951 1 0 Rx d 8 00 00 00 00 00 00 01 32
1.405930 1 0 Rx d 8 00 00 00 00 00 00 01 66
1.607026 1 0 Rx d 8 00 00 00 00 00 00 01 98
1.807489 1 0 Rx d 8 00 00 00 00 00 00 01 CC
2.007739 1 0 Rx d 8 00 00 00 00 00 00 02 00
2.208098 1 0 Rx d 8 00 00 00 00 00 00 02 32
2.408547 1 0 Rx d 8 00 00 00 00 00 00 02 66
2.609562 1 0 Rx d 8 00 00 00 00 00 00 02 98
2.809847 1 0 Rx d 8 00 00 00 00 00 00 02 CC
3.010645 1 0 Rx d 8 00 00 00 00 00 00 03 00
3.211386 1 0 Rx d 8 00 00 00 00 00 00 03 32
3.412526 1 0 Rx d 8 00 00 00 00 00 00 03 66
3.613245 1 0 Rx d 8 00 00 00 00 00 00 03 98
3.813713 1 0 Rx d 8 00 00 00 00 00 00 03 CC
4.014112 1 0 Rx d 8 00 00 00 00 00 00 04 00
4.214398 1 0 Rx d 8 00 00 00 00 00 00 00 00
4.414982 1 0 Rx d 8 00 00 00 00 00 00 00 00
4.615295 1 0 Rx d 8 00 00 00 00 00 00 00 00
4.815465 1 0 Rx d 8 00 00 00 00 00 00 00 00
5.016380 1 0 Rx d 8 00 00 00 00 00 00 00 00
5.216542 1 0 Rx d 8 00 00 00 00 00 00 00 00
5.417300 1 0 Rx d 8 00 00 00 00 00 00 00 00
5.617988 1 0 Rx d 8 00 00 00 00 00 00 00 00
5.818408 1 0 Rx d 8 00 00 00 00 00 00 00 00
6.019516 1 0 Rx d 8 00 00 00 00 00 00 00 00
6.220729 1 0 Rx d 8 00 00 00 00 00 00 00 00
6.421086 1 0 Rx d 8 00 00 00 00 00 00 00 00
6.621658 1 0 Rx d 8 00 00 00 00 00 00 00 00
6.821893 1 0 Rx d 8 00 00 00 00 00 00 00 00
7.023523 1 0 Rx d 8 00 00 00 00 00 00 00 00
7.224499 1 0 Rx d 8 00 00 00 00 00 00 00 00
7.424949 1 0 Rx d 8 00 00 00 00 00 00 00 00
7.625353 1 0 Rx d 8 00 00 00 00 00 00 00 00
7.825592 1 0 Rx d 8 00 00 00 00 00 00 00 00
8.026488 1 0 Rx d 8 00 00 00 00 00 00 00 00
8.227611 1 0 Rx d 8 00 00 00 00 00 00 00 00
8.427815 1 0 Rx d 8 00 00 00 00 00 00 00 00
8.628525 1 0 Rx d 8 00 00 00 00 00 00 00 00
8.829077 1 0 Rx d 8 00 00 00 00 00 00 00 00
9.029962 1 0 Rx d 8 00 00 00 00 00 00 08 FE
9.230475 1 0 Rx d 8 00 00 00 00 00 00 09 32
9.431706 1 0 Rx d 8 00 00 00 00 00 00 09 66
9.632166 1 0 Rx d 8 00 00 00 00 00 00 09 98
9.832447 1 0 Rx d 8 00 00 00 00 00 00 09 CC
10.033648 1 0 Rx d 8 00 00 00 00 00 00 09 FE
10.234917 1 0 Rx d 8 00 00 00 00 00 00 0A 32
10.435382 1 0 Rx d 8 00 00 00 00 00 00 0A 66
10.635758 1 0 Rx d 8 00 00 00 00 00 00 0A 98
10.836600 1 0 Rx d 8 00 00 00 00 00 00 0A CC
11.037378 1 0 Rx d 8 00 00 00 00 00 00 0A FE
11.237882 1 0 Rx d 8 00 00 00 00 00 00 0B 32
11.439001 1 0 Rx d 8 00 00 00 00 00 00 0B 66
11.639635 1 0 Rx d 8 00 00 00 00 00 00 0B 98
11.840391 1 0 Rx d 8 00 00 00 00 00 00 0B CC
12.040855 1 0 Rx d 8 00 00 00 00 00 00 0B FE
12.242131 1 0 Rx d 8 00 00 00 00 00 00 0C 32
12.443152 1 0 Rx d 8 00 00 00 00 00 00 0C 66
12.644236 1 0 Rx d 8 00 00 00 00 00 00 0C 98
12.844648 1 0 Rx d 8 00 00 00 00 00 00 0C CC
13.045033 1 0 Rx d 8 00 00 00 00 00 00 0C FE
13.245501 1 0 Rx d 8 00 00 00 00 00 00 0D 32
13.446980 1 0 Rx d 8 00 00 00 00 00 00 0D 66
13.647729 1 0 Rx d 8 00 00 00 00 00 00 0D 98
13.848694 1 0 Rx d 8 00 00 00 00 00 00 0D CC
14.050383 1 0 Rx d 8 00 00 00 00 00 00 0D FE
14.250963 1 0 Rx d 8 00 00 00 00 00 00 0E 32
14.451368 1 0 Rx d 8 00 00 00 00 00 00 0E 66
14.652121 1 0 Rx d 8 00 00 00 00 00 00 0E 98
14.853783 1 0 Rx d 8 00 00 00 00 00 00 0E CC
15.054832 1 0 Rx d 8 00 00 00 00 00 00 0E FE
15.255178 1 0 Rx d 8 00 00 00 00 00 00 0F 32
15.456191 1 0 Rx d 8 00 00 00 00 00 00 0F 66
15.656966 1 0 Rx d 8 00 00 00 00 00 00 0F 98
15.857494 1 0 Rx d 8 00 00 00 00 00 00 0F CC
16.058330 1 0 Rx d 8 00 00 00 00 00 00 00 00
16.259059 1 0 Rx d 8 00 00 00 00 00 00 00 00
16.459296 1 0 Rx d 8 00 00 00 00 00 00 00 00
16.659768 1 0 Rx d 8 00 00 00 00 00 00 00 00
16.860430 1 0 Rx d 8 00 00 00 00 00 00 00 00
17.060657 1 0 Rx d 8 00 00 00 00 00 00 00 00
17.260999 1 0 Rx d 8 00 00 00 00 00 00 00 00
17.461425 1 0 Rx d 8 00 00 00 00 00 00 00 00
17.662180 1 0 Rx d 8 00 00 00 00 00 00 00 00
17.862641 1 0 Rx d 8 00 00 00 00 00 00 00 00
18.063737 1 0 Rx d 8 00 00 00 00 00 00 00 00
18.264310 1 0 Rx d 8 00 00 00 00 00 00 00 00
18.465286 1 0 Rx d 8 00 00 00 00 00 00 00 00
18.666105 1 0 Rx d 8 00 00 00 00 00 00 00 00
18.867149 1 0 Rx d 8 00 00 00 00 00 00 00 00
19.067565 1 0 Rx d 8 00 00 00 00 00 00 00 00
19.268397 1 0 Rx d 8 00 00 00 00 00 00 00 00
19.468547 1 0 Rx d 8 00 00 00 00 00 00 00 00
19.669109 1 0 Rx d 8 00 00 00 00 00 00 00 00
19.869927 1 0 Rx d 8 00 00 00 00 00 00 00 00
20.070496 1 0 Rx d 8 00 00 00 00 00 00 00 00
20.271128 1 0 Rx d 8 00 00 00 00 00 00 00 00
20.471522 1 0 Rx d 8 00 00 00 00 00 00 00 00
20.672562 1 0 Rx d 8 00 00 00 00 00 00 00 00
20.873219 1 0 Rx d 8 00 00 00 00 00 00 00 00
21.073484 1 0 Rx d 8 00 00 00 00 00 00 15 00
21.274192 1 0 Rx d 8 00 00 00 00 00 00 15 32
21.474746 1 0 Rx d 8 00 00 00 00 00 00 15 66
21.674944 1 0 Rx d 8 00 00 00 00 00 00 15 98
21.875689 1 0 Rx d 8 00 00 00 00 00 00 15 CC
22.076798 1 0 Rx d 8 00 00 00 00 00 00 16 00
22.278040 1 0 Rx d 8 00 00 00 00 00 00 16 32
22.479430 1 0 Rx d 8 00 00 00 00 00 00 16 66
22.679827 1 0 Rx d 8 00 00 00 00 00 00 16 98
22.880811 1 0 Rx d 8 00 00 00 00 00 00 16 CC
23.081770 1 0 Rx d 8 00 00 00 00 00 00 17 00
23.281961 1 0 Rx d 8 00 00 00 00 00 00 17 32
23.482218 1 0 Rx d 8 00 00 00 00 00 00 17 66
23.682829 1 0 Rx d 8 00 00 00 00 00 00 17 98
23.883485 1 0 Rx d 8 00 00 00 00 00 00 17 CC
24.084356 1 0 Rx d 8 00 00 00 00 00 00 18 00
24.285369 1 0 Rx d 8 00 00 00 00 00 00 16 00
24.485694 1 0 Rx d 8 00 00 00 00 00 00 14 00
24.685859 1 0 Rx d 8 00 00 00 00 00 00 12 00
24.886357 1 0 Rx d 8 00 00 00 00 00 00 10 00
25.087476 1 0 Rx d 8 00 00 00 00 00 00 0E 00
25.287822 1 0 Rx d 8 00 00 00 00 00 00 0C 00
25.488562 1 0 Rx d 8 00 00 00 00 00 00 0A 00
25.688999 1 0 Rx d 8 00 00 00 00 00 00 08 00
25.889585 1 0 Rx d 8 00 00 00 00 00 00 06 00
26.091147 1 0 Rx d 8 00 00 00 00 00 00 00 00
26.292392 1 0 Rx d 8 00 00 00 00 00 00 00 00
26.492961 1 0 Rx d 8 00 00 00 00 00 00 00 00
26.693929 1 0 Rx d 8 00 00 00 00 00 00 00 00
26.895003 1 0 Rx d 8 00 00 00 00 00 00 00 00
27.095334 1 0 Rx d 8 00 00 00 00 00 00 00 00
27.295680 1 0 Rx d 8 00 00 00 00 00 00 00 00
27.497172 1 0 Rx d 8 00 00 00 00 00 00 00 00
27.698339 1 0 Rx d 8 00 00 00 00 00 00 00 00
27.898922 1 0 Rx d 8 00 00 00 00 00 00 00 00
28.099435 1 0 Rx d 8 00 00 00 00 00 00 00 00
28.299733 1 0 Rx d 8 00 00 00 00 00 00 00 00
28.499895 1 0 Rx d 8 00 00 00 00 00 00 00 00
28.700373 1 0 Rx d 8 00 00 00 00 00 00 00 00
28.901284 1 0 Rx d 8 00 00 00 00 00 00 00 00
29.102050 1 0 Rx d 8 00 00 00 00 00 00 00 00
29.303311 1 0 Rx d 8 00 00 00 00 00 00 00 00
29.503625 1 0 Rx d 8 00 00 00 00 00 00 00 00
29.703906 1 0 Rx d 8 00 00 00 00 00 00 00 00
29.904220 1 0 Rx d 8 00 00 00 00 00 00 00 00
30.104471 1 0 Rx d 8 00 00 00 00 00 00 00 00
30.305439 1 0 Rx d 8 00 00 00 00 00 00 00 00
30.505755 1 0 Rx d 8 00 00 00 00 00 00 00 00
30.706401 1 0 Rx d 8 00 00 00 00 00 00 00 00
30.907561 1 0 Rx d 8 00 00 00 00 00 00 00 00
31.107834 1 0 Rx d 8 00 00 00 00 00 00 04 98
31.308727 1 0 Rx d 8 00 00 00 00 00 00 04 CC
31.509748 1 0 Rx d 8 00 00 00 00 00 00 04 FE
31.710425 1 0 Rx d 8 00 00 00 00 00 00 05 32
31.910680 1 0 Rx d 8 00 00 00 00 00 00 05 66
32.111808 1 0 Rx d 8 00 00 00 00 00 00 05 98
32.312183 1 0 Rx d 8 00 00 00 00 00 00 05 CC
32.512689 1 0 Rx d 8 00 00 00 00 00 00 05 FE
32.713234 1 0 Rx d 8 00 00 00 00 00 00 06 32
32.914537 1 0 Rx d 8 00 00 00 00 00 00 06 66
33.114779 1 0 Rx d 8 00 00 00 00 00 00 06 98
33.315177 1 0 Rx d 8 00 00 00 00 00 00 06 CC
33.516145 1 0 Rx d 8 00 00 00 00 00 00 06 FE
33.717179 1 0 Rx d 8 00 00 00 00 00 00 07 32
33.918008 1 0 Rx d 8 00 00 00 00 00 00 07 66
34.118478 1 0 Rx d 8 00 00 00 00 00 00 07 98
34.319173 1 0 Rx d 8 00 00 00 00 00 00 07 CC
34.519476 1 0 Rx d 8 00 00 00 00 00 00 07 FE
34.720208 1 0 Rx d 8 00 00 00 00 00 00 08 32
34.920661 1 0 Rx d 8 00 00 00 00 00 00 08 66
35.121788 1 0 Rx d 8 00 00 00 00 00 00 08 98
35.322204 1 0 Rx d 8 00 00 00 00 00 00 08 CC
35.523025 1 0 Rx d 8 00 00 00 00 00 00 08 FE
35.723694 1 0 Rx d 8 00 00 00 00 00 00 09 32
35.924256 1 0 Rx d 8 00 00 00 00 00 00 09 66
36.125166 1 0 Rx d 8 00 00 00 00 00 00 00 00
36.325455 1 0 Rx d 8 00 00 00 00 00 00 00 00
36.526130 1 0 Rx d 8 00 00 00 00 00 00 00 00
36.726660 1 0 Rx d 8 00 00 00 00 00 00 00 00
36.927031 1 0 Rx d 8 00 00 00 00 00 00 00 00
37.128202 1 0 Rx d 8 00 00 00 00 00 00 00 00
37.328463 1 0 Rx d 8 00 00 00 00 00 00 00 00
37.529261 1 0 Rx d 8 00 00 00 00 00 00 00 00
37.730042 1 0 Rx d 8 00 00 00 00 00 00 00 00
37.930784 1 0 Rx d 8 00 00 00 00 00 00 00 00
38.132083 1 0 Rx d 8 00 00 00 00 00 00 00 00
38.332765 1 0 Rx d 8 00 00 00 00 00 00 00 00
38.534007 1 0 Rx d 8 00 00 00 00 00 00 00 00
38.735096 1 0 Rx d 8 00 00 00 00 00 00 00 00
38.935972 1 0 Rx d 8 00 00 00 00 00 00 00 00
39.136999 1 0 Rx d 8 00 00 00 00 00 00 00 00
39.337463 1 0 Rx d 8 00 00 00 00 00 00 00 00
39.537932 1 0 Rx d 8 00 00 00 00 00 00 00 00
39.738646 1 0 Rx d 8 00 00 00 00 00 00 00 00
39.939300 1 0 Rx d 8 00 00 00 00 00 00 00 00
40.139463 1 0 Rx d 8 00 00 00 00 00 00 00 00
40.339825 1 0 Rx d 8 00 00 00 00 00 00 00 00
40.540892 1 0 Rx d 8 00 00 00 00 00 00 00 00
40.742804 1 0 Rx d 8 00 00 00 00 00 00 00 00
40.943116 1 0 Rx d 8 00 00 00 00 00 00 00 00
41.143827 1 0 Rx d 8 00 00 00 00 00 00 0E 98
41.344606 1 0 Rx d 8 00 00 00 00 00 00 0E CC
41.545645 1 0 Rx d 8 00 00 00 00 00 00 0E FE
41.746766 1 0 Rx d 8 00 00 00 00 00 00 0F 32
41.947757 1 0 Rx d 8 00 00 00 00 00 00 0F 66
42.148907 1 0 Rx d 8 00 00 00 00 00 00 0F 98
42.350038 1 0 Rx d 8 00 00 00 00 00 00 0F CC
42.550890 1 0 Rx d 8 00 00 00 00 00 00 0F FE
42.752057 1 0 Rx d 8 00 00 00 00 00 00 10 32
42.953446 1 0 Rx d 8 00 00 00 00 00 00 10 66
43.153679 1 0 Rx d 8 00 00 00 00 00 00 10 98
43.354061 1 0 Rx d 8 00 00 00 00 00 00 10 CC
43.555097 1 0 Rx d 8 00 00 00 00 00 00 10 FE
43.755339 1 0 Rx d 8 00 00 00 00 00 00 11 32
43.955653 1 0 Rx d 8 00 00 00 00 00 00 11 66
44.156515 1 0 Rx d 8 00 00 00 00 00 00 11 98
44.357275 1 0 Rx d 8 00 00 00 00 00 00 11 CC
44.557752 1 0 Rx d 8 00 00 00 00 00 00 11 FE
44.758675 1 0 Rx d 8 00 00 00 00 00 00 12 32
44.959208 1 0 Rx d 8 00 00 00 00 00 00 12 66
45.159610 1 0 Rx d 8 00 00 00 00 00 00 12 98
45.359903 1 0 Rx d 8 00 00 00 00 00 00 12 CC
45.560465 1 0 Rx d 8 00 00 00 00 00 00 13 00
45.761617 1 0 Rx d 8 00 00 00 00 00 00 13 32
45.961932 1 0 Rx d 8 00 00 00 00 00 00 13 66
46.162996 1 0 Rx d 8 00 00 00 00 00 00 00 00
46.363493 1 0 Rx d 8 00 00 00 00 00 00 00 00
46.564408 1 0 Rx d 8 00 00 00 00 00 00 00 00
46.765361 1 0 Rx d 8 00 00 00 00 00 00 00 00
46.965804 1 0 Rx d 8 00 00 00 00 00 00 00 00
47.166504 1 0 Rx d 8 00 00 00 00 00 00 00 00
47.367378 1 0 Rx d 8 00 00 00 00 00 00 00 00
47.568797 1 0 Rx d 8 00 00 00 00 00 00 00 00
47.769039 1 0 Rx d 8 00 00 00 00 00 00 00 00
47.970066 1 0 Rx d 8 00 00 00 00 00 00 00 00
48.170896 1 0 Rx d 8 00 00 00 00 00 00 00 00
48.371996 1 0 Rx d 8 00 00 00 00 00 00 00 00
48.572310 1 0 Rx d 8 00 00 00 00 00 00 00 00
48.773330 1 0 Rx d 8 00 00 00 00 00 00 00 00
48.975218 1 0 Rx d 8 00 00 00 00 00 00 00 00
49.175780 1 0 Rx d 8 00 00 00 00 00 00 00 00
49.376198 1 0 Rx d 8 00 00 00 00 00 00 00 00
49.577079 1 0 Rx d 8 00 00 00 00 00 00 00 00
49.778128 1 0 Rx d 8 00 00 00 00 00 00 00 00
49.978540 1 0 Rx d 8 00 00 00 00 00 00 00 00
50.179871 1 0 Rx d 8 00 00 00 00 00 00 00 00
50.380088 1 0 Rx d 8 00 00 00 00 00 00 00 00
50.580846 1 0 Rx d 8 00 00 00 00 00 00 00 00
50.781325 1 0 Rx d 8 00 00 00 00 00 00 00 00
50.982477 1 0 Rx d 8 00 00 00 00 00 00 00 00
51.182651 1 0 Rx d 8 00 00 00 00 00 00 12 00
51.383578 1 0 Rx d 8 00 00 00 00 00 00 10 00
51.584095 1 0 Rx d 8 00 00 00 00 00 00 0E 00
51.784794 1 0 Rx d 8 00 00 00 00 00 00 0C 00
51.985412 1 0 Rx d 8 00 00 00 00 00 00 0A 00
52.186861 1 0 Rx d 8 00 00 00 00 00 00 08 00
52.387832 1 0 Rx d 8 00 00 00 00 00 00 06 00
52.588288 1 0 Rx d 8 00 00 00 00 00 00 04 00
52.789157 1 0 Rx d 8 00 00 00 00 00 00 02 00
52.989942 1 0 Rx d 8 00 00 00 00 00 00 00 00
53.190327 1 0 Rx d 8 00 00 00 00 00 00 00 32
53.391588 1 0 Rx d 8 00 00 00 00 00 00 00 66
53.592249 1 0 Rx d 8 00 00 00 00 00 00 00 98
53.792386 1 0 Rx d 8 00 00 00 00 00 00 00 CC
53.992968 1 0 Rx d 8 00 00 00 00 00 00 01 00
54.193367 1 0 Rx d 8 00 00 00 00 00 00 01 32
54.394716 1 0 Rx d 8 00 00 00 00 00 00 01 66
54.595105 1 0 Rx d 8 00 00 00 00 00 00 01 98
54.795731 1 0 Rx d 8 00 00 00 00 00 00 01 CC
54.996284 1 0 Rx d 8 00 00 00 00 00 00 02 00
55.197576 1 0 Rx d 8 00 00 00 00 00 00 02 32
55.398054 1 0 Rx d 8 00 00 00 00 00 00 02 66
55.598364 1 0 Rx d 8 00 00 00 00 00 00 02 98
55.798965 1 0 Rx d 8 00 00 00 00 00 00 02 CC
55.999265 1 0 Rx d 8 00 00 00 00 00 00 03 00
56.199561 1 0 Rx d 8 00 00 00 00 00 00 00 00
56.400268 1 0 Rx d 8 00 00 00 00 00 00 00 00
56.601059 1 0 Rx d 8 00 00 00 00 00 00 00 00
56.801284 1 0 Rx d 8 00 00 00 00 00 00 00 00
57.002356 1 0 Rx d 8 00 00 00 00 00 00 00 00
57.202816 1 0 Rx d 8 00 00 00 00 00 00 00 00
57.404465 1 0 Rx d 8 00 00 00 00 00 00 00 00
57.604978 1 0 Rx d 8 00 00 00 00 00 00 00 00
57.805539 1 0 Rx d 8 00 00 00 00 00 00 00 00
58.006555 1 0 Rx d 8 00 00 00 00 00 00 00 00
58.207292 1 0 Rx d 8 00 00 00 00 00 00 00 00
58.407613 1 0 Rx d 8 00 00 00 00 00 00 00 00
58.607932 1 0 Rx d 8 00 00 00 00 00 00 00 00
58.808839 1 0 Rx d 8 00 00 00 00 00 00 00 00
59.009580 1 0 Rx d 8 00 00 00 00 00 00 00 00
59.210003 1 0 Rx d 8 00 00 00 00 00 00 00 00
59.410177 1 0 Rx d 8 00 00 00 00 00 00 00 00
59.610613 1 0 Rx d 8 00 00 00 00 00 00 00 00
59.811194 1 0 Rx d 8 00 00 00 00 00 00 00 00
60.012120 1 0 Rx d 8 00 00 00 00 00 00 00 00
60.212784 1 0 Rx d 8 00 00 00 00 00 00 00 00
60.413841 1 0 Rx d 8 00 00 00 00 00 00 00 00
60.614435 1 0 Rx d 8 00 00 00 00 00 00 00 00
60.815231 1 0 Rx d 8 00 00 00 00 00 00 00 00
61.015910 1 0 Rx d 8 00 00 00 00 00 00 07 FE
61.216506 1 0 Rx d 8 00 00 00 00 00 00 08 32
61.416722 1 0 Rx d 8 00 00 00 00 00 00 08 66
61.617300 1 0 Rx d 8 00 00 00 00 00 00 08 98
61.817810 1 0 Rx d 8 00 00 00 00 00 00 08 CC
62.018343 1 0 Rx d 8 00 00 00 00 00 00 08 FE
62.218622 1 0 Rx d 8 00 00 00 00 00 00 09 32
62.419551 1 0 Rx d 8 00 00 00 00 00 00 09 66
62.620102 1 0 Rx d 8 00 00 00 00 00 00 09 98
62.821311 1 0 Rx d 8 00 00 00 00 00 00 09 CC
63.021686 1 0 Rx d 8 00 00 00 00 00 00 09 FE
63.222351 1 0 Rx d 8 00 00 00 00 00 00 0A 32
63.422926 1 0 Rx d 8 00 00 00 00 00 00 0A 66
63.623731 1 0 Rx d 8 00 00 00 00 00 00 0A 98
63.824543 1 0 Rx d 8 00 00 00 00 00 00 0A CC
64.025549 1 0 Rx d 8 00 00 00 00 00 00 0A FE
64.226680 1 0 Rx d 8 00 00 00 00 00 00 0B 32
64.427567 1 0 Rx d 8 00 00 00 00 00 00 0B 66
64.628603 1 0 Rx d 8 00 00 00 00 00 00 0B 98
64.829281 1 0 Rx d 8 00 00 00 00 00 00 0B CC
65.029458 1 0 Rx d 8 00 00 00 00 00 00 0B FE
65.230602 1 0 Rx d 8 00 00 00 00 00 00 0C 32
65.431146 1 0 Rx d 8 00 00 00 00 00 00 0C 66
65.631565 1 0 Rx d 8 00 00 00 00 00 00 0C 98
65.832193 1 0 Rx d 8 00 00 00 00 00 00 0C CC
66.033275 1 0 Rx d 8 00 00 00 00 00 00 00 00
66.233478 1 0 Rx d 8 00 00 00 00 00 00 00 00
66.433824 1 0 Rx d 8 00 00 00 00 00 00 00 00
66.634036 1 0 Rx d 8 00 00 00 00 00 00 00 00
66.834443 1 0 Rx d 8 00 00 00 00 00 00 00 00
67.035303 1 0 Rx d 8 00 00 00 00 00 00 00 00
67.235911 1 0 Rx d 8 00 00 00 00 00 00 00 00
67.436246 1 0 Rx d 8 00 00 00 00 00 00 00 00
67.636459 1 0 Rx d 8 00 00 00 00 00 00 00 00
67.837559 1 0 Rx d 8 00 00 00 00 00 00 00 00
68.038290 1 0 Rx d 8 00 00 00 00 00 00 00 00
68.239218 1 0 Rx d 8 00 00 00 00 00 00 00 00
68.439848 1 0 Rx d 8 00 00 00 00 00 00 00 00
68.640949 1 0 Rx d 8 00 00 00 00 00 00 00 00
68.841707 1 0 Rx d 8 00 00 00 00 00 00 00 00
69.042367 1 0 Rx d 8 00 00 00 00 00 00 00 00
69.242794 1 0 Rx d 8 00 00 00 00 00 00 00 00
69.444186 1 0 Rx d 8 00 00 00 00 00 00 00 00
69.645299 1 0 Rx d 8 00 00 00 00 00 00 00 00
69.845907 1 0 Rx d 8 00 00 00 00 00 00 00 00
70.046190 1 0 Rx d 8 00 00 00 00 00 00 00 00
70.247387 1 0 Rx d 8 00 00 00 00 00 00 00 00
70.448524 1 0 Rx d 8 00 00 00 00 00 00 00 00
70.649526 1 0 Rx d 8 00 00 00 00 00 00 00 00
70.850244 1 0 Rx d 8 00 00 00 00 00 00 00 00
71.050608 1 0 Rx d 8 00 00 00 00 00 00 11 FE
71.250850 1 0 Rx d 8 00 00 00 00 00 00 12 32
71.451347 1 0 Rx d 8 00 00 00 00 00 00 12 66
71.652633 1 0 Rx d 8 00 00 00 00 00 00 12 98
71.853189 1 0 Rx d 8 00 00 00 00 00 00 12 CC
72.053983 1 0 Rx d 8 00 00 00 00 00 00 13 00
72.254639 1 0 Rx d 8 00 00 00 00 00 00 13 32
72.455122 1 0 Rx d 8 00 00 00 00 00 00 13 66
72.655692 1 0 Rx d 8 00 00 00 00 00 00 13 98
72.856575 1 0 Rx d 8 00 00 00 00 00 00 13 CC
73.057111 1 0 Rx d 8 00 00 00 00 00 00 14 00
73.257433 1 0 Rx d 8 00 00 00 00 00 00 14 32
73.458035 1 0 Rx d 8 00 00 00 00 00 00 14 66
73.658563 1 0 Rx d 8 00 00 00 00 00 00 14 98
73.858949 1 0 Rx d 8 00 00 00 00 00 00 14 CC
74.059429 1 0 Rx d 8 00 00 00 00 00 00 15 00
74.259956 1 0 Rx d 8 00 00 00 00 00 00 15 32
74.460450 1 0 Rx d 8 00 00 00 00 00 00 15 66
74.661020 1 0 Rx d 8 00 00 00 00 00 00 15 98
74.861275 1 0 Rx d 8 00 00 00 00 00 00 15 CC
75.061860 1 0 Rx d 8 00 00 00 00 00 00 16 00
75.262959 1 0 Rx d 8 00 00 00 00 00 00 16 32
75.463897 1 0 Rx d 8 00 00 00 00 00 00 16 66
75.664448 1 0 Rx d 8 00 00 00 00 00 00 16 98
75.864638 1 0 Rx d 8 00 00 00 00 00 00 16 CC
76.065108 1 0 Rx d 8 00 00 00 00 00 00 00 00
76.265941 1 0 Rx d 8 00 00 00 00 00 00 00 00
76.466668 1 0 Rx d 8 00 00 00 00 00 00 00 00
76.667414 1 0 Rx d 8 00 00 00 00 00 00 00 00
76.867975 1 0 Rx d 8 00 00 00 00 00 00 00 00
77.068637 1 0 Rx d 8 00 00 00 00 00 00 00 00
77.269838 1 0 Rx d 8 00 00 00 00 00 00 00 00
77.471315 1 0 Rx d 8 00 00 00 00 00 00 00 00
77.672213 1 0 Rx d 8 00 00 00 00 00 00 00 00
77.873438 1 0 Rx d 8 00 00 00 00 00 00 00 00
78.073784 1 0 Rx d 8 00 00 00 00 00 00 00 00
78.274128 1 0 Rx d 8 00 00 00 00 00 00 00 00
78.474507 1 0 Rx d 8 00 00 00 00 00 00 00 00
78.674821 1 0 Rx d 8 00 00 00 00 00 00 00 00
78.876104 1 0 Rx d 8 00 00 00 00 00 00 00 00
79.076896 1 0 Rx d 8 00 00 00 00 00 00 00 00
79.277801 1 0 Rx d 8 00 00 00 00 00 00 00 00
79.478570 1 0 Rx d 8 00 00 00 00 00 00 00 00
79.679197 1 0 Rx d 8 00 00 00 00 00 00 00 00
79.880361 1 0 Rx d 8 00 00 00 00 00 00 00 00
80.080813 1 0 Rx d 8 00 00 00 00 00 00 00 00
80.281318 1 0 Rx d 8 00 00 00 00 00 00 00 00
80.482751 1 0 Rx d 8 00 00 00 00 00 00 00 00
80.682954 1 0 Rx d 8 00 00 00 00 00 00 00 00
80.883925 1 0 Rx d 8 00 00 00 00 00 00 00 00
81.084430 1 0 Rx d 8 00 00 00 00 00 00 01 98
81.285344 1 0 Rx d 8 00 00 00 00 00 00 01 CC
81.485800 1 0 Rx d 8 00 00 00 00 00 00 02 00
81.686289 1 0 Rx d 8 00 00 00 00 00 00 02 32
81.887113 1 0 Rx d 8 00 00 00 00 00 00 02 66
82.088359 1 0 Rx d 8 00 00 00 00 00 00 02 98
82.288829 1 0 Rx d 8 00 00 00 00 00 00 02 CC
82.490045 1 0 Rx d 8 00 00 00 00 00 00 03 00
82.690540 1 0 Rx d 8 00 00 00 00 00 00 03 32
82.890872 1 0 Rx d 8 00 00 00 00 00 00 03 66
83.091725 1 0 Rx d 8 00 00 00 00 00 00 03 98
83.292335 1 0 Rx d 8 00 00 00 00 00 00 03 CC
83.493168 1 0 Rx d 8 00 00 00 00 00 00 04 00
83.694457 1 0 Rx d 8 00 00 00 00 00 00 04 32
83.894713 1 0 Rx d 8 00 00 00 00 00 00 04 66
84.095654 1 0 Rx d 8 00 00 00 00 00 00 04 98
84.296759 1 0 Rx d 8 00 00 00 00 00 00 04 CC
84.497565 1 0 Rx d 8 00 00 00 00 00 00 04 FE
84.697811 1 0 Rx d 8 00 00 00 00 00 00 05 32
84.898319 1 0 Rx d 8 00 00 00 00 00 00 05 66
85.099139 1 0 Rx d 8 00 00 00 00 00 00 05 98
85.299414 1 0 Rx d 8 00 00 00 00 00 00 05 CC
85.500064 1 0 Rx d 8 00 00 00 00 00 00 05 FE
85.700760 1 0 Rx d 8 00 00 00 00 00 00 06 32
85.901271 1 0 Rx d 8 00 00 00 00 00 00 06 66
86.102122 1 0 Rx d 8 00 00 00 00 00 00 00 00
86.303033 1 0 Rx d 8 00 00 00 00 00 00 00 00
86.504461 1 0 Rx d 8 00 00 00 00 00 00 00 00
86.705469 1 0 Rx d 8 00 00 00 00 00 00 00 00
86.906178 1 0 Rx d 8 00 00 00 00 00 00 00 00
87.106475 1 0 Rx d 8 00 00 00 00 00 00 00 00
87.307347 1 0 Rx d 8 00 00 00 00 00 00 00 00
87.507818 1 0 Rx d 8 00 00 00 00 00 00 00 00
87.708986 1 0 Rx d 8 00 00 00 00 00 00 00 00
87.909492 1 0 Rx d 8 00 00 00 00 00 00 00 00
88.110633 1 0 Rx d 8 00 00 00 00 00 00 00 00
88.311199 1 0 Rx d 8 00 00 00 00 00 00 00 00
88.512430 1 0 Rx d 8 00 00 00 00 00 00 00 00
88.713268 1 0 Rx d 8 00 00 00 00 00 00 00 00
88.913936 1 0 Rx d 8 00 00 00 00 00 00 00 00
89.115265 1 0 Rx d 8 00 00 00 00 00 00 00 00
89.316255 1 0 Rx d 8 00 00 00 00 00 00 00 00
89.516812 1 0 Rx d 8 00 00 00 00 00 00 00 00
89.717160 1 0 Rx d 8 00 00 00 00 00 00 00 00
89.918334 1 0 Rx d 8 00 00 00 00 00 00 00 00
90.119362 1 0 Rx d 8 00 00 00 00 00 00 00 00
90.319783 1 0 Rx d 8 00 00 00 00 00 00 00 00
90.520010 1 0 Rx d 8 00 00 00 00 00 00 00 00
90.720804 1 0 Rx d 8 00 00 00 00 00 00 00 00
90.921045 1 0 Rx d 8 00 00 00 00 00 00 00 00
91.122521 1 0 Rx d 8 00 00 00 00 00 00 0B 98
91.323248 1 0 Rx d 8 00 00 00 00 00 00 0B CC
91.523740 1 0 Rx d 8 00 00 00 00 00 00 0B FE
91.724270 1 0 Rx d 8 00 00 00 00 00 00 0C 32
91.924495 1 0 Rx d 8 00 00 00 00 00 00 0C 66
92.125094 1 0 Rx d 8 00 00 00 00 00 00 0C 98
92.325463 1 0 Rx d 8 00 00 00 00 00 00 0C CC
92.526589 1 0 Rx d 8 00 00 00 00 00 00 0C FE
92.727359 1 0 Rx d 8 00 00 00 00 00 00 0D 32
92.927951 1 0 Rx d 8 00 00 00 00 00 00 0D 66
93.128612 1 0 Rx d 8 00 00 00 00 00 00 0D 98
93.329125 1 0 Rx d 8 00 00 00 00 00 00 0D CC
93.529656 1 0 Rx d 8 00 00 00 00 00 00 0D FE
93.729954 1 0 Rx d 8 00 00 00 00 00 00 0E 32
93.930485 1 0 Rx d 8 00 00 00 00 00 00 0E 66
94.131667 1 0 Rx d 8 00 00 00 00 00 00 0E 98
94.332592 1 0 Rx d 8 00 00 00 00 00 00 0E CC
94.534376 1 0 Rx d 8 00 00 00 00 00 00 0E FE
94.735010 1 0 Rx d 8 00 00 00 00 00 00 0F 32
94.935150 1 0 Rx d 8 00 00 00 00 00 00 0F 66
95.136367 1 0 Rx d 8 00 00 00 00 00 00 0F 98
95.336759 1 0 Rx d 8 00 00 00 00 00 00 0F CC
95.538112 1 0 Rx d 8 00 00 00 00 00 00 0F FE
95.738250 1 0 Rx d 8 00 00 00 00 00 00 10 32
95.938448 1 0 Rx d 8 00 00 00 00 00 00 10 66
96.138702 1 0 Rx d 8 00 00 00 00 00 00 00 00
96.339017 1 0 Rx d 8 00 00 00 00 00 00 00 00
96.539273 1 0 Rx d 8 00 00 00 00 00 00 00 00
96.739667 1 0 Rx d 8 00 00 00 00 00 00 00 00
96.940239 1 0 Rx d 8 00 00 00 00 00 00 00 00
97.141181 1 0 Rx d 8 00 00 00 00 00 00 00 00
97.341565 1 0 Rx d 8 00 00 00 00 00 00 00 00
97.542252 1 0 Rx d 8 00 00 00 00 00 00 00 00
97.743455 1 0 Rx d 8 00 00 00 00 00 00 00 00
97.944065 1 0 Rx d 8 00 00 00 00 00 00 00 00
98.144313 1 0 Rx d 8 00 00 00 00 00 00 00 00
98.345247 1 0 Rx d 8 00 00 00 00 00 00 00 00
98.545510 1 0 Rx d 8 00 00 00 00 00 00 00 00
98.746514 1 0 Rx d 8 00 00 00 00 00 00 00 00
98.946817 1 0 Rx d 8 00 00 00 00 00 00 00 00
99.147276 1 0 Rx d 8 00 00 00 00 00 00 00 00
99.348008 1 0 Rx d 8 00 00 00 00 00 00 00 00
99.548748 1 0 Rx d 8 00 00 00 00 00 00 00 00
99.749477 1 0 Rx d 8 00 00 00 00 00 00 00 00
99.950542 1 0 Rx d 8 00 00 00 00 00 00 00 00
100.150895 1 0 Rx d 8 00 00 00 00 00 00 00 00
100.351372 1 0 Rx d 8 00 00 00 00 00 00 00 00
100.551608 1 0 Rx d 8 00 00 00 00 00 00 00 00
100.751884 1 0 Rx d 8 00 00 00 00 00 00 00 00
100.953095 1 0 Rx d 8 00 00 00 00 00 00 00 00
101.154105 1 0 Rx d 8 00 00 00 00 00 00 15 98
101.355479 1 0 Rx d 8 00 00 00 00 00 00 15 CC
101.556655 1 0 Rx d 8 00 00 00 00 00 00 16 00
101.758337 1 0 Rx d 8 00 00 00 00 00 00 16 32
101.959398 1 0 Rx d 8 00 00 00 00 00 00 16 66
102.160166 1 0 Rx d 8 00 00 00 00 00 00 16 98
102.361893 1 0 Rx d 8 00 00 00 00 00 00 16 CC
102.562712 1 0 Rx d 8 00 00 00 00 00 00 17 00
102.763470 1 0 Rx d 8 00 00 00 00 00 00 17 32
102.964242 1 0 Rx d 8 00 00 00 00 00 00 17 66
103.164462 1 0 Rx d 8 00 00 00 00 00 00 17 98
103.365670 1 0 Rx d 8 00 00 00 00 00 00 17 CC
103.566984 1 0 Rx d 8 00 00 00 00 00 00 18 00
103.767491 1 0 Rx d 8 00 00 00 00 00 00 16 00
103.968187 1 0 Rx d 8 00 00 00 00 00 00 14 00
104.169019 1 0 Rx d 8 00 00 00 00 00 00 12 00
104.369584 1 0 Rx d 8 00 00 00 00 00 00 10 00
104.570622 1 0 Rx d 8 00 00 00 00 00 00 0E 00
104.770875 1 0 Rx d 8 00 00 00 00 00 00 0C 00
104.971893 1 0 Rx d 8 00 00 00 00 00 00 0A 00
105.172481 1 0 Rx d 8 00 00 00 00 00 00 08 00
105.373330 1 0 Rx d 8 00 00 00 00 00 00 06 00
105.573806 1 0 Rx d 8 00 00 00 00 00 00 04 00
105.774099 1 0 Rx d 8 00 00 00 00 00 00 02 00
105.974447 1 0 Rx d 8 00 00 00 00 00 00 00 00
106.175002 1 0 Rx d 8 00 00 00 00 00 00 00 00
106.375492 1 0 Rx d 8 00 00 00 00 00 00 00 00
106.576183 1 0 Rx d 8 00 00 00 00 00 00 00 00
106.776593 1 0 Rx d 8 00 00 00 00 00 00 00 00
106.977149 1 0 Rx d 8 00 00 00 00 00 00 00 00
107.177741 1 0 Rx d 8 00 00 00 00 00 00 00 00
107.378029 1 0 Rx d 8 00 00 00 00 00 00 00 00
107.578972 1 0 Rx d 8 00 00 00 00 00 00 00 00
107.779803 1 0 Rx d 8 00 00 00 00 00 00 00 00
107.980027 1 0 Rx d 8 00 00 00 00 00 00 00 00
108.180959 1 0 Rx d 8 00 00 00 00 00 00 00 00
108.381257 1 0 Rx d 8 00 00 00 00 00 00 00 00
108.581572 1 0 Rx d 8 00 00 00 00 00 00 00 00
108.782674 1 0 Rx d 8 00 00 00 00 00 00 00 00
108.983284 1 0 Rx d 8 00 00 00 00 00 00 00 00
109.184365 1 0 Rx d 8 00 00 00 00 00 00 00 00
109.385521 1 0 Rx d 8 00 00 00 00 00 00 00 00
109.586636 1 0 Rx d 8 00 00 00 00 00 00 00 00
109.787259 1 0 Rx d 8 00 00 00 00 00 00 00 00
109.988178 1 0 Rx d 8 00 00 00 00 00 00 00 00
110.189275 1 0 Rx d 8 00 00 00 00 00 00 00 00
110.389596 1 0 Rx d 8 00 00 00 00 00 00 00 00
110.590122 1 0 Rx d 8 00 00 00 00 00 00 00 00
110.791196 1 0 Rx d 8 00 00 00 00 00 00 00 00
110.991450 1 0 Rx d 8 00 00 00 00 00 00 00 00
111.192134 1 0 Rx d 8 00 00 00 00 00 00 05 32
111.392307 1 0 Rx d 8 00 00 00 00 00 00 05 66
111.593039 1 0 Rx d 8 00 00 00 00 00 00 05 98
111.793374 1 0 Rx d 8 00 00 00 00 00 00 05 CC
111.994395 1 0 Rx d 8 00 00 00 00 00 00 05 FE
112.194655 1 0 Rx d 8 00 00 00 00 00 00 06 32
112.395403 1 0 Rx d 8 00 00 00 00 00 00 06 66
112.596067 1 0 Rx d 8 00 00 00 00 00 00 06 98
112.797115 1 0 Rx d 8 00 00 00 00 00 00 06 CC
112.998086 1 0 Rx d 8 00 00 00 00 00 00 06 FE
113.198865 1 0 Rx d 8 00 00 00 00 00 00 07 32
113.400050 1 0 Rx d 8 00 00 00 00 00 00 07 66
113.600803 1 0 Rx d 8 00 00 00 00 00 00 07 98
113.801155 1 0 Rx d 8 00 00 00 00 00 00 07 CC
114.001391 1 0 Rx d 8 00 00 00 00 00 00 07 FE
114.201901 1 0 Rx d 8 00 00 00 00 00 00 08 32
114.402790 1 0 Rx d 8 00 00 00 00 00 00 08 66
114.603954 1 0 Rx d 8 00 00 00 00 00 00 08 98
114.804511 1 0 Rx d 8 00 00 00 00 00 00 08 CC
115.005461 1 0 Rx d 8 00 00 00 00 00 00 08 FE
115.205821 1 0 Rx d 8 00 00 00 00 00 00 09 32
115.406250 1 0 Rx d 8 00 00 00 00 00 00 09 66
115.607421 1 0 Rx d 8 00 00 00 00 00 00 09 98
115.808089 1 0 Rx d 8 00 00 00 00 00 00 09 CC
116.009056 1 0 Rx d 8 00 00 00 00 00 00 00 00
116.209651 1 0 Rx d 8 00 00 00 00 00 00 00 00
116.410167 1 0 Rx d 8 00 00 00 00 00 00 00 00
116.611063 1 0 Rx d 8 00 00 00 00 00 00 00 00
116.811256 1 0 Rx d 8 00 00 00 00 00 00 00 00
117.012597 1 0 Rx d 8 00 00 00 00 00 00 00 00
117.213027 1 0 Rx d 8 00 00 00 00 00 00 00 00
117.413256 1 0 Rx d 8 00 00 00 00 00 00 00 00
117.614268 1 0 Rx d 8 00 00 00 00 00 00 00 00
117.814815 1 0 Rx d 8 00 00 00 00 00 00 00 00
118.015806 1 0 Rx d 8 00 00 00 00 00 00 00 00
118.216912 1 0 Rx d 8 00 00 00 00 00 00 00 00
118.418089 1 0 Rx d 8 00 00 00 00 00 00 00 00
118.618550 1 0 Rx d 8 00 00 00 00 00 00 00 00
118.818990 1 0 Rx d 8 00 00 00 00 00 00 00 00
119.019524 1 0 Rx d 8 00 00 00 00 00 00 00 00
119.220232 1 0 Rx d 8 00 00 00 00 00 00 00 00
119.420674 1 0 Rx d 8 00 00 00 00 00 00 00 00
119.621843 1 0 Rx d 8 00 00 00 00 00 00 00 00
119.822228 1 0 Rx d 8 00 00 00 00 00 00 00 00
120.022790 1 0 Rx d 8 00 00 00 00 00 00 00 00
120.223192 1 0 Rx d 8 00 00 00 00 00 00 00 00
120.423809 1 0 Rx d 8 00 00 00 00 00 00 00 00
120.624120 1 0 Rx d 8 00 00 00 00 00 00 00 00
120.824613 1 0 Rx d 8 00 00 00 00 00 00 00 00
121.025275 1 0 Rx d 8 00 00 00 00 00 00 0E FE
121.226319 1 0 Rx d 8 00 00 00 00 00 00 0F 32
121.426558 1 0 Rx d 8 00 00 00 00 00 00 0F 66
121.626928 1 0 Rx d 8 00 00 00 00 00 00 0F 98
121.828060 1 0 Rx d 8 00 00 00 00 00 00 0F CC
122.028432 1 0 Rx d 8 00 00 00 00 00 00 0F FE
122.229625 1 0 Rx d 8 00 00 00 00 00 00 10 32
122.430282 1 0 Rx d 8 00 00 00 00 00 00 10 66
122.631873 1 0 Rx d 8 00 00 00 00 00 00 10 98
122.832576 1 0 Rx d 8 00 00 00 00 00 00 10 CC
123.033001 1 0 Rx d 8 00 00 00 00 00 00 10 FE
123.234495 1 0 Rx d 8 00 00 00 00 00 00 11 32
123.435161 1 0 Rx d 8 00 00 00 00 00 00 11 66
123.635467 1 0 Rx d 8 00 00 00 00 00 00 11 98
123.835958 1 0 Rx d 8 00 00 00 00 00 00 11 CC
124.036727 1 0 Rx d 8 00 00 00 00 00 00 11 FE
124.237496 1 0 Rx d 8 00 00 00 00 00 00 12 32
124.438549 1 0 Rx d 8 00 00 00 00 00 00 12 66
124.639374 1 0 Rx d 8 00 00 00 00 00 00 12 98
124.840097 1 0 Rx d 8 00 00 00 00 00 00 12 CC
125.041013 1 0 Rx d 8 00 00 00 00 00 00 13 00
125.241904 1 0 Rx d 8 00 00 00 00 00 00 13 32
125.442917 1 0 Rx d 8 00 00 00 00 00 00 13 66
125.643483 1 0 Rx d 8 00 00 00 00 00 00 13 98
125.843622 1 0 Rx d 8 00 00 00 00 00 00 13 CC
126.044017 1 0 Rx d 8 00 00 00 00 00 00 00 00
126.244416 1 0 Rx d 8 00 00 00 00 00 00 00 00
126.445959 1 0 Rx d 8 00 00 00 00 00 00 00 00
126.646576 1 0 Rx d 8 00 00 00 00 00 00 00 00
126.847412 1 0 Rx d 8 00 00 00 00 00 00 00 00
127.048014 1 0 Rx d 8 00 00 00 00 00 00 00 00
127.248629 1 0 Rx d 8 00 00 00 00 00 00 00 00
127.449846 1 0 Rx d 8 00 00 00 00 00 00 00 00
127.650202 1 0 Rx d 8 00 00 00 00 00 00 00 00
127.851016 1 0 Rx d 8 00 00 00 00 00 00 00 00
128.051902 1 0 Rx d 8 00 00 00 00 00 00 00 00
128.252600 1 0 Rx d 8 00 00 00 00 00 00 00 00
128.453022 1 0 Rx d 8 00 00 00 00 00 00 00 00
128.654185 1 0 Rx d 8 00 00 00 00 00 00 00 00
128.854959 1 0 Rx d 8 00 00 00 00 00 00 00 00
129.055530 1 0 Rx d 8 00 00 00 00 00 00 00 00
129.256566 1 0 Rx d 8 00 00 00 00 00 00 00 00
129.457080 1 0 Rx d 8 00 00 00 00 00 00 00 00
129.657467 1 0 Rx d 8 00 00 00 00 00 00 00 00
129.857955 1 0 Rx d 8 00 00 00 00 00 00 00 00
130.059113 1 0 Rx d 8 00 00 00 00 00 00 00 00
130.259252 1 0 Rx d 8 00 00 00 00 00 00 00 00
130.459873 1 0 Rx d 8 00 00 00 00 00 00 00 00
130.660599 1 0 Rx d 8 00 00 00 00 00 00 00 00
130.861485 1 0 Rx d 8 00 00 00 00 00 00 00 00
131.062073 1 0 Rx d 8 00 00 00 00 00 00 0E 00
131.262526 1 0 Rx d 8 00 00 00 00 00 00 0C 00
131.462733 1 0 Rx d 8 00 00 00 00 00 00 0A 00
131.663177 1 0 Rx d 8 00 00 00 00 00 00 08 00
131.863776 1 0 Rx d 8 00 00 00 00 00 00 06 00
132.064142 1 0 Rx d 8 00 00 00 00 00 00 04 00
132.264373 1 0 Rx d 8 00 00 00 00 00 00 02 00
132.464682 1 0 Rx d 8 00 00 00 00 00 00 00 00
132.665303 1 0 Rx d 8 00 00 00 00 00 00 00 32
132.866158 1 0 Rx d 8 00 00 00 00 00 00 00 66
133.067404 1 0 Rx d 8 00 00 00 00 00 00 00 98
133.267706 1 0 Rx d 8 00 00 00 00 00 00 00 CC
133.468282 1 0 Rx d 8 00 00 00 00 00 00 01 00
133.668586 1 0 Rx d 8 00 00 00 00 00 00 01 32
133.869893 1 0 Rx d 8 00 00 00 00 00 00 01 66
134.071618 1 0 Rx d 8 00 00 00 00 00 00 01 98
134.271874 1 0 Rx d 8 00 00 00 00 00 00 01 CC
134.472741 1 0 Rx d 8 00 00 00 00 00 00 02 00
134.673589 1 0 Rx d 8 00 00 00 00 00 00 02 32
134.873876 1 0 Rx d 8 00 00 00 00 00 00 02 66
135.074141 1 0 Rx d 8 00 00 00 00 00 00 02 98
135.275159 1 0 Rx d 8 00 00 00 00 00 00 02 CC
135.475463 1 0 Rx d 8 00 00 00 00 00 00 03 00
135.676395 1 0 Rx d 8 00 00 00 00 00 00 03 32
135.876701 1 0 Rx d 8 00 00 00 00 00 00 03 66
136.077738 1 0 Rx d 8 00 00 00 00 00 00 00 00
136.278293 1 0 Rx d 8 00 00 00 00 00 00 00 00
136.479223 1 0 Rx d 8 00 00 00 00 00 00 00 00
136.680161 1 0 Rx d 8 00 00 00 00 00 00 00 00
136.881016 1 0 Rx d 8 00 00 00 00 00 00 00 00
137.081840 1 0 Rx d 8 00 00 00 00 00 00 00 00
137.282072 1 0 Rx d 8 00 00 00 00 00 00 00 00
137.482806 1 0 Rx d 8 00 00 00 00 00 00 00 00
137.683252 1 0 Rx d 8 00 00 00 00 00 00 00 00
137.884308 1 0 Rx d 8 00 00 00 00 00 00 00 00
138.085017 1 0 Rx d 8 00 00 00 00 00 00 00 00
138.285723 1 0 Rx d 8 00 00 00 00 00 00 00 00
138.486456 1 0 Rx d 8 00 00 00 00 00 00 00 00
138.686668 1 0 Rx d 8 00 00 00 00 00 00 00 00
138.887913 1 0 Rx d 8 00 00 00 00 00 00 00 00
139.088562 1 0 Rx d 8 00 00 00 00 00 00 00 00
139.289008 1 0 Rx d 8 00 00 00 00 00 00 00 00
139.489823 1 0 Rx d 8 00 00 00 00 00 00 00 00
139.690118 1 0 Rx d 8 00 00 00 00 00 00 00 00
139.890810 1 0 Rx d 8 00 00 00 00 00 00 00 00
140.091141 1 0 Rx d 8 00 00 00 00 00 00 00 00
140.291975 1 0 Rx d 8 00 00 00 00 00 00 00 00
140.492297 1 0 Rx d 8 00 00 00 00 00 00 00 00
140.692478 1 0 Rx d 8 00 00 00 00 00 00 00 00
140.892742 1 0 Rx d 8 00 00 00 00 00 00 00 00
141.093225 1 0 Rx d 8 00 00 00 00 00 00 08 98
141.293667 1 0 Rx d 8 00 00 00 00 00 00 08 CC
141.494396 1 0 Rx d 8 00 00 00 00 00 00 08 FE
141.695062 1 0 Rx d 8 00 00 00 00 00 00 09 32
141.895284 1 0 Rx d 8 00 00 00 00 00 00 09 66
142.095960 1 0 Rx d 8 00 00 00 00 00 00 09 98
142.297025 1 0 Rx d 8 00 00 00 00 00 00 09 CC
142.497415 1 0 Rx d 8 00 00 00 00 00 00 09 FE
142.697700 1 0 Rx d 8 00 00 00 00 00 00 0A 32
142.898924 1 0 Rx d 8 00 00 00 00 00 00 0A 66
143.100212 1 0 Rx d 8 00 00 00 00 00 00 0A 98
143.300484 1 0 Rx d 8 00 00 00 00 00 00 0A CC
143.501588 1 0 Rx d 8 00 00 00 00 00 00 0A FE
143.701901 1 0 Rx d 8 00 00 00 00 00 00 0B 32
143.902828 1 0 Rx d 8 00 00 00 00 00 00 0B 66
144.103297 1 0 Rx d 8 00 00 00 00 00 00 0B 98
144.304179 1 0 Rx d 8 00 00 00 00 00 00 0B CC
144.504702 1 0 Rx d 8 00 00 00 00 00 00 0B FE
144.704983 1 0 Rx d 8 00 00 00 00 00 00 0C 32
144.906176 1 0 Rx d 8 00 00 00 00 00 00 0C 66
145.107253 1 0 Rx d 8 00 00 00 00 00 00 0C 98
145.307433 1 0 Rx d 8 00 00 00 00 00 00 0C CC
145.508039 1 0 Rx d 8 00 00 00 00 00 00 0C FE
145.708326 1 0 Rx d 8 00 00 00 00 00 00 0D 32
145.909264 1 0 Rx d 8 00 00 00 00 00 00 0D 66
146.111036 1 0 Rx d 8 00 00 00 00 00 00 0D 98
End TriggerBlock

View File

@@ -0,0 +1,62 @@
#include <iostream>
#include "complex_service.h"
void CTrunkExampleService::Initialize(const sdv::u8string& /*ssObjectConfig*/)
{
m_eStatus = sdv::EObjectStatus::initializing;
// Request the basic service for speed.
auto pSpeedSvc = sdv::core::GetObject("Vehicle.Speed_Service").GetInterface<vss::Vehicle::SpeedService::IVSS_GetSpeed>();
if (pSpeedSvc)
{
// Register speed change event handler.
pSpeedSvc->RegisterOnSignalChangeOfVehicleSpeed(static_cast<vss::Vehicle::SpeedService::IVSS_SetSpeed_Event*> (this));
}
// Request the basic service for opening the trunk
m_pTrunkSvc = sdv::core::GetObject("Vehicle.Body.Trunk_Service").GetInterface<vss::Vehicle::Body::TrunkService::IVSS_SetOpen>();
if ((!pSpeedSvc) || (!m_pTrunkSvc))
{
SDV_LOG_ERROR("Could not get interfaces : [CTrunkExampleService]");
m_eStatus = sdv::EObjectStatus::initialization_failure;
return;
}
m_eStatus = sdv::EObjectStatus::initialized;
}
sdv::EObjectStatus CTrunkExampleService::GetStatus() const
{
return m_eStatus;
}
void CTrunkExampleService::SetOperationMode(sdv::EOperationMode /*eMode*/)
{
// Not applicable
}
void CTrunkExampleService::Shutdown()
{
// Unregister trunk change event handler.
auto pSpeedSvc = sdv::core::GetObject("Vehicle.Speed_Service").GetInterface<vss::Vehicle::SpeedService::IVSS_GetSpeed>();
if (pSpeedSvc)
pSpeedSvc->UnregisterOnSignalChangeOfVehicleSpeed(static_cast<vss::Vehicle::SpeedService::IVSS_SetSpeed_Event*> (this));
}
void CTrunkExampleService::SetSpeed(float value)
{
m_Speed = value;
}
bool CTrunkExampleService::PopTrunk()
{
if (m_Speed == 0.0)
{
return m_pTrunkSvc->SetOpen(true);
}
return false;
}

View File

@@ -0,0 +1,98 @@
#ifndef TRUNK_COMPLEX_SERVICE_EXAMPLE_H
#define TRUNK_COMPLEX_SERVICE_EXAMPLE_H
#include <iostream>
// SDV framework support
#include <support/component_impl.h>
#include <support/signal_support.h>
// VSS interfaces - located in ../interfaces
#include "../generated/vss_files/vss_vehiclespeed_bs_rx.h"
#include "../generated/vss_files/vss_vehiclebodytrunk_bs_tx.h"
// Complex service trunk interface - located in ../generated/trunk_service
#include "trunkkit.h"
/**
* @brief Open trunk service: opens the trunk if vehicle is not moving
*/
class CTrunkExampleService : public sdv::CSdvObject
, public sdv::IObjectControl
, public vss::Vehicle::SpeedService::IVSS_SetSpeed_Event
, public ITrunkKitService
{
public:
/**
* @brief Constructor
*/
CTrunkExampleService(){}
/**
* @brief Destructor
*/
~CTrunkExampleService()
{
// Just in case...
Shutdown();
}
// Interface map
BEGIN_SDV_INTERFACE_MAP()
SDV_INTERFACE_ENTRY(sdv::IObjectControl)
SDV_INTERFACE_ENTRY(vss::Vehicle::SpeedService::IVSS_SetSpeed_Event)
SDV_INTERFACE_ENTRY(ITrunkKitService)
END_SDV_INTERFACE_MAP()
// Object declarations
DECLARE_OBJECT_CLASS_TYPE(sdv::EObjectType::ComplexService)
DECLARE_OBJECT_CLASS_NAME("Open Trunk Service")
DECLARE_OBJECT_SINGLETON()
/**
* @brief Initialize the object. Overload of sdv::IObjectControl::Initialize.
* @param[in] ssObjectConfig Optional configuration string.
*/
void Initialize(const sdv::u8string& ssObjectConfig) override;
/**
* @brief Get the current status of the object. Overload of sdv::IObjectControl::GetStatus.
* @return Return the current status of the object.
*/
sdv::EObjectStatus GetStatus() const override;
/**
* @brief Set the component operation mode. Overload of sdv::IObjectControl::SetOperationMode.
* @param[in] eMode The operation mode, the component should run in.
*/
void SetOperationMode(sdv::EOperationMode eMode) override;
/**
* @brief Shutdown called before the object is destroyed. Overload of sdv::IObjectControl::Shutdown.
*/
void Shutdown() override;
/**
* @brief Set vehicleSpeed signal
* @param[in] value vehicleSpeed
*/
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
* @return Returns whether the trunk could be opened or not.
*/
virtual bool PopTrunk() override;
private:
sdv::EObjectStatus m_eStatus = sdv::EObjectStatus::initialization_pending; ///< Current object status
float m_Speed = 0.0; ///< Speed
vss::Vehicle::Body::TrunkService::IVSS_SetOpen* m_pTrunkSvc = nullptr; ///< Trunk
};
DEFINE_SDV_OBJECT(CTrunkExampleService)
#endif // !define TRUNK_COMPLEX_SERVICE_EXAMPLE_H

View File

@@ -0,0 +1,16 @@
/*******************************************************************************
* @file trunkkit.idl
* @details Service interface definition to open the trunk.
*/
/**
* @brief Service to open the trunk
*/
interface ITrunkKitService
{
/**
* @brief Save call to open the trunk. Opening the trunk is onkly allowed when the vehicle is not moving
* @return Returns whether the trunk could be opened or not.
*/
boolean PopTrunk();
};

View File

@@ -0,0 +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;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
1 Class name Function name Signal name vss Signal direction type DBC CAN name includes CAN message name
2
3 VD VehicleSpeed Speed vehicleSpeed Vehicle.Speed RX float CAN_Input.Speed
4 VD VehicleTrunk Open trunk Vehicle.Body.Trunk TX boolean CAN_Output.OpenTrunk
5 BS VehicleSpeed Speed vehicleSpeed Vehicle.Speed RX float Vehicle.Speed
6 BS VehicleTrunk Open trunk Vehicle.Body.Trunk TX boolean Vehicle.Body.Trunk