Changelog
All notable changes to the Vector SIL Kit project shall be documented in this file.
The format is based on Keep a Changelog (http://keepachangelog.com/en/1.0.0/).
[4.0.54] - 2024-11-11
Added
Override the labels of
DataPublisher
,DataSubscriber
,RpcClient
, andRpcServer
instances through the participant configuration, extending the already possible override of the topic / function name.
Changed
Changed log messages for controller and participant creation, message tracing, system state tracker and time sync service
Revised the documentation (demos, troubleshooting, doxygen output, file structure)
Improved platform/compiler/architecture detection
Fixed
Failure to configure and package cross-builds to QNX on Windows
[4.0.53] - 2024-10-11
Changed
Harmonized user interface of commandline utilities Registry, Monitor, and SystemController.
All utilities listen to OS signals to detect termination request.
Old: Monitor and Registry wait for the user to press
[Enter]
to shutdown.New: Monitor and Registry can be requested to shutdown via
[Ctrl]-[C]
. Registry option-s, --use-signal-handler
is deprecated.
All utilities no longer require user interaction.
Old: Registry, Monitor and System Controller prompt the user by default to press
[Enter]
to end process after shutdown.New: All utilities terminate without prompting for user input. SystemController option
-ni, --non-interactive
is deprecated.
The Logger now adds the participant’s name (as a normalized string) to the user-defined
LogName
for file sinks.Implemented the union (de-)serialization stubs in the
silkit/util/serdes
headers.
Fixed
If using the
SimStepHandlerAsync
, the log message that reports the end of the simulation step is now printed after the call toCompleteSimulationStep
.Fixed an issue with the NetSim API that caused an exception when used with log level
trace
.
[4.0.52] - 2024-09-02
Fixed
Fixed crash in
sil-kit-registry
utility that happened when the dashboard is enabled, but not actually available.
Added
Message aggregation for simulations with time synchronization. Accessible via the experimental section in the Participant Configuration (Experimental | TimeSynchronization | EnableMessageAggregation).
[4.0.51] - 2024-07-18
Added
Couple the virtual time to the wall clock. An animation factor can be configured that describes how fast the simulation is allowed to run relative to the local wall clock. Accessible via a new experimental section in the Participant Configuration (Experimental | TimeSynchronization | AnimationFactor).
Event flow documentation for the Network Simulation API.
Registry (Dashboard): Automatically use bulk-endpoint if it is available
Configuration option for structured logging in JSON format
[4.0.50] - 2024-05-15
This is a Quality Assured Release.
Fixed
Fixed crash in
sil-kit-system-controller
utility.Fixed source directory contents in
.zip
release archives.
[4.0.49] - 2024-05-08
Changed
SystemController utility: Listens for OS signals to end simulation: Press
[Ctrl]-[C]
(SigInt) instead of[Enter]
to end simulation. Better reports about the current system state in case of Error.
Fixed
Valid state transition from
Aborting
toShutdown
no longer emits a warning message.
Added
Participant Configuration: Support include semantics in participant configuration files/strings.
Network Simulation: Experimental API for custom simulation of CAN, LIN, Ethernet and FlexRay networks.
[4.0.48] - 2024-04-15
Changed
We now use a linker script to limit the exported symbol visibility to the public C API and some legacy C++ symbols.
The
--enable-dashboard
CLI parameter for the registry is now a no-op. It is now activated when using--dashboard-uri
or via the registry configuration.
Fixed
Fix MinGW build.
Various fixes for dashboard integration.
Added
Man pages for linux.
All public struct members are now included by default in the documentation.
[4.0.47] - 2024-03-01
Fixed
Fixed building from the packaged sources (
SilKit-Source
).LIN Demo: Removed duplicate call to StartLifecyle when run as the LIN slave
[4.0.46] - 2024-02-27
Fixed
Added the
*.manifest
files to the source distribution. Building from theSilKit-Source
directory in the distributed.zip
files was broken.Update
yaml-cpp
to version 0.8.0 to fix linker errors caused by a missing symbol.The system controller utility now logs parts of the command line output using the logger object of the participant.
Added
Added a
--log
option to the system controller utility which cannot be used together with the--configuration
option. It provides a shortcut to set the log level of the utility.Utilities: prepare the registry for handling multiple simulations
Added a licensecheck to prevent source files without a license header
[4.0.45] - 2024-02-06
Fixed
Registry failed to start correctly, if the dashboard is enabled, but the registry is letting the system determine the listening port, e.g., when using a URI like
silkit://localhost:0
.
Changed
Add links to API sections in the documentation overview
Added
RPC usage example with lifecycle
Windows: Utilities and demos are now compiled with a manifest that sets the active codepage to UTF-8. The required commands to change the output codepage of the Windows console in
cmd
or PowerShell are documented in a new FAQ entry.
[4.0.44] - 2024-01-22
Fixed
Changing the TCP send and receive buffer size failed on Windows
Added
Links to related SIL Kit projects in documentation and github Readme
[4.0.43] - 2023-12-12
Fixed
Dashboard can be enabled using CLI arguments
Demos did not terminate when simulation is aborted (AbortSimulation)
Fix order of debug log message parameters
[4.0.42] - 2023-11-29
Changed
LIN Demo: Adapted the schedule of the LIN Master and disallowed sending while in wrong controller state.
[4.0.41] - 2023-11-28
Fixed
Potential deadlock when switching to virtual time-synchronization while replay is in use
[4.0.40] - 2023-11-27
Added
Allow configuration of the connection timeout (
Middleware/ConnectTimeoutSeconds
)
Changed
Improved the documentation of Data Pub/Sub controllers
Improved the documentation of RPC controllers
Fixed
The LIN demo does not skip the first entry (sending frame 16) on all but the first iteration through the schedule anymore.
The name of the domain-socket used by the registry will use the hostname passed in the listen URI, not the resolved IP address (if any), for generating the name of the domain-socket.
When mixing autonomous participants without time-synchronization, and participants with time-synchronization, the timestamps for messages received before the virtual time is started, is now the ‘invalid’ timestamp value, normally used by participants without time-synchronization.
Reworked the pause/continue logic such that it pauses the virtual time synchronization without blocking the I/O thread.
[4.0.39] - 2023-11-14
Fixed
Replaced remaining mentions of integrators with users.
Added
Usage examples for tracing and replay.
Timeouts per connection attempt.
Two-sided connection establishment: Allow direct connections, even if connections are only possible in one direction.
[4.0.38] - 2023-11-02
Fixed
The dashboard now handles AbortSimulation.
The dashboard resolves the registry IP address if needed.
Added
Reintroduced build requirements to documentation
Changed
Consolidate SIL Kit tests into four executables
[4.0.37] - 2023-10-17
Changed
Reworked the documentation on Virtual Time Synchronization
The documentation of the demo section now refers to the pre built Vector SIL Kit packages and not to a source build.
[4.0.36] - 2023-09-19
Added
Documentation on
DashboardUri
Fixed
Fixed misbehavior of the sil-kit-system-controller in interactive mode on user input:
The sil-kit-system-controller now triggers a Stop() in SystemState::Running or SystemState::Paused.
The sil-kit-system-controller only triggers AbortSimulation when not SystemState::Running, SystemState::Paused, SystemState::Shutdown or SystemState::Aborting.
Changed
Performance improvement of the internal serialization
The final state handling of the sil-kit-system-controller in interactive mode on user input has changed:
Old: The sil-kit-system-controller triggered AbortSimulation if the finalState was not received after 5s.
New: The sil-kit-system-controller retries receiving the finalState 3x5s. If this fails, the sil-kit-system-controller triggers AbortSimulation (if not already happened) and tries receiving the finalState 3x5s again. If this fails, the sil-kit-system-controller just terminates.
[4.0.35] - 2023-09-04
Added
Memory management documentation introduced.
Integration tests for communication in the stop/shutdown/abort handlers.
Changed
When building the SIL Kit documentation, the sphinx build command is no longer called in a pipenv.
Fixed
Ensured that calling
ISystemController::AbortSimulation()
does not lead to the system controller terminating prior to other participants receiving its abort message.Ensure that userContext field for external CanFrameTransmitEvents is always null.
Fixed warning in VS2017 (x86) build
[4.0.34] - 2023-08-21
Changed
Behavior change of
ParticipantState::Error
Old: Several situations could lead to an
ParticipantState::Error
before the user calledStartLifecycle()
Reception of an invalid
WorkflowConfiguration
Remote participant disconnected
Reception of
AbortSimulation
New:
ParticipantState::Error
should only be reached afterStartLifecycle()
was calledReception of a WorkflowConfiguration is not validated before
StartLifecycle()
A disconnected remote participant is only transitioned to
ParticipantState::Error
if he had a started LifecycleReaction on
SystemCommang::AbortSimulation
is deferred beforeStartLifecycle()
(see below)
Behavior change of
SystemCommand::AbortSimulation
Old: Reception of
AbortSimulation
beforeStartLifecycle()
led toParticipantState::Error
New: Reception of
AbortSimulation
beforeStartLifecycle()
is firstly ignored. A later call toStartLifecycle()
then directly leads to an abort (transition toParticipantState::Aborting
, calling theAbortHandler
)
clang presets in
CMakePresets.json
now have the clang version in their namesAdded an internal barrier between
ParticipantState::Shutdown
and setting the final state promise. This ensures that the participant state updates are all transmitted while shutting down.Revised log messages when shutting down / disconnecting participants
Graceful, participant has lifecycle: “Participant <participantName> has disconnected after gracefully shutting down”,
Not graceful, participant has lifecycle: “Participant <participantName> has disconnected without gracefully shutting down.”
Registry shutdown: “Connection to SIL Kit Registry was lost - no new participant connections can be established.”
Participant without lifecycle: “Participant <participantName> has disconnected.”
Fixed
Made simulation time stop for all coordinated participants when one coordinated participant disconnects ungracefully
[4.0.33] - 2023-08-07
Added
New experimental extension of the LIN API that allows a user to send frame headers and respond to them without setting up a static configuration beforehand.
Added link to FMU importer in Readme.md
Changed
Restructured the documentation to have separate sections for overview. It is now divided into an overall introduction, a developer guide, and a user guide.
Removed internal use of exceptions for failing connections to the registry if another connection mechanism succeeded.
Fixed
Fixed missing entry of RegistryAsFallbackProxy in YAML schema.
[4.0.32] - 2023-07-19
This is a Quality Assured Release.
Fixed
Ensure that the registry rejects a connecting participant if a participant with the same name is already connected.
[4.0.31] - 2023-07-10
Added
Improved Lifecycle and TimeSyncService features:
Full support for Operation Mode Autonomous with TimeSyncService including hopping onto / leaving a running simulation
Abort simulation in case Coordinated participants want to join a running simulation
Abort simulation in case an Autonomous with TimeSyncService sees an incompatible participant
Extended integration tests for communication ready guarantees
Fixed
Fixed a bug in internal barriers where in-between connecting participants could break the communicaiton guarantees
Fixed transition when aborting from ErrorState, now the state changes to Shutdown like all aborting paths (formery the transition was to ShuttingDown)
Internal fixes for thread-safety
Fixed that the SimTask cannot be triggered again after calling
ILifecycleService::Stop()
in the SimTask
Changed
CreateLifecycleService with OperationMode::Invalid now throws a ConfigurationError
Improved documentation on how to run demos in asynchronous mode
[4.0.30] - 2023-06-26
Added
Added optional timeout mechanism to RPC service.
Fixed
Fix builds with CMake versions before
3.19
Fixed crash in SilKitRpcDemo when run with
<config> Client --async
without a server.
Changed
SIL Kit Demos (Can, Ethernet, Rpc, Lin, and PubSub) with
--async
now use an autonomous lifecycle.Refactored documentation for participant configurations: The intent was made clearer, noting that it is an optional feature.
[4.0.29] - 2023-06-14
Fixed
Registry: Set windows service state to
stopped
on error
[4.0.28] - 2023-06-02
Added
Added documentation for Data Serialization/Deserialization (SerDes) API
Fixed
Fixed inconsistencies in API documentation
Fixed starting the registry without the
--registry-configuration
parameter
[4.0.27] - 2023-05-30
Changed
Added detection of simulation start and end for the dashboard.
The simulation id initialization is deferred until the first dashboard relevant event happens.
A simulation is considered as ended, when the last participant disconnects.
Added
SIL Kit Registry (
sil-kit-registry(.exe)
)Support for overriding command line settings via a YAML configuration file
[4.0.26] - 2023-05-22
Added
Introducing an internal communication barrier between participant states. This happens in the transition from the states ServicesCreated to CommunicationInitializing and from Stopped to ShuttingDown. It leads to extended communication guarantees in the CommunicationReadyHandler, primarily for participants that use the autonomous lifecycle (see the documentation for details).
Fixed
Corrected spelling mistakes in the documentation
The dashboard is disabled for cross-builds to QNX, to avoid build errors
[4.0.25] - 2023-05-17
This version was skipped due to compatibility issues with dependent projects.
[4.0.24] - 2023-05-04
Known issue: A LIN transmission by a LIN Slave may have a timestamp that is smaller than the LinSendFrameHeaderRequest of the LIN Master that triggered the Slave response.
Added
Header-only C++ API implementation following the hourglass-pattern
The C++ symbols are still provided by the shared library, but are not used by default anymore
If a participant cannot establish a direct connection to another participant, it will fall back to using the registry as a proxy for communications with this particular participant
Support can be disabled on a particular participant using the new “Middleware/RegistryAsFallbackProxy” field in the participant configuration
Fixed
Messages are sent in the same order as the SIL Kit API calls that triggered them, regardless of the thread or handler the API calls were executed from. There are no ordering guarantees for API calls that are executed in parallel from different threads.
[4.0.23] - 2023-04-17
Changed
Added network simulator information to the dashboard REST API
Fixed
Fixed data type of simulation id returned by the dashboard REST API
Ethernet and CAN (Trivial Sim.): The self-delivery with
TransmitDirection::TX
is now triggered only after the frame has been sent withTransmitDirection::RX
.
Removed
Visual Studio 2015 is no longer maintained and therefore not officially supported anymore.
[4.0.22] - 2023-04-05
Fixed
Resolved issue that lead to wrong label matching behavior under certain circumstances.
[4.0.21] - 2023-04-03
Changed
Improved FAQ
Preparation for upcoming tracing / replay
[4.0.20] - 2023-03-20
Changed
Make additional data and rpc information available to the dashboard.
Added
Added frequently asked questions (FAQ) section to documentation.
Modification of BenchmarkDemo: Change the communication topology by modifying the PubSub topics. A participant should only send to a single other participant.
Add LatencyDemo: Measure the average latency between two participants in different processes.
Fixed
C-API: Fixed a bug where the
SilKit_EthernetFrameEvent
delivered in the Ethernet frame handler had theuserContext
field always set tonullptr
, instead of the value passed in the correspondingSilKit_EthernetController_SendFrame
call.C++-API: Fixed a bug where the
userContext
was set in the frame handlers registered on other controllers than the one callingSendFrame
. TheuserContext
is only ever set when a frame event withTransmitDirection::TX
is received, which is only possible on the same controller that sent it.
[4.0.19] - 2023-03-02
Changed
Use function-try-blocks for C-API definitions to reduce indentation and reformat some code for better readability.
Fixed
Allow installing and starting the sil-kit-registry.exe as a Windows Service on Windows Containers during
docker build
steps. The layer creation fails if a domain socket is still active during shutdown of the temporary container. Disables the local-domain sockets of thesil-kit-registry.exe
when running as a Windows Service.When a participant is unable to connect to another participant, the correct error message is logged, and an error is raised.
[4.0.18] - 2023-02-21
Added
Added descriptions to troubleshooting section for common errors.
Changed
Complete the Hourglass implementation of the C++ API used internally for testing.
Fixed
Properly handle IPv6 acceptors in the registry when transmitting to a remote participant
[4.0.17] - 2023-02-09
This is a Quality Assured Release.
Fixed
Fix DNS resolver issues on Ubuntu 18.04 and systemd-resolved. We now properly strip square brackets from IPv6 addresses in URIs.
Fixed a race-condition in the ITest_SystemMonitor. This caused sporadic failures on CI builds.
Removed
Removed the deprecated CMakeSettings.json file from the source tree. If you are a developer, use the CMakePreset.json instead which is more portable and flexible.
Removed usr/share/doc from the delivery packages. This should only be part of Debian packages.
[4.0.16] - 2023-02-03
Changed
Improved error messages when connections between participants/to the registry have failed.
CMake: Reduced weak symbols exported in debug builds.
Allow configuration of acceptor URIs in the participant configuration.
The third party dependencies were updated.
fmt
to version 9.1.0.spdlog
to version 1.11.0.
[4.0.15] - 2023-01-23
Changed
Registry:
Allow running the
sil-kit-registry
as a windows service. In this case, the registry grants others thePROCESS_QUERY_LIMITED_INFORMATION
permission.The registry must be run with the
--windows-service
command line flag. This argument is not shown in the command line usage information available via--help
. This command line flag may be removed in the future.
Docs: Add registry requirement to demos documentation.
CMake: The minimum required CMake version has been bumped to 3.10
[4.0.14] - 2023-01-10
Added
CMake: Prepared cross-compiling for QNX
Changed
Tests: Improved tests regarding configuration parsing
Fixed
Catch and print exceptions when parsing utility CLI arguments
Various issues found by the Address Sanitizer and Thread Sanitizer of Clang 14 are now resolved.
[4.0.13] - 2022-12-14
Changed
PubSub/Rpc: Improved performance in startup-phase when using labels.
Documentation: Configuration structure for PCAP tracing and replay
Fixed
LIN: Previously, only when using the network simulator, the FrameStatusHandler on the LIN Master was not called in case of an unconfigured response (RX_NO_RESPONSE). This inconsistency has been fixed.
Registry
The acceptor URIs the known participants list sent by the registry are now rewritten correctly. Previously, certain startup scenarios only worked when the participants were started in a certain order.
SerDes: Added missing limit library include.
[4.0.12] - 2022-11-24
Fixed
Integration Tests
Linking executables with both, the dynamic library, and certain internal, static library components leads to ODR violations. The ASAN / UBSAN instrumentation from recent Clang versions is able to detect these.
C-API Tests
Fixed some memory leaks in C-API tests.
LIN
Fixed faulty behavior of
ILinController::SendFrame()
forLinFrameResponseType::MasterResponse
. The method now consistently uses the input frame data.
Lifecycle Service
Alleviate potential loss of the ‘stop’ signal issued from the lifecycle service of a participant.
Various fixes related to warnings
Remove duplicate variables in PubSub demo.
Fix ‘D9025: overriding…’ diagnostics in MSVC.
Fix warnings in hourglass code.
Fix cmake configuration on macos.
Properly initialize variable in unit test.
[4.0.11] - 2022-11-18
Changed
Ethernet
The Ethernet controller now quietly pads Ethernet frames with zeros to the minimum size of 60 bytes.
(Re-)added experimental support for PCAP tracing and replay on ethernet controllers. The tracing and replay behavior may change in the future.
Registry
Only exit if neither TCP, nor domain sockets are available.
SIL Kit Library
Changed the default symbol visibility to hidden, which is now also enforced for Linux builds.
Symbols for ASIO are not exported as weak symbols anymore.
Fixed
C: CAN:
Added missing
canId
field to theSilKit_CanFrameTransmitEvent
and bumped the structure version.
[4.0.10] - 2022-11-07
Changed
Documentation
Improved Quickstart Docs and fixed sample code
Updated build instructions for documentation
Logging
Trace-Log was extended with outputs for controller creation.
Default verbosity of lifecycle reduced to debug
Demos: Replaced JSON configuration files with YAML files. The provided configurations did not change.
Extended SilKitDemoBenchmark
Calculates standard deviation for throughput, message rate, speedup
Added
--write-csv
command line argument to output results to csv fileHelper scripts for msg-size-scaling and performance-diff
Changed the lifecycle service to be less verbose in log level info. See log level debug for more detailed information of the lifecycle.
Updated participant configuration file schema and added it to the json schema support. Use .silkit.yaml/json suffix for automated schema support.
[4.0.9] - 2022-10-19
Added
The LinDemo, PubSubDemo, and RpcDemo now allow using
--async
cli flag for unsynchronized execution.
Fixed
C-API:
Data race on static variable
Setting the direction field of the
CanFrameEvent
Initialize the struct header of the embedded
CanFrame
structure in theCanFrameEvent
Immediate shutdown of the asynchronous mode of the LIN demo
[4.0.8] - 2022-10-07
Changed
The third party dependencies were updated.
yaml-cpp
to version 0.7.0.asio
to version 1.24.0.fmt
to version 8.1.1.spdlog
to version 1.10.0.googletest
to version 1.12.1.
The FlexRay controller now issues a warning if the static buffer payload is truncated or padded with zeros, i.e., if the size is not exactly as specified in the controller configuration.
The registry now transmits a diagnostic string when a participant announcement cannot be processed, e.g., because a participant with the same name already exists. The second participant will not time out after a few seconds anymore, but fail much faster.
[4.0.7] - 2022-09-20
Changed
The documentation is now packaged separately in a SilKit-4.0.7-Docs.zip file. This simplifies the CI set up and reproducibility of the generated HTML. To build the documentation you should set up the build environment using pip:
pip3 install -r SilKit/ci/docker/docs_requirements.txt
The source tree is now packaged separately in a SilKit-4.0.7-Source.zip file. The SIL Kit Demos are part of this package.
We no longer have a #if defined(HAVE_FMT) in the silkit/services/logging/ILogger.hpp and variadic logging functions. This define was disabled by default for users and only used internally.
LIN allows sending with an unknown checksum model in master responses, now.
The Pub/Sub Demo was updated to use the internal serialization/deserialization routines.
Fixed
Fix building and linking on macOs. This platform is not part of the continuous test suite.
Fix to allow setting the hard and soft watchdog timeouts in the HealthCheck separately.
[4.0.6] - 2022-09-06
Changed
Removed an empty directory from the packages
Updated the description of SIL Kit in the top-level README.rst
Fixed
Clean up peers after a remote participant disconnects
Windows: Fixed the internal name and original filename attributes of the
sil-kit-monitor.exe
[4.0.5] - 2022-08-25 Initial public release (quality assured release)
This is the first public open source release of the Vector SIL Kit.
Starting with this version, Vector SIL Kit will provide longterm API, ABI, and network compatibility. Note that prior versions do not provide this compatibility.
[4.0.4] - 2022-08-22
Compatibility with 4.0.3
Application binary interface (ABI): Yes
Application software interface (API): No
Middleware network protocol: No
Changed
Utility (SerDes)
SilKit/include/silkit/util/serdes/Serialization.hpp
:The media type for PubSub was changed from
application/vnd.vector.sil.data; protocolVersion=1
toapplication/vnd.vector.silkit.data; protocolVersion=1
The media type for RPC was changed from
application/vnd.vector.sil.rpc; protocolVersion=1
toapplication/vnd.vector.silkit.rpc; protocolVersion=1
LIN
SilKit_LinChecksumModel_Undefined
was renamed toSilKit_LinChecksumModel_Unknown
.
C: Orchestration
SilKit_LifecycleService_Stop
was added to the C-API. This corresponds toSilKit::Services::Orchestration::ILifecycleService::Stop
.
C: Ethernet
Frames delivered in user-provided
SilKit_EthernetFrameHandler
functions had an invalid payload delivered. This was fixed, the frame is now correctly delivered. The error only occured in the C API, the C++ API correctly delivered the entire frame.
[4.0.3] - 2022-08-22
Compatibility with 4.0.2
Application binary interface (ABI): No
Application software interface (API): No
Middleware network protocol: Yes
Added
LIN
SilKit/include/silkit/services/lin/ILinController.hpp
:The new method SetFrameResponse allows LIN nodes to adjust their LIN response configuration during operation (i.e., after Init()). Calls to SetFrameResponse trigger the LinSlaveConfigurationHandler on the LIN master.
The LIN types LinChecksumModel::Unknown and / or LinDataLengthUnknown now have wildcard functionality for nodes configured with LinFrameResponseMode::RX on that id. The first transmission will set the checksum model and / or data length.
CAN
Added
SilKit_CanTransmitStatus_DefaultMask
.
Ethernet
Added
SilKit_EthernetTransmitStatus_DefaultMask
.
Changed
LIN
SilKit/include/silkit/services/lin/ILinController.hpp
:The methods AddLinSlaveConfigurationHandler, RemoveLinSlaveConfigurationHandler, GetSlaveConfiguration and related data structures LinSlaveConfigurationEvent, LinSlaveConfigurationHandler and LinSlaveConfiguration have been moved to the experimental namespace and now reside in
SilKit/include/silkit/experimental/services/lin/LinControllerExtensions.hpp
.LinChecksumModel::Undefined is renamed to LinChecksumModel::Unknown.
Utility
Moved the headers from
silkit/util/serdes/sil/*.hpp
tosilkit/util/serdes/*.hpp
.
CAN
Removed unused
SilKit_CanTransmitStatus_DuplicatedTransmitId
andSilKit::Services::Can::CanTransmitStatus::DuplicatedTransmitId
enumerators.
Ethernet
Removed unused
SilKit_EthernetTransmitStatus_DuplicatedTransmitId
andSilKit::Services::Ethernet::EthernetTransmitStatus::DuplicatedTransmitId
enumerators.
FlexRay
Renamed
FlexrayHeader::HeaderFlag
toFlexrayHeader::Flag
and introducedFlexrayHeader::FlagMask
.
RPC
Renamed
RpcSpec::Topic
toRpcSpec::FunctionName
.Renamed enumerators
SilKit_CallStatus_UPPER_SNAKE_CASE
toSilKit_RpcCallStatus_PascalCase
.
Removed
Orchestration
Removed the deprecated
ITimeSyncService::SetSimulationStepHandler
handler which took a handler function without theduration
argument.
FlexRay
Removed the convenience functions
FlexrayHeader::IsSet
,FlexrayHeader::Clear
, andFlexrayHeader::Set
.
Fixed
Coordinated, but non-required participants that received the required participant list before calling ILifecycleService::StartLifecycle() did not go to the error state.
[4.0.2] - 2022-08-15
Compatibility with 4.0.1
Application binary interface (ABI): Yes
Application software interface (API): Yes
Middleware network protocol: Yes
Changed
SilKit will now build on NetBSD (currently not tested automatically)
[4.0.1] - 2022-08-15
Compatibility with 4.0.0
Application binary interface (ABI): No
Application software interface (API): Yes
Middleware network protocol: Yes
Changed
The calling convention used in the C-API was changed to
cdecl
on 32-bit Windows.
Removed
The
sil-kit-registry
command line argument--configuration
was removed.
[4.0.0] - 2022-08-11
Compatibility with 3.99.30
Application binary interface (ABI): No
Application software interface (API): No
Middleware network protocol: No
Added
Added the
SILKIT_ENABLE_COVERAGE
CMake option for adding code-coverage compiler flags when building with GCC or Clang.
Changed
Added an CLI argument to sil-kit-system-controller to run it without user interaction (–non-interactive or -ni)
Participants to not go to ParticipantState::Error anymore when the system state changes to SystemState::Error
Removed
Removed various demos (CCan, CEthernet, CFlexray, CLin, Lifecycle, and TimeAnnotation) as they were meant for testing
Removed benchmark demo
Fixed
The sil-kit-system-controller crashed when any button was pressed. This is fixed.
[3.99.30] - 2022-08-09
Compatibility with 3.99.29
Application binary interface (ABI): No
Application software interface (API): No
Middleware network protocol: No
Changed
Using the same name controller name (canonicalName parameter in Create*Controller) in different networks (network parameter in Create*Controller) is no longer allowed. Controller creation now requires unique controller names within the same controller type. Any violation of this rule causes a ConfigurationError.
PubSub/Rpc: Both sides (clients and servers, publishers and subscribers) now can specify the matching behavior of individual labels. This is done via the kind field of a MatchingLabel which has to be specified when using AddLabel. The Label struct has been is removed. Additionally, the SilKit::Services::MatchingLabel::Kind::Preferred has been renamed to SilKit::Services::MatchingLabel::Kind::Optional.
RPC
Added new
RpcCallStatus::InternalServerError
andSilKit_CallStatus_INTERNAL_SERVER_ERROR
.IRpcClient::Call
now takes an additionaluserContext
parameter and does not return aIRpcCallHandle *
anymore. TheuserContext
is presented in theRpcCallReturnHandler
in theRpcCallReturnEvent
structure instead of thecallHandle
.
Remove the unused and outdated synchronized parameter from SilKit_Participant_Create.
Add and use opaque SilKit_ParticipantConfiguration type for use in SilKit_Participant_Create.
C: Added
SilKitCALL
andSilKitFPTR
macros for specification of the calling convention when building for windows.Participants cannot be configured to be coordinated if they are not required as well. In case of this combination, an exception is thrown.
IParticipant.hpp
Functionality to aquire a controller by calling Create* twice is removed. All methods for controller creation (Bus systems, PubSub, Rpc) now no longer return the cached controller pointer if called with same name and network, but throw a ConfiguraionError.The suffix ‘T’ has been removed in all handler identifiers (mainly ‘using’-statements, e.g. ‘DataMessageHandler’ -> ‘DataMessageHandlerT’).
Renamed file
SilKit/include/silkit/services/orchestration/SyncDatatypes.hpp
toOrchestrationDatatypes.hpp
.Participants may not be coordinated and not part of the required participants list
Currently, this will lead to an exception
Lifecycle service changes
Instead of booleans, the
Service::Orchestration::LifecycleConfiguration
now comprises a single enumeratorOperationMode
that defines if a participant coordinates its state transition with others or if it runs autonomously.Most SystemCommands and all ParticipantCommands were removed.
Participants will not wait for a commands to Initialize, Run, Stop, or Shutdown anymore. Instead, coordinated participants will react to system state changes.
Instead of calling ISystemController::Stop(), any required participant can stop all coordinated participants by calling ILifecycleService::Stop().
Autonomous participants must call ILifeCycleService::Stop() by themselves.
All participants that arrive at the
Stopped
state now continue toShutdown
(viaShuttingDown
)The
Service::Orchestration::LifecycleConfiguration
must now be provided in IParticipant::CreateLifecycleService() instead of ILifecycleService::StartLifecycle()
Added
The C API now has methods to aquire SIL Kit version information in
SilKit/include/silkit/capi/Version.h
:SilKitAPI SilKit_ReturnCode SilKit_Version_Major(uint32_t* outVersionMajor); SilKitAPI SilKit_ReturnCode SilKit_Version_Minor(uint32_t* outVersionMinor); SilKitAPI SilKit_ReturnCode SilKit_Version_Patch(uint32_t* outVersionPatch); SilKitAPI SilKit_ReturnCode SilKit_Version_BuildNumber(uint32_t* outVersionBuildNumber); SilKitAPI SilKit_ReturnCode SilKit_Version_String(const char** outVersionString); SilKitAPI SilKit_ReturnCode SilKit_Version_VersionSuffix(const char** outVersionVersionSuffix); SilKitAPI SilKit_ReturnCode SilKit_Version_GitHash(const char** outVersionGitHash);
Removed
SilKit/include/silkit/services/ethernet/EthernetDatatypes.hpp
: Removed fieldMacAdress
fromEthernetFrameTransmitEvent
.
[3.99.29] - 28-07-2022
Compatibility with 3.99.28
Application binary interface (ABI): No
Application software interface (API): No
Middleware network protocol: Yes
Added
Added a
SetCommunicationReadyHandlerAsync
method to the lifecycle interfaces. It will invoke theCommunicationReadyHandler
callback in a separate thread. This allows the user to do early communication in a simulation run, for example, to exchange configuration values before the actual simulation starts. The user is required to callCompleteCommunicationReadyHandlerAsync
when the handler is finished.
Changed
Changed access to Logger so that it can be obtained at every time
IntegrationBus/include/silkit/participant/IParticipant.hpp
old:
virtual auto CreateLogger() -> Services::Logging::ILogger* = 0;
new:
virtual auto GetLogger() -> Services::Logging::ILogger* = 0;
sil-kit-registry
now has an addition argument--generate-configuration
which can be used in CI environments together with a OS generated port in the URI (i.e.silkit://localhost:0
) to create a basic configuration file containing the actual port on which the registry is reachable.
[3.99.28] - 2022-07-26
Compatibility with 3.99.27
Application binary interface (ABI): No
Application software interface (API): No
Middleware network protocol: No
Changed
LIN: API Overhaul
Changed behavior of
ILinController::SendFrame()
andILinController::SendFrameHeader()
: Both now don’t use cached responsed but send the LinHeader to the responding LIN node and use the TxBuffer there.The method
ILinController::SetFrameResponse()
andILinController::SetFrameResponses()
have been removed. LIN controllers now have to hand in their final reponse configuration (Tx/Rx) inILinController::Init()
and can’t reconfigure their configuration afterwards. An exception is the LIN master when usingILinController::SendFrame()
withLinFrameResponseType::MasterResponse
orLinFrameResponseType::SlaveResponse
, which reconfigures the LIN master during operation.The new method
ILinController::UpdateTxBuffer()
can be used to update the payload for a certain LIN ID, but does not change the response configuration.The
FrameResponseUpdateHandler
has been removed. An alternative way of obtaining knowledge about response configuration of slaves on the master is theLinSlaveConfigurationHandler
. This handler triggers when a LIN slave callsILinController::Init()
. Inside the handler, the new methodILinController::GetSlaveConfiguration()
can be used to query on which LIN IDs any slave is configure for response. This allows to implement a bookkeeping mechanism on the master and predict if a slave response is expected.
Renamed SimulationTask to SimulationStep and added the initial step size (formerly period length) as a parameter
IntegrationBus/include/silkit/services/orchestration/ITimeSyncService.hpp
old:
virtual void SetSimulationTask(SimTaskT task) = 0; virtual void SetSimulationTaskAsync(SimTaskT task) = 0;
new:
virtual void SetSimulationStepHandler(SimTaskT task, std::chrono::nanoseconds initialStepSize) = 0; virtual void SetSimulationStepHandlerAsync(SimTaskT task, std::chrono::nanoseconds initialStepSize) = 0;
Changed access to services that are meant to exist only once (SystemController, SystemMonitor, Logger, LifecycleService)
Methods to access these services were renamed from
Get[Service]()
toCreate[Service]()
IntegrationBus/include/silkit/participant/IParticipant.hpp
old:
virtual auto GetLifecycleService() -> Services::Orchestration::ILifecycleService* = 0; virtual auto GetSystemMonitor() -> Services::Orchestration::ISystemMonitor* = 0; virtual auto GetSystemController() -> Services::Orchestration::ISystemController* = 0; virtual auto GetLogger() -> Services::Logging::ILogger* = 0;
new:
virtual auto CreateLifecycleService() -> Services::Orchestration::ILifecycleService* = 0; virtual auto CreateSystemMonitor() -> Services::Orchestration::ISystemMonitor* = 0; virtual auto CreateSystemController() -> Services::Orchestration::ISystemController* = 0; virtual auto CreateLogger() -> Services::Logging::ILogger* = 0;
The changed methods can only be called once per participant. Further calls throw a runtime_error.
Instead of setting the time synchronization behavior when starting the lifecycle (
ILifecycleService::StartLifecycleNoTimeSync
orILifecycleService::StartLifecycleWithTimeSync
), the synchronization behavior is now determined when creating the lifecycle serviceIntegrationBus/include/silkit/participant/IParticipant.hpp
old:
virtual auto CreateLifecycleService() -> Services::Orchestration::ILifecycleService* = 0;
new:
virtual auto CreateLifecycleServiceNoTimeSync() -> Services::Orchestration::ILifecycleServiceNoTimeSync* = 0; virtual auto CreateLifecycleServiceWithTimeSync() -> Services::Orchestration::ILifecycleServiceWithTimeSync* = 0;
IntegrationBus/include/silkit/services/orchestration/ILifecycleService.hpp
old:
virtual auto StartLifecycleNoSyncTime(LifecycleConfiguration startConfiguration) -> std::future<ParticipantState> = 0; virtual auto StartLifecycleWithSyncTime(LifecycleConfiguration startConfiguration ) -> std::future<ParticipantState> = 0;
new:
virtual auto StartLifecycle(LifecycleConfiguration startConfiguration ) -> std::future<ParticipantState> = 0;
The new create method returns interfaces that only comprises available methods -
ILifecycleServiceNoTimeSync::SetStartingHandler()
without time synchronization -ILifecycleServiceWithTimeSync::GetTimeSyncService()
with time synchronization
C++: Extended the
CanFrame
with the required fields for CAN XL. The flags bitfield was replaced with an unsigned integer field (uint32_t
) and aCanFrameFlag
enumeration.C++: Extended the
ICanController::SetBaudRate
function with the CAN XL data bit rate.C: Extended the
SilKit_CanFrame
with the required fields for CAN XL.C: Extended the
SilKit_CanController_SetBaudRate
function with the CAN XL data bit rate.Changed RPC label matching
IntegrationBus/include/silkit/participant/Iparticipant.hpp
old:
virtual auto CreateRpcClient(const std::string& canonicalName, const std::string& functionName, const std::string& mediaType, const std::map<std::string, std::string>& labels, Services::Rpc::RpcCallResultHandler handler) -> Services::Rpc::IRpcClient* = 0; virtual auto CreateRpcServer(const std::string& canonicalName, const std::string& functionName, const std::string& mediaType, const std::map<std::string, std::string>& labels, Services::Rpc::RpcCallHandler handler) -> Services::Rpc::IRpcServer* = 0;
new:
virtual auto CreateRpcClient(const std::string& canonicalName, const SilKit::Services::Rpc::RpcClientSpec& dataSpec, Services::Rpc::RpcCallResultHandler handler) -> Services::Rpc::IRpcClient* = 0; virtual auto CreateRpcServer(const std::string& canonicalName, const SilKit::Services::Rpc::RpcServerSpec& dataSpec, Services::Rpc::RpcCallHandler handler) -> Services::Rpc::IRpcServer* = 0;
Changed Data Publish Subscribe label matching
IntegrationBus/include/silkit/participant/Iparticipant.hpp
old:
virtual auto CreateDataPublisher(const std::string& canonicalName, const std::string& topic, const std::string& mediaType, const std::map<std::string, std::string>& labels, size_t history = 0) virtual auto CreateDataSubscriber(const std::string& canonicalName, const std::string& topic, const std::string& mediaType, const std::map<std::string, std::string>& labels, Services::PubSub::DataMessageHandlerT defaultDataMessageHandler, Services::PubSub::NewDataPublisherHandlerT newDataPublisherHandler = nullptr)
new:
virtual auto CreateDataPublisher(const std::string& canonicalName, SilKit::Services::PubSub::DataPublisherSpec& dataSpec, size_t history = 0) virtual auto CreateDataSubscriber(const std::string& canonicalName, SilKit::Services::PubSub::DataSubscriberSpec& dataSpec, Services::PubSub::DataMessageHandlerT dataMessageHandler)
IntegrationBus/include/silkit/services/pubsub/IDataSubscriber.hpp
old:
virtual void SetDefaultDataMessageHandler(DataMessageHandlerT callback) = 0;
new:
virtual void SetDataMessageHandler(DataMessageHandlerT callback) = 0;
C: Added the simulation step duration to the
SilKit_TimeSyncService_SimulationStepHandler_t
callbackC++: Extended the
IEthernetController::AddFrameHandler
function with thedirectionMask
filter, similar toICanController::AddFrameHandler
.C++: Extended the
IEthernetController::AddFrameTransmitHandler
function with thetransmitStatusMask
filter, similar toICanController::AddFrameTransmitHandler
.C++: Extended the
IEthernetController::SendFrame
function with theuserContext
argument, similar toICanController::SendFrame
.C++: The
EthernetTransmitStatus
enumerators are now individual bits and can be used in thetransmitStatusMask
argument.C: Extended
SilKit_EthernetController_AddFrameHandler
with thedirectionMask
filter.C: Extended
SilKit_EthernetController_AddFrameTransmitHandler
with thetransmitStatusMask
filter.
Removed
Removed
ITimeSyncService::SetPeriod()
(now provided viaITimeSyncService::SetSimulationStepHandler()
)Removed RPC Discovery functionalities
Removed specific data handler functionality
Removed functional.hpp utility header
[3.99.27] - 2022-07-14
Please note that the Vector IntegrationBus was renamed to Vector SIL Kit. All APIs and documentation have been updated to reflect this.
Compatibility with 3.99.26
Application binary interface (ABI): No
Application software interface (API): No
Middleware network protocol: No
Added
Logger now provides an API to get the currently active log level.
SilKit/include/services/logging/ILogger.h
virtual Level GetLogLevel() const = 0;
Changed
Renaming the IntegrationBus to SIL Kit affects all APIs.
In general, File names and symbols were renamed from the prefixes
Ib
andIntegrationBus
to the prefixSilKit
.The main source directory was renamed from
IntegrationBus
toSilKit
and the include directories are now consistently in lower-case and with a root directory ofsilkit
.Packages are now named
SilKit-X.Y.Z-tool-platform.zip
.C++ namespaces were renamed:
Old
New
ib::
SilKit::
ib::mw
not public anymore
ib::sim
SilKit::Services
ib::sim::eth
SilKit::Services::Ethernet
ib::sim::can
SilKit::Services::Can
ib::sim::lin
SilKit::Services::Lin
ib::sim::fr
SilKit::Services::Flexray
ib::sim::data
SilKit::Services::PubSub
ib::sim::rpc
SilKit::Services::Rpc
ib::mw::sync
SilKit::Services::Orchestration
ib::mw::logging
SilKit::Services::Logging
ib::cfg
SilKit::Config
- C++ general cleanup:
renamed
ib/version.hpp
tosilkit/SilKitVersion.hpp
moved
ib/IParticipant.hpp
andib/exception.hpp
tosilkit/participant/
C-API: improvements for longterm ABI stability. The
interfaceId
member was replaced with a more versatile structHeader of type SilKit_StructHeader. This is a private field and not ment to be changed by the user directly. It is now necessary to initialize data structures before passing them to the C-API using the SilKit_Struct_Init macro. For example:old:
SilKit_CanFrame canFrame; /* we could pass uninitialized data to SIL Kit */ SilKit_CanController_SendFrame(canController, &canFrame, NULL);
new:
SilKit_CanFrame canFrame; /* we must initialize the data structures header before use */ SilKit_Struct_Init(SilKit_CanFrame, canFrame); SilKit_CanController_SendFrame(canController, &canFrame, NULL);
C-API: the C symbols have been stream lined. The naming convention was changed from
ib_Namespace_EntityWithoutPrefix_Function
to resemble the C++ API:SilKit_Entity_Function
.The domain ID integer was removed and replaced with a registry URI string. The command line tools were updated to accept a new parameter for this.
The command line tools were modified to use lower case names with dashes: E.g., the
IbRegistry
is now calledsil-kit-registry
. See Utilities for details.The trivial simulation and the detailed simulation have been made more consistent:
ILinController::SendFrame
,ILinController::SendFrameHeader
, andILinController::SetResponses
now throw an ib::StateError if the controller has not been initializedIEthernetController::SendFrame
now triggers a TransmitFrameEvent with TransmitState::ControllerInactive if the controller has not been activatedICanController::SendFrame
does not send a frame, but prints a warning if the controller has not been started
The timestamps for received events is now dependent on the synchronization mode of the sender and the receiver
Sender / Receiver
Unsynchronized
Synchronized
Unsynchronized
Undefined
Use timestamp of own simulation step
Synchronized
Undefined
Use timestamp of sender
The orchestration services were restructured in the C API such that they are more consistent with the Cpp API. The API of the system controller, system monitor, lifecycle service, and the time sync service are now provided through SilKit_SystemController, SilKit_SystemMonitor, SilKit_LifecycleService, and SilKit_TimeSyncService:
SilKit/include/capi/Orchestration.h
SilKit_ReturnCode SilKit_SystemMonitor_Create(SilKit_SystemMonitor** outSystemMonitor, SilKit_Participant* participant); SilKit_ReturnCode SilKit_SystemController_Create(SilKit_SystemController** outSystemController, SilKit_Participant* participant); SilKit_ReturnCode SilKit_SystemController_Create(SilKit_SystemController** outSystemController, SilKit_Participant* participant); SilKit_ReturnCode SilKit_LifecycleService_Create(SilKit_LifecycleService** outLifecycleService, SilKit_Participant* participant); SilKit_ReturnCode SilKit_TimeSyncService_Create(SilKit_TimeSyncService** outTimeSyncService, SilKit_LifecycleService* lifecycleService); typedef void (*SilKit_LifecycleService_CommunicationReadyHandler_t)(void* context, SilKit_LifecycleService* lifecycleService); SilKit_ReturnCode SilKit_LifecycleService_SetCommunicationReadyHandler( SilKit_LifecycleService* lifecycleService, void* context, SilKit_LifecycleService_CommunicationReadyHandler_t handler); SilKit_ReturnCode SilKit_LifecycleService_SetStopHandler(SilKit_LifecycleService* lifecycleService, void* context, SilKit_LifecycleService_StopHandler_t handler); SilKit_ReturnCode SilKit_LifecycleService_SetShutdownHandler( SilKit_LifecycleService* lifecycleService, void* context, SilKit_LifecycleService_ShutdownHandler_t handler); SilKit_ReturnCode SilKit_TimeSyncService_SetPeriod(SilKit_TimeSyncService* timeSyncService, SilKit_NanosecondsTime period); typedef void (*SilKit_TimeSyncService_SimulationTaskHandler_t)(void* context, SilKit_TimeSyncService* timeSyncService, SilKit_NanosecondsTime now); SilKit_ReturnCode SilKit_TimeSyncService_SetSimulationTask( SilKit_TimeSyncService* timeSyncService, void* context, SilKit_TimeSyncService_SimulationTaskHandler_t handler); SilKit_ReturnCode SilKit_TimeSyncService_SetSimulationTaskAsync( SilKit_TimeSyncService* timeSyncService, void* context, SilKit_TimeSyncService_SimulationTaskHandler_t handler); SilKit_ReturnCode SilKit_TimeSyncService_CompleteSimulationTask(SilKit_TimeSyncService* timeSyncService); SilKit_ReturnCode SilKit_SystemController_Restart(SilKit_SystemController* systemController, const char* participantName); SilKit_ReturnCode SilKit_SystemController_Run(SilKit_SystemController* systemController); SilKit_ReturnCode SilKit_SystemController_Stop(SilKit_SystemController* systemController); SilKit_ReturnCode SilKit_SystemController_Shutdown(SilKit_SystemController* systemController, const char* participantName); SilKit_ReturnCode SilKit_LifecycleService_Pause(SilKit_LifecycleService* lifecycleService, const char* reason); SilKit_ReturnCode SilKit_LifecycleService_Continue(SilKit_LifecycleService* lifecycleService); SilKit_ReturnCode SilKit_SystemMonitor_GetParticipantStatus(SilKit_ParticipantStatus* outParticipantState, SilKit_Participant* participant, const char* participantName); SilKitAPI SilKit_ReturnCode SilKit_SystemMonitor_GetSystemState(SilKit_SystemState* outSystemState, SilKit_Participant* participant); SilKit_ReturnCode SilKit_SystemMonitor_AddSystemStateHandler(SilKit_SystemMonitor* systemMonitor, void* context, SilKit_SystemStateHandler_t handler, SilKit_HandlerId* outHandlerId); SilKit_ReturnCode SilKit_SystemMonitor_RemoveSystemStateHandler(SilKit_SystemMonitor* systemMonitor, SilKit_HandlerId handlerId); typedef void (*SilKit_ParticipantStatusHandler_t)(void* context, SilKit_SystemMonitor* systemMonitor, const char* participantName, SilKit_ParticipantStatus* status); SilKit_ReturnCode SilKit_SystemMonitor_AddParticipantStatusHandler(SilKit_SystemMonitor* systemMonitor, void* context, SilKit_ParticipantStatusHandler_t handler, SilKit_HandlerId* outHandlerId); SilKit_ReturnCode SilKit_SystemMonitor_RemoveParticipantStatusHandler(SilKit_SystemMonitor* systemMonitor, SilKit_HandlerId handlerId); SilKit_ReturnCode SilKit_SystemController_SetWorkflowConfiguration( SilKit_SystemController* systemController, const SilKit_WorkflowConfiguration* workflowConfigration); SilKit_ReturnCode SilKit_LifecycleService_StartLifecycleNoSyncTime( SilKit_LifecycleService* lifecycleService, SilKit_LifecycleConfiguration* startconfiguration); SilKit_LifecycleService_StartLifecycleWithSyncTime( SilKit_LifecycleService* lifecycleService, SilKit_LifecycleConfiguration* startConfiguration); SilKitAPI SilKit_ReturnCode SilKit_LifecycleService_WaitForLifecycleToComplete( SilKit_LifecycleService* lifecycleService, SilKit_ParticipantState* outParticipantState);
The callbacks of
ISystemMonitor::OnParticipantConnected
andISystemMonitor::OnParticipantDisConnected
now return a struct that contains the information about the (dis)connected participant instead of a string.Currently, the only information in this struct is the name of the participant
Removed
The documentation of the network simulator has been moved to its own repository.
The documentation of the tracing and replay features were removed.
Removed simple Create…Controller API for a more compact API
IntegrationBus/include/ib/mw/IParticipant.hpp
virtual auto CreateCanController(const std::string& canonicalName) -> sim::can::ICanController* = 0; virtual auto CreateEthernetController(const std::string& canonicalName) -> sim::eth::IEthernetController* = 0; virtual auto CreateFlexrayController(const std::string& canonicalName) -> sim::fr::IFlexrayController* = 0; virtual auto CreateLinController(const std::string& canonicalName) -> sim::lin::ILinController* = 0; virtual auto CreateDataPublisher(const std::string& canonicalName) -> sim::data::IDataPublisher* = 0; virtual auto CreateDataSubscriber(const std::string& canonicalName) -> sim::data::IDataSubscriber* = 0; virtual auto CreateRpcClient(const std::string& canonicalName) -> sim::rpc::IRpcClient* = 0; virtual auto CreateRpcServer(const std::string& canonicalName) -> sim::rpc::IRpcServer* = 0;
Fixed
Ensure that the SynchronizedPolicy object does not modify the Timeconfiguration. This prevents multiple invocations of an async SimTask (VIB-847).
[3.99.26] - 2022-06-29
Compatibility with 3.99.25
Application binary interface (ABI): No
Application software interface (API): No
Middleware network protocol (VAsio): No
Added
IbSystemControllerInteractive: Added
Abort
as possible inputthe new ILifeCycleService is now exposed on the C-API: added the new
ib_Participant_StartLifecycleWithTime()
andib_Participant_StartLifecycleNoSyncTime()
functionsAdded functionality to remove handlers:
IntegrationBus/include/ib/mw/sync/ISystemMonitor.hpp
virtual void RemoveSystemStateHandler(HandlerId) = 0; virtual void RemoveParticipantStatusHandler(HandlerId) = 0;
IntegrationBus/include/ib/mw/sync/ITimeProvider.hpp
virtual void RemoveNextSimStepHandler(HandlerId) = 0;
IntegrationBus/include/ib/sim/data/IDataSubscriber.hpp
virtual void RemoveExplicitDataMessageHandler(HandlerId) = 0;
IntegrationBus/include/ib/capi/Participant.h
ib_ReturnCode ib_Participant_RemoveSystemStateHandler(ib_Participant* participant, ib_HandlerId handlerId); ib_ReturnCode ib_Participant_RemoveParticipantStatusHandler(ib_Participant* participant, ib_HandlerId handlerId);
IntegrationBus/include/ib/capi/DataPubSub.h
ib_ReturnCode ib_Data_Subscriber_RemoveExplicitDataMessageHandler(ib_Can_Controller* controller, ib_HandlerId handlerId);
Changed
Replaced the participant controller with a life cycle service and a time synchronization service (see documentation for details)
IntegrationBus/include/ib/mw/IParticipant.hpp
old:
virtual auto GetParticipantController() -> sync::IParticipantController* = 0;
new:
virtual auto GetLifecycleService() -> sync::ILifecycleService* = 0;
The life cycle service comprises methods related to the state control and observation of a participant
IParticipantController::Run()
was removedIParticipantController::RunAsync()
has two successorsIntegrationBus/include/ib/mw/sync/ILifecycleService.hpp
old (life cycle execution):
virtual auto IParticipantController::RunAsync() -> std::future<ParticipantState> = 0;
new (life cycle execution):
virtual auto StartLifecycleNoSyncTime(bool hasCoordinatedSimulationStart, bool hasCoordinatedSimulationStop) -> std::future<ParticipantState> = 0; // corresponds to former functionality of RunAsync() virtual auto StartLifecycleWithSyncTime(ITimeSyncService* timeSyncService, bool hasCoordinatedSimulationStart, bool hasCoordinatedSimulationStop) -> std::future<ParticipantState> = 0;
old (callbacks):
virtual void IParticipantController::CommunicationReadyHandler(CommunicationReadyHandlerT handler) = 0;
new (callbacks):
virtual void ILifecycleService::SetCommunicationReadyHandler(CommunicationReadyHandlerT handler) = 0; // New: indicates transition to ParticipantState::Running for participants without time synchronization virtual void SetStartingHandler(StartingHandlerT handler) = 0;
Moved methods
IParticipantController::SetStartingHandler(...) -> ILifecycleService::SetStartingHandler(...)
IParticipantController::SetStopHandler(...) -> ILifecycleService::SetStopHandler(...)
IParticipantController::SetShutdownHandler(...) -> ILifecycleService::SetShutdownHandler(...)
IParticipantController::ReportError(...) -> ILifecycleService::ReportError(...)
IParticipantController::Pause(...) -> ILifecycleService::Pause(...)
IParticipantController::Continue(...) -> ILifecycleService::Continue(...)
IParticipantController::Stop(...) -> ILifecycleService::Stop(...)
IParticipantController::State(...) -> ILifecycleService::State(...)
IParticipantController::Status(...) -> ILifecycleService::Status(...)
The time synchronization service is retrievable via the life cycle service
IntegrationBus/include/ib/mw/sync/ILifecycleService.hpp
virtual auto GetTimeSyncService() const -> ITimeSyncService* = 0;
Moved methods (The time synchronization service methods are unchanged compared to the methods of IParticipantController)
IParticipantController::SetSimulationTask(...) -> ITimeSyncService::SetSimulationTask(...)
IParticipantController::SetSimulationTaskAsync(...) -> ITimeSyncService::SetSimulationTaskAsync(...)
IParticipantController::CompleteSimulationTask(...) -> ITimeSyncService::CompleteSimulationTask(...)
IParticipantController::SetPeriod(...) -> ITimeSyncService::SetPeriod(...)
IParticipantController::Now(...) -> ITimeSyncService::Now(...)
IParticipantController::SetPeriod(...) -> ITimeSyncService::SetPeriod(...)
ISystemController: - Shutdown is now a participant command
IntegrationBus/include/ib/mw/sync/ISystemController.hpp
old (life cycle execution):
virtual void Shutdown() const = 0;
new (life cycle execution):
virtual void Shutdown(const std::string& participantName) const = 0;
Renamed reinitialize to restart
IntegrationBus/include/ib/mw/sync/ISystemController.hpp
old (life cycle execution):
virtual void Reinitialize(const std::string& participantName) const = 0;
new (life cycle execution):
virtual void Restart(const std::string& participantName) const = 0;
C-API: renamed the ib_Participant_WaitForAsyncRunToComplete to ib_Participant_WaitForLifecycleToComplete.
C-API: the participant Init handler no longer has a command parameter:
old:
typedef void (*ib_ParticipantCommunicationReadyHandler_t)(void* context, ib_Participant* participant, ib_ParticipantCommand* command);
new:
typedef void (*ib_ParticipantCommunicationReadyHandler_t)(void* context, ib_Participant* participant);
SetRequiredParticipants changed to SetWorkflowConfiguration. The new struct currently has the required participants as its sole member.
old:
virtual void SetRequiredParticipants(const std::vector<std::string>& participantNames) = 0;
new:
virtual void SetWorkflowConfiguration(const WorkflowConfiguration& workflowConfiguration) = 0;
IntegrationBus/include/ib/capi/Participant.h
:old:
typedef ib_ReturnCode(*ib_Participant_SetRequiredParticipants_t)( ib_Participant* participant, const ib_StringList* requiredParticipantNames);
new:
typedef ib_ReturnCode (*ib_Participant_SetWorkflowConfiguration_t)( ib_Participant* participant, const ib_WorkflowConfiguration* workflowConfigration);
Methods adding handlers now return a
HandlerId
:IntegrationBus/include/ib/mw/sync/ISystemMonitor.hpp
virtual auto AddSystemStateHandler(SystemStateHandlerT) -> HandlerId = 0; virtual auto AddParticipantStatusHandler(ParticipantStatusHandlerT) -> HandlerId = 0;
IntegrationBus/include/ib/mw/sync/ITimeProvider.hpp
virtual auto AddNextSimStepHandler(NextSimStepHandlerT) -> HandlerId = 0;
IntegrationBus/include/ib/sim/data/IDataSubscriber.hpp
virtual auto AddExplicitDataMessageHandler(...) -> HandlerId = 0;
IntegrationBus/include/ib/capi/Participant.h
ib_ReturnCode ib_Participant_AddSystemStateHandler(..., ib_HandlerId* outHandlerId); ib_ReturnCode ib_Participant_AddParticipantStatusHandler(..., ib_HandlerId* outHandlerId);
IntegrationBus/include/ib/capi/DataPubSub.h
ib_ReturnCode ib_Data_Subscriber_AddExplicitDataMessageHandler(..., ib_HandlerId* outHandlerId);
Removed
ISystemController: Removed
ISystemController::Initialize(const std::string& participantName) const
without replacement (initialization is perfomed automatically in the new life cycle concept)IbSystemControllerInteractive: Removed
Initialize
as possible inputC-API: the ib_Participant_RunAsync is superseded by the ib_Participant_StartLifecycle… functions.
C-API: the ib_Participant_Run function was removed. Use the new asynchronous ib_Participant_StartLifecycleWithSyncTime or the ib_Participant_StartLifecycleNoSyncTime as replacement. For Example:
old:
ib_ReturnCode returnCode = ib_Participant_Run(participant);
new:
ib_ReturnCode returnCode = ib_Participant_StartLifecycleNoSyncTime( participant, ib_False, ib_False, ib_False); // error check ommited ib_ParticipantState outParticipantState; returnCode = ib_Participant_WaitForLifecycleToComplete(participant, &outParticipantState);
[3.99.25] - 2022-06-13
Extended Bus System (CAN, Ethernet, FlexRay, …) APIs and removed separate registry library and unused tooling.
Compatibility with 3.99.24
Application binary interface (ABI): No
Application software interface (API): No
Middleware network protocol (VAsio): No
Added
LIN: Added functionality to remove handlers:
IntegrationBus/include/ib/sim/lin/ILinController.hpp
virtual HandlerId RemoveFrameStatusHandler(HandlerId handlerId) = 0; virtual HandlerId RemoveGoToSleepHandler(HandlerId handlerId) = 0; virtual HandlerId RemoveWakeupHandler(HandlerId handlerId) = 0; virtual HandlerId RemoveFrameResponseUpdateHandler(HandlerId handlerId) = 0;
IntegrationBus/include/ib/capi/Lin.h
typedef ib_ReturnCode (*ib_Lin_Controller_RemoveFrameStatusHandler_t)(ib_Lin_Controller* controller, ib_HandlerId handlerId); typedef ib_ReturnCode (*ib_Lin_Controller_RemoveGoToSleepHandler_t)(ib_Lin_Controller* controller, ib_HandlerId handlerId); typedef ib_ReturnCode (*ib_Lin_Controller_RemoveWakeupHandler_t)(ib_Lin_Controller* controller, ib_HandlerId handlerId);
Ethernet: Added functionality to remove handlers:
IntegrationBus/include/ib/sim/eth/IEthernetController.hpp
virtual HandlerId RemoveFrameHandler(HandlerId handlerId) = 0; virtual HandlerId RemoveStateChangeHandler(HandlerId handlerId) = 0; virtual HandlerId RemoveFrameTransmitHandler(HandlerId handlerId) = 0;
IntegrationBus/include/ib/capi/Ethernet.h
typedef ib_ReturnCode (*ib_Ethernet_Controller_RemoveFrameHandler_t)(ib_Ethernet_Controller* controller, ib_HandlerId handlerId); typedef ib_ReturnCode (*ib_Ethernet_Controller_RemoveStateChangeHandler_t)(ib_Ethernet_Controller* controller, ib_HandlerId handlerId); typedef ib_ReturnCode (*ib_Ethernet_Controller_RemoveFrameTransmitHandler_t)(ib_Ethernet_Controller* controller, ib_HandlerId handlerId);
Flexray: Added functionality to remove handlers:
IntegrationBus/include/ib/sim/fr/IFlexrayController.hpp
virtual HandlerId RemoveFrameHandler(HandlerId handlerId) = 0; virtual HandlerId RemoveFrameTransmitHandler(HandlerId handlerId) = 0; virtual HandlerId RemoveWakeupHandler(HandlerId handlerId) = 0; virtual HandlerId RemovePocStatusHandler(HandlerId handlerId) = 0; virtual HandlerId RemoveSymbolHandler(HandlerId handlerId) = 0; virtual HandlerId RemoveSymbolTransmitHandler(HandlerId handlerId) = 0; virtual HandlerId RemoveCycleStartHandler(HandlerId handlerId) = 0;
IntegrationBus/include/ib/capi/Flexray.h
typedef ib_ReturnCode (*ib_Flexray_Controller_RemoveFrameHandler(ib_Flexray_Controller* controller, ib_HandlerId handlerId); typedef ib_ReturnCode (*ib_Flexray_Controller_RemoveFrameTransmitHandler(ib_Flexray_Controller* controller, ib_HandlerId handlerId); typedef ib_ReturnCode (*ib_Flexray_Controller_RemoveWakeupHandler(ib_Flexray_Controller* controller, ib_HandlerId handlerId); typedef ib_ReturnCode (*ib_Flexray_Controller_RemovePocStatusHandler(ib_Flexray_Controller* controller, ib_HandlerId handlerId); typedef ib_ReturnCode (*ib_Flexray_Controller_RemoveSymbolHandler(ib_Flexray_Controller* controller, ib_HandlerId handlerId); typedef ib_ReturnCode (*ib_Flexray_Controller_RemoveSymbolTransmitHandler(ib_Flexray_Controller* controller, ib_HandlerId handlerId); typedef ib_ReturnCode (*ib_Flexray_Controller_RemoveCycleStartHandler(ib_Flexray_Controller* controller, ib_HandlerId handlerId);
Removed
The
vib-config-tool
has been deprecated and was now finally removed. Since the configuration format has been completely reworked, this tool is no longer necessary.The
IbLauncher
utility has been deprecated and was now finally removed.
Changed
LIN: Adding a handler now returns a HandlerId. In the C-API, the HandlerId is obtaind by an out parameter:
IntegrationBus/include/ib/sim/lin/ILinController.hpp
virtual HandlerId AddFrameStatusHandler(...) = 0; virtual HandlerId AddGoToSleepHandler(...) = 0; virtual HandlerId AddWakeupHandler(...) = 0; virtual HandlerId AddFrameResponseUpdateHandler(...) = 0;
IntegrationBus/include/ib/capi/Lin.h
typedef ib_ReturnCode (*ib_Lin_Controller_AddFrameStatusHandler_t)(... , ib_HandlerId* outHandlerId); typedef ib_ReturnCode (*ib_Lin_Controller_AddGoToSleepHandler_t)(... , ib_HandlerId* outHandlerId); typedef ib_ReturnCode (*ib_Lin_Controller_AddWakeupHandler_t)(... , ib_HandlerId* outHandlerId);
Ethernet: Adding a handler now returns a HandlerId. In the C-API, the HandlerId is obtaind by an out parameter:
IntegrationBus/include/ib/sim/eth/IEthernetController.hpp
virtual HandlerId AddFrameHandler(...) = 0; virtual HandlerId AddStateChangeHandler(...) = 0; virtual HandlerId AddFrameTransmitHandler(...) = 0;
IntegrationBus/include/ib/capi/Ethernet.h
typedef ib_ReturnCode (*ib_Ethernet_Controller_AddFrameHandler_t)(... , ib_HandlerId* outHandlerId); typedef ib_ReturnCode (*ib_Ethernet_Controller_AddStateChangeHandler_t)(... , ib_HandlerId* outHandlerId); typedef ib_ReturnCode (*ib_Ethernet_Controller_AddFrameTransmitHandler_t)(... , ib_HandlerId* outHandlerId);
Flexray: Adding a handler now returns a HandlerId. In the C-API, the HandlerId is obtaind by an out parameter:
IntegrationBus/include/ib/sim/fr/IFlexrayController.hpp
virtual HandlerId AddFrameHandler(...) = 0; virtual HandlerId AddFrameTransmitHandler(...) = 0; virtual HandlerId AddWakeupHandler(...) = 0; virtual HandlerId AddPocStatusHandler(...) = 0; virtual HandlerId AddSymbolHandler(...) = 0; virtual HandlerId AddSymbolTransmitHandler(...) = 0; virtual HandlerId AddCycleStartHandler(...) = 0;
IntegrationBus/include/ib/capi/Flexray.h
typedef ib_ReturnCode (*ib_Flexray_Controller_AddFrameHandler(... , ib_HandlerId* outHandlerId); typedef ib_ReturnCode (*ib_Flexray_Controller_AddFrameTransmitHandler(... , ib_HandlerId* outHandlerId); typedef ib_ReturnCode (*ib_Flexray_Controller_AddWakeupHandler(... , ib_HandlerId* outHandlerId); typedef ib_ReturnCode (*ib_Flexray_Controller_AddPocStatusHandler(... , ib_HandlerId* outHandlerId); typedef ib_ReturnCode (*ib_Flexray_Controller_AddSymbolHandler(... , ib_HandlerId* outHandlerId); typedef ib_ReturnCode (*ib_Flexray_Controller_AddSymbolTransmitHandler(... , ib_HandlerId* outHandlerId); typedef ib_ReturnCode (*ib_Flexray_Controller_AddCycleStartHandler(... , ib_HandlerId* outHandlerId);
Internal refactoring of Bus Controllers to harmonize behavior w/wo bus simulator.
LIN: When the controller receives a GoToSleep-frame, the
FrameStatusHandler
is always called (previously only with bus simulator).Ethernet:
Activate()
andDeactivate()
now tigger theStateChangeHandler
(previously only with bus simulator).
The IbRegistry shared library is no longer necessary. An instance of IIbRegistry can now be created directly using
CreateRegistry()
. This is an implementation detail specific to the VAsio based VIB. The namespace of the factory function and the location of the headers were changed to reflect this:old:
//ib/extensions/CreateIbRegistry.hpp ib::extensions::CreateIbRegistry()
new:
//ib/vendor/CreateIbRegistry.hpp ib::vendor::CreateIbRegistry()
The binary packages no longer contain an IntegrationBus-NonRedistributable directory.
[3.99.24] - 2022-05-30
Refactored Bus System and further Service (CAN, Ethernet, FlexRay, Participant, …) APIs
Compatibility with 3.99.23
Application binary interface (ABI): No
Application software interface (API): No
Middleware network protocol (VAsio): No
Added
IntegrationBus/include/ib/mw/sync/ISystemMonitor.hpp
Added methods which allow users to obtain information about connected participants.
class ISystemMonitor { public: ... using ParticipantConnectedHandler = std::function<void(const std::string& participantName)>; using ParticipantDisconnectedHandler = std::function<void(const std::string& participantName)>; ... virtual void SetParticipantConnectedHandler(ParticipantConnectedHandler handler) = 0; virtual void SetParticipantDisconnectedHandler(ParticipantDisconnectedHandler handler) = 0; virtual auto IsParticipantConnected(const std::string& participantName) const -> bool = 0; ... };
CAN: Added functionality to remove handlers:
IntegrationBus/include/ib/sim/can/ICanController.hpp
virtual void RemoveFrameHandler(HandlerId handlerId) = 0; virtual void RemoveFrameTransmitHandler(HandlerId handlerId) = 0; virtual void RemoveStateChangeHandler(HandlerId handlerId) = 0; virtual void RemoveErrorStateChangeHandler(HandlerId handlerId) = 0;
IntegrationBus/include/ib/capi/Can.h
typedef ib_ReturnCode (*ib_Can_Controller_RemoveFrameHandler_t)(ib_Can_Controller* controller, ib_HandlerId handlerId); typedef ib_ReturnCode (*ib_Can_Controller_RemoveFrameTransmitHandler_t)(ib_Can_Controller* controller, ib_HandlerId handlerId); typedef ib_ReturnCode (*ib_Can_Controller_RemoveStateChangeHandler_t)(ib_Can_Controller* controller, ib_HandlerId handlerId); typedef ib_ReturnCode (*ib_Can_Controller_RemoveErrorStateChangeHandler_t)(ib_Can_Controller* controller, ib_HandlerId handlerId);
Changed
CAN simuations behavior with and without NetSim harmonized:
Without NetSim, the ICanController methods Reset, Start, Stop and Sleep now also trigger the StateChangeHandlers on the calling participant, without any effect on the actual controller logic.
CAN: Adding a handler now returns a HandlerId. In the C-API, the HandlerId is obtaind by an out parameter:
IntegrationBus/include/ib/sim/can/ICanController.hpp
virtual HandlerId AddFrameHandler(...) = 0; virtual HandlerId AddFrameTransmitHandler(...) = 0; virtual HandlerId AddStateChangeHandler(...) = 0; virtual HandlerId AddErrorStateChangeHandler(...) = 0;
IntegrationBus/include/ib/capi/Can.h
typedef ib_ReturnCode (*ib_Can_Controller_AddFrameHandler_t)(... , ib_HandlerId* outHandlerId); typedef ib_ReturnCode (*ib_Can_Controller_AddFrameTransmitHandler_t)(... , ib_HandlerId* outHandlerId); typedef ib_ReturnCode (*ib_Can_Controller_AddStateChangeHandler_t)(... , ib_HandlerId* outHandlerId); typedef ib_ReturnCode (*ib_Can_Controller_AddErrorStateChangeHandler_t)(... , ib_HandlerId* outHandlerId);
Added ib_InterfaceId to structs of C-API:
ib_Can_Frame
ib_Flexray_ControllerConfig
ib_Flexray_HostCommand
ib_Flexray_Header
ib_Flexray_Frame
ib_Flexray_ClusterParameters
ib_Flexray_NodeParameters
ib_Flexray_TxBufferConfig
ib_Flexray_TxBufferUpdate
ib_Rpc_DiscoveryResultList
Changed type of ib_CanErrorState:
IntegrationBus/include/ib/capi/Can.h
old:
typedef int ib_Can_ErrorState;
new:
typedef int32_t ib_Can_ErrorState;
Changed pass by value semantic in C-API handlers:
IntegrationBus/include/ib/capi/Can.h
old:
typedef void (*ib_Can_StateChangeHandler_t)(void* context, ib_Can_Controller* controller, ib_Can_StateChangeEvent stateChangeEvent); typedef void (*ib_Can_ErrorStateChangeHandler_t)(void* context, ib_Can_Controller* controller, ib_Can_ErrorStateChangeEvent errorStateChangeEvent);
new:
typedef void (*ib_Can_StateChangeHandler_t)(void* context, ib_Can_Controller* controller, ib_Can_StateChangeEvent* stateChangeEvent); typedef void (*ib_Can_ErrorStateChangeHandler_t)(void* context, ib_Can_Controller* controller, ib_Can_ErrorStateChangeEvent* errorStateChangeEvent);
IntegrationBus/include/ib/capi/Ethernet.h
old:
typedef void (*ib_Ethernet_StateChangeHandler_t)(void* context, ib_Ethernet_Controller* controller, ib_Ethernet_StateChangeEvent stateChangeEvent); typedef void (*ib_Ethernet_BitrateChangeHandler_t)(void* context, ib_Ethernet_Controller* controller, ib_Ethernet_BitrateChangeEvent bitrateChangeEvent);
new:
typedef void (*ib_Ethernet_StateChangeHandler_t)(void* context, ib_Ethernet_Controller* controller, ib_Ethernet_StateChangeEvent* stateChangeEvent); typedef void (*ib_Ethernet_BitrateChangeHandler_t)(void* context, ib_Ethernet_Controller* controller, ib_Ethernet_BitrateChangeEvent* bitrateChangeEvent);
IntegrationBus/include/ib/capi/Ethernet.h
old:
typedef void (*ib_ParticipantStatusHandler_t)(void* context, ib_Participant* participant, const char* participantName, ib_ParticipantStatus status);
new:
typedef void (*ib_ParticipantStatusHandler_t)(void* context, ib_Participant* participant, const char* participantName, ib_ParticipantStatus* status);
Changed ib_Ethernet_Frame C-API:
IntegrationBus/include/ib/capi/Ethernet.h
old:
typedef ib_ByteVector ib_Ethernet_Frame;
new:
typedef struct { ib_InterfaceIdentifier interfaceId; //!< The interface id that specifies which version of this struct was obtained ib_ByteVector raw; } ib_Ethernet_Frame;
Changed ib_Flexray_ControllerConfig C-API:
IntegrationBus/include/ib/capi/Flexray.h
old:
struct ib_Flexray_ControllerConfig { ib_Flexray_ClusterParameters clusterParams; ib_Flexray_NodeParameters nodeParams; ...
new:
struct ib_Flexray_ControllerConfig { ib_InterfaceIdentifier interfaceId; ib_Flexray_ClusterParameters* clusterParams; ib_Flexray_NodeParameters* nodeParams; ...
[3.99.23] - 25-05-2022
Refactored Bus System and further Service (data message, rpc) APIs
Compatibility with 3.99.22
Application binary interface (ABI): No
Application software interface (API): No
Middleware network protocol (VAsio): Yes
Changed
IntegrationBus/include/ib/sim/can/CanDatatypes.hpp
The two members direction and userContext were moved from the CanFrame to the CanFrameEvent
old:
struct CanFrame { ... TransmitDirection direction{TransmitDirection::Undefined}; //!< Receive/Transmit direction void* userContext; //!< Optional pointer provided by user when sending the frame };
new:
struct CanFrameEvent { ... TransmitDirection direction{TransmitDirection::Undefined}; //!< Receive/Transmit direction void* userContext; //!< Optional pointer provided by user when sending the frame };
Removed
Removed deprecated PcapFile and PcapPipe config fields in EthernetControllers section. Use UseTraceSinks instead.
API to read, create and modify Ethernet frames at the
EthernetFrame
is removed.IntegrationBus/include/ib/sim/eth/EthernetDatatypes.hpp
old:
struct EthernetTagControlInformation; EthernetFrame::EthernetFrame(); EthernetFrame::EthernetFrame(const EthernetFrame& other); EthernetFrame(EthernetFrame&& other); auto operator=(const EthernetFrame& other) -> EthernetFrame&; auto operator=(EthernetFrame&& other) -> EthernetFrame&; EthernetFrame::EthernetFrame(const std::vector<uint8_t>& rawFrame); EthernetFrame::EthernetFrame(std::vector<uint8_t>&& rawFrame); EthernetFrame::EthernetFrame(const uint8_t* rawFrame, size_t size); auto EthernetFrame::GetDestinationMac() const -> EthernetMac; void EthernetFrame::SetDestinationMac(const EthernetMac& mac); auto EthernetFrame::GetSourceMac() const -> EthernetMac; void EthernetFrame::SetSourceMac(const EthernetMac& mac); auto EthernetFrame::GetVlanTag() const -> EthernetTagControlInformation; void EthernetFrame::SetVlanTag(const EthernetTagControlInformation& tci); auto EthernetFrame::GetEtherType() const -> uint16_t; void EthernetFrame::SetEtherType(uint16_t etherType); auto EthernetFrame::GetFrameSize() const -> size_t; auto EthernetFrame::GetHeaderSize() const -> size_t; auto EthernetFrame::GetPayloadSize() const -> size_t; auto EthernetFrame::GetPayload() -> util::vector_view<uint8_t>; auto EthernetFrame::GetPayload() const -> util::vector_view<const uint8_t>; void EthernetFrame::SetPayload(const std::vector<uint8_t>& payload); void EthernetFrame::SetPayload(const uint8_t* payload, size_t size); auto EthernetFrame::RawFrame() const -> const std::vector<uint8_t>&; void EthernetFrame::SetRawFrame(const std::vector<uint8_t>&);
new:
struct EthernetFrame { std::vector<uint8_t> raw; };
Removed deprecated PcapFile and PcapPipe config fields in EthernetControllers section. Use UseTraceSinks instead.
Removed MacAddress config fields in EthernetControllers section.
Fixed
Removed bug that allowed for multiple parallel SimTask-Handle triggers without a call to CompleteSimulationTask when using ParticipantController::RunAsync
[3.99.22] - 2022-05-17
Refactored Bus System and further Service (data message, rpc) APIs
Compatibility with 3.99.21
Application binary interface (ABI): No
Application software interface (API): No
Middleware network protocol (VAsio): No
Removed
IntegrationBus/include/ib/version.hpp
The function to retreive the Sprint name was removed. The CMake-Variables
IB_SPRINT_NUMBER
andIB_SPRINT_NAME
were removed as well.old:
ib::version::SprintName()
IntegrationBus/include/ib/capi/FlexRay.h
The convenience function in the C-API to append a
TxBufferConfig
was removed.old:
typedef ib_ReturnCode (*ib_FlexRay_Append_TxBufferConfig_t)(ib_FlexRay_ControllerConfig** controllerConfig, const ib_FlexRay_TxBufferConfig* txBufferConfig);
Changed
The IbRegistry utility changed the configuration parameter from positional parameter to option parameter.
old:
./IbRegistry IbConfig_DemoCan.json
new:
./IbRegistry -c IbConfig_DemoCan.json
Dynamic arrays in C-API changed from array of size 1 at end of struct to pointers:
IntegrationBus/include/ib/capi/FlexRay.h
old:
struct ib_FlexRay_ControllerConfig { ... ib_FlexRay_TxBufferConfig bufferConfigs[1]; };
new:
struct ib_FlexRay_ControllerConfig { ... ib_FlexRay_TxBufferConfig* bufferConfigs; };
IntegrationBus/include/ib/capi/Lin.h
old:
struct ib_Lin_ControllerConfig { ... ib_Lin_FrameResponse frameResponses[1]; };
new:
struct ib_Lin_ControllerConfig { ... ib_Lin_FrameResponse* frameResponses; };
IntegrationBus/include/ib/capi/Rpc.h
old:
typedef struct ib_Rpc_DiscoveryResultList { ... ib_Rpc_DiscoveryResult results[1]; } ib_Rpc_DiscoveryResultList;
new:
typedef struct ib_Rpc_DiscoveryResultList { ... ib_Rpc_DiscoveryResult* results; } ib_Rpc_DiscoveryResultList;
IntegrationBus/include/ib/capi/Types.h
old:
typedef struct ib_KeyValueList { size_t numLabels; ib_KeyValuePair labels[1]; } ib_KeyValueList; typedef struct ib_StringList { size_t numStrings; const char* strings[1]; } ib_StringList;
new:
typedef struct ib_KeyValueList { size_t numLabels; ib_KeyValuePair* labels; } ib_KeyValueList; typedef struct ib_StringList { size_t numStrings; const char** strings; } ib_StringList;
Can
IntegrationBus/include/ib/sim/can/CanDatatypes.hpp
old:
struct CanReceiveFlags
new:
struct CanFrameFlags
Lin
“Lin”-prefix for related data types.
IntegrationBus/include/ib/sim/lin/LinDatatypes.hpp
old:
ChecksumModel DataLengthT FrameResponseType FrameResponseMode FrameResponse FrameStatus ControllerMode BaudRateT ControllerConfig ControllerStatus
new:
LinChecksumModel LinDataLengthT LinFrameResponseType LinFrameResponseMode LinFrameResponse LinFrameStatus LinControllerMode LinBaudRateT LinControllerConfig LinControllerStatus
Replaced the single-member struct
RpcExchangeFormat
with its sole member, the media type string. The related data types were removed and some associated functions have changed:IntegrationBus/include/ib/mw/IParticipant.hpp
old
class IParticipant auto CreateRpcClient(..., RpcExchangeFormat exchangeFormat, ...) -> ... auto CreateRpcServer(..., RpcExchangeFormat exchangeFormat, ...) -> ... auto DiscoverRpcServers(..., RpcExchangeFormat exchangeFormat, ...) -> ...
new
class IParticipant auto CreateRpcClient(..., const std::string& mediaType, ...) -> ... auto CreateRpcServer(..., const std::string& mediaType, ...) -> ... auto DiscoverRpcServers(..., const std::string& mediaType, ...) -> ...
IntegrationBus/include/ib/sim/rpc/RpcDatatypes.hpp
old
struct RpcExchangeFormat { ... }; bool operator ==(const RpcExchangeFormat &, const RpcExchangeFormat &);
IntegrationBus/include/ib/sim/rpc/string_utils.hpp
old
to_string(const RpcExchangeFormat&) -> std::string; operator<<(std::ostream& out, const RpcExchangeFormat& dataExchangeFormat) -> std::ostream&;
IntegrationBus/include/ib/capi/InterfaceIdentifiers.h
old
#define ib_InterfaceIdentifier_RpcExchangeFormat ...
IntegrationBus/include/ib/capi/Rpc.h
old
typedef struct { ... } ib_Rpc_ExchangeFormat;
FlexRay
Renamed
IntegrationBus/include/ib/capi/FlexRay.h
toIntegrationBus/include/ib/capi/Flexray.h
Changed
ib_FlexRay_
toib_Flexray_
in all symbolsChanged the names of the event and handler types and registration functionsto match the
...Event
,...TransmitEvent
andAdd...Handler
naming scheme
old:
ib_FlexRay_Message ib_FlexRay_MessageAck ib_FlexRay_Symbol ib_FlexRay_SymbolAck ib_FlexRay_CycleStart ib_FlexRay_ControllerStatus ib_FlexRay_PocStatus ib_FlexRay_MessageHandler_t ib_FlexRay_MessageAckHandler_t ib_FlexRay_WakeupHandler_t ib_FlexRay_PocStatusHandler_t ib_FlexRay_SymbolHandler_t ib_FlexRay_SymbolAckHandler_t ib_FlexRay_CycleStartHandler_t ib_FlexRay_Controller_RegisterMessageHandler ib_FlexRay_Controller_RegisterMessageAckHandler ib_FlexRay_Controller_RegisterWakeupHandler ib_FlexRay_Controller_RegisterPocStatusHandler ib_FlexRay_Controller_RegisterSymbolHandler ib_FlexRay_Controller_RegisterSymbolAckHandler ib_FlexRay_Controller_RegisterCycleStartHandler
new:
ib_Flexray_FrameEvent ib_Flexray_FrameTransmitEvent ib_Flexray_SymbolEvent ib_Flexray_SymbolTransmitEvent ib_Flexray_WakeupEvent ib_Flexray_CycleStartEvent ib_Flexray_PocStatusEvent ib_Flexray_FrameHandler_t ib_Flexray_FrameTransmitHandler_t ib_Flexray_WakeupHandler_t ib_Flexray_PocStatusHandler_t ib_Flexray_SymbolHandler_t ib_Flexray_SymbolTransmitHandler_t ib_Flexray_CycleStartHandler_t ib_Flexray_Controller_AddFrameHandler ib_Flexray_Controller_AddFrameTransmitHandler ib_Flexray_Controller_AddWakeupHandler ib_Flexray_Controller_AddPocStatusHandler ib_Flexray_Controller_AddSymbolHandler ib_Flexray_Controller_AddSymbolTransmitHandler ib_Flexray_Controller_AddCycleStartHandler
IntegrationBus/include/ib/capi/InterfaceIdentifiers.h
Changed
FlexRay
toFlexray
in all names
IntegrationBus/include/ib/mw/IParticipant.hpp
Changed
Fr
toFlexray
in all names
Renamed
IntegrationBus/include/ib/sim/fr/FrDatatypes.hpp
toIntegrationBus/include/ib/sim/fr/FlexrayDatatypes.hpp
Changed
Fr
toFlexray
in all namesAdded
Flexray
prefix to all names which had no prefixChanged the names of the event and handler types and registration functionsto match the
...Event
,...TransmitEvent
andAdd...Handler
naming scheme
old
FrMessage FrMessageAck FrSymbol FrSymbolAck CycleStart PocStatus
new
FlexrayFrameEvent FlexrayFrameTransmitEvent FlexraySymbolEvent FlexraySymbolTransmitEvent FlexrayCycleStartEvent FlexrayPocStatusEvent
Renamed
IntegrationBus/include/ib/sim/fr/IFrController.hpp
toIntegrationBus/include/ib/sim/fr/IFlexrayController.hpp
Changed
Fr
toFlexray
in all namesChanged the names of the event and handler types and registration functionsto match the
...Event
,...TransmitEvent
andAdd...Handler
naming scheme
old
class IFrController MessageHandler MessageAckHandler SymbolAckHandler RegisterMessageHandler RegisterMessageAckHandler RegisterWakeupHandler RegisterPocStatusHandler RegisterSymbolHandler RegisterSymbolAckHandler RegisterCycleStartHandler
new
class IFlexrayController FrameHandler FrameTransmitHandler SymbolTransmitHandler AddFrameHandler AddFrameTransmitHandler AddWakeupHandler AddPocStatusHandler AddSymbolHandler AddSymbolTransmitHandler AddCycleStartHandler
RPC
IntegrationBus/include/ib/capi/Rpc.h
The individual parameters of the call and call-result handlers were combined into a single event structure. The handler typedefs were renamed to be in line with the corresponding
C++
APIold
typedef void (*ib_Rpc_CallHandler_t)(void* context, ib_Rpc_Server* server, ib_Rpc_CallHandle* callHandle, const ib_ByteVector* argumentData); typedef void (*ib_Rpc_ResultHandler_t)(void* context, ib_Rpc_Client* client, ib_Rpc_CallHandle* callHandle, ib_Rpc_CallStatus callStatus, const ib_ByteVector* returnData);
new
typedef void (*ib_Rpc_CallHandler_t)(void* context, ib_Rpc_Server* server, const ib_Rpc_CallEvent* event); typedef void (*ib_Rpc_CallResultHandler_t)(void* context, ib_Rpc_Client* client, const ib_Rpc_CallResultEvent* event);
The former
rpcChannel
was renamed tofunctionName
which should better reflect it’s meaning:old
typedef struct ib_Rpc_DiscoveryResult { ... const char* rpcChannel; ... } ib_Rpc_DiscoveryResult;
new
typedef struct ib_Rpc_DiscoveryResult { ... const char* functionName; ... } ib_Rpc_DiscoveryResult;
IntegrationBus/include/ib/sim/rpc/RpcDatatypes.hpp
The type
ib::sim::rpc::CallStatus
was renamed toib::sim::rpc::RpcCallStatus
.The typedef
CallReturnHandler
was renamed toCallResultHandler
and the arguments besides theIRpcClient*
were combined into an event structure:old
using CallReturnHandler = std::function<void(ib::sim::rpc::IRpcClient* client, ib::sim::rpc::IRpcCallHandle* callHandle, const ib::sim::rpc::CallStatus callStatus, const std::vector<uint8_t>& returnData)>;
new
struct RpcCallResultEvent { std::chrono::nanoseconds timestamp; IRpcCallHandle* callHandle; RpcCallStatus callStatus; std::vector<uint8_t> resultData; }; using RpcCallResultHandler = std::function<void(IRpcClient* client, const RpcCallResultEvent& event)>;
The typedef
CallProcessor
was renamed toCallHandler
.old
using CallProcessor = std::function<void(ib::sim::rpc::IRpcServer* server, ib::sim::rpc::IRpcCallHandle* callHandle, const std::vector<uint8_t>& argumentData)>;
new
struct RpcCallEvent { std::chrono::nanoseconds timestamp; IRpcCallHandle* callHandle; std::vector<uint8_t> argumentData; }; using RpcCallHandler = std::function<void(IRpcServer* server, const RpcCallEvent& event)>;
The typedef
DiscoveryResultHandler
was renamed toRpcDiscoveryResultHandler
.The
Channel
field of theRpcClients
andRpcServers
entries in the participant configuration was renamed toFunctionName
.
Added
Lin
Improved error handling for Wakeup/GoToSleep.
IntegrationBus/include/ib/sim/lin/ILinController.hpp
ILinController::GoToSleep()
,ILinController::GoToSleepInternal()
,ILinController::Wakeup()
andILinController::WakeupInternal()
now throw aib::StateError
exception if issued in wrongLinControllerMode
.IntegrationBus/include/ib/capi/Lin.h
ib_Lin_Controller_GoToSleep()
,ib_Lin_Controller_GoToSleepInternal()
,ib_Lin_Controller_Wakeup()
andib_Lin_Controller_WakeupInternal()
now returnib_ReturnCode_WRONGSTATE
if issued in wrongib_Lin_ControllerMode
.
FlexRay
IntegrationBus/include/ib/capi/InterfaceIdentifiers.h
New interface identifier for wakeup events
new:
#define ib_InterfaceIdentifier_FlexrayWakeupEvent ...
IntegrationBus/include/ib/sim/fr/FlexrayDatatypes.hpp
New datatype for wakeup events
new
struct FlexrayWakeupEvent { ... };
RPC
IntegrationBus/include/ib/capi/Rpc.h
Functions to set the handler for an existing RPC client and server:
new
ib_ReturnCode ib_Rpc_Server_SetCallHandler(ib_Rpc_Server* self, void* context, ib_Rpc_CallHandler_t handler); ib_ReturnCode ib_Rpc_Client_SetCallResultHandler(ib_Rpc_Client* self, void* context, ib_Rpc_CallResultHandler_t handler);
Event structures that are used instead of the individual parameters of the handler callbacks:
new
typedef struct { ib_InterfaceIdentifier interfaceId; ib_NanosecondsTime timestamp; ib_Rpc_CallHandle* callHandle; ib_ByteVector argumentData; } ib_Rpc_CallEvent; typedef struct { ib_InterfaceIdentifier interfaceId; ib_NanosecondsTime timestamp; ib_Rpc_CallHandle* callHandle; ib_Rpc_CallStatus callStatus; ib_ByteVector resultData; } ib_Rpc_CallResultEvent;
IntegrationBus/include/ib/capi/InterfaceIdentifiers.h
Added interface identifiers for the newly introduced event structures.
new
#define ib_InterfaceIdentifier_RpcCallEvent ... #define ib_InterfaceIdentifier_RpcCallResultEvent ...
Fixed
CAN: fixed network transmission of the userContext member. This breaks network compatibility to the previous 3.99.21 release.
[3.99.21] - 2022-05-03
Compatibility with 3.99.20
Application binary interface (ABI): No
Application software interface (API): No
Middleware network protocol (VAsio): No
Changed
Lin
Functional changes
Sending a wakeup pulse ´´ILinController::Wakeup()´´ now also triggers all
WakeupHandler
-callbacks on the controller that initiated the wakeup pulse in a trivial simulation. Formerly, this was only the case in a detailed simulation. The direction can be distinguished with the new ´´LinWakeupEvent.direction´´.
IntegrationBus/include/ib/sim/lin/ILinController.hpp
old:
using FrameStatusHandler = std::function<void(ILinController*, const LinFrame&, FrameStatus, std::chrono::nanoseconds timestamp)>; using WakeupHandler = std::function<void(ILinController*)>; using GoToSleepHandler = std::function<void(ILinController*)>; ILinController::RegisterFrameStatusHandler(FrameStatusHandler); ILinController::RegisterGoToSleepHandler(GoToSleepHandler); ILinController::RegisterWakeupHandler(WakeupHandler); ILinController::RegisterFrameResponseUpdateHandler(FrameResponseUpdateHandler);
new:
using FrameStatusHandler = std::function<void(ILinController*, const LinFrameStatusEvent& frameStatusEvent)>; using WakeupHandler = std::function<void(ILinController*, const LinWakeupEvent& wakeupEvent)>; using GoToSleepHandler = std::function<void(ILinController*, const LinGoToSleepEvent& goToSleepEvent)>; ILinController::AddFrameStatusHandler(FrameStatusHandler); ILinController::AddGoToSleepHandler(GoToSleepHandler); ILinController::AddWakeupHandler(WakeupHandler); ILinController::AddFrameResponseUpdateHandler(FrameResponseUpdateHandler);
IntegrationBus/include/ib/sim/lin/LinDatatypes.hpp
(C++-Api)old:
struct Frame {...};
new:
struct LinFrame {...};
added:
struct LinFrameStatusEvent { std::chrono::nanoseconds timestamp; const LinFrame& frame; FrameStatus status; }; struct LinWakeupEvent { std::chrono::nanoseconds timestamp; TransmitDirection direction; }; struct LinGoToSleepEvent { std::chrono::nanoseconds timestamp; };
IntegrationBus/include/ib/capi/Lin.h
Data types
added:
struct ib_Lin_FrameStatusEvent { ib_InterfaceIdentifier interfaceId; ib_NanosecondsTime timestamp; ib_Lin_Frame* frame; ib_Lin_FrameStatus status; }; struct ib_Lin_WakeupEvent { ib_InterfaceIdentifier interfaceId; ib_NanosecondsTime timestamp; ib_Direction direction; }; struct ib_Lin_GoToSleepEvent { ib_InterfaceIdentifier interfaceId; ib_NanosecondsTime timestamp; };
Handlers
old:
typedef void (*ib_Lin_FrameStatusHandler_t)(void* context, ib_Lin_Controller* controller, const ib_Lin_Frame* frame, ib_Lin_FrameStatus status, ib_NanosecondsTime timestamp); typedef void (*ib_Lin_GoToSleepHandler_t)(void* context, ib_Lin_Controller* controller); typedef void (*ib_Lin_WakeupHandler_t)(void* context, ib_Lin_Controller* controller);
new:
typedef void (*ib_Lin_FrameStatusHandler_t)(void* context, ib_Lin_Controller* controller, const ib_Lin_FrameStatusEvent* frameStatusEvent); typedef void (*ib_Lin_GoToSleepHandler_t)(void* context, ib_Lin_Controller* controller, const ib_Lin_GoToSleepEvent* goToSleepEvent); typedef void (*ib_Lin_WakeupHandler_t)(void* context, ib_Lin_Controller* controller, const ib_Lin_WakeupEvent* wakeUpEvent);
Methods
old:
typedef ib_ReturnCode(*ib_Lin_Controller_RegisterFrameStatusHandler_t)(ib_Lin_Controller* controller, void* context, ib_Lin_FrameStatusHandler_t handler); typedef ib_ReturnCode(*ib_Lin_Controller_RegisterGoToSleepHandler_t)(ib_Lin_Controller* controller, void* context, ib_Lin_GoToSleepHandler_t handler); typedef ib_ReturnCode(*ib_Lin_Controller_RegisterWakeupHandler_t)(ib_Lin_Controller* controller, void* context, ib_Lin_WakeupHandler_t handler); typedef ib_ReturnCode(*ib_Lin_Controller_SetFrameResponse_t)(ib_Lin_Controller* controller, const ib_Lin_Frame* frame, ib_Lin_FrameResponseMode mode);
new:
typedef ib_ReturnCode(*ib_Lin_Controller_AddFrameStatusHandler_t)(ib_Lin_Controller* controller, void* context, ib_Lin_FrameStatusHandler_t handler); typedef ib_ReturnCode(*ib_Lin_Controller_AddGoToSleepHandler_t)(ib_Lin_Controller* controller, void* context, ib_Lin_GoToSleepHandler_t handler); typedef ib_ReturnCode(*ib_Lin_Controller_AddWakeupHandler_t)(ib_Lin_Controller* controller, void* context, ib_Lin_WakeupHandler_t handler); typedef ib_ReturnCode(*ib_Lin_Controller_SetFrameResponse_t)(ib_Lin_Controller* controller, const ib_Lin_FrameResponse* frameResponse);
Can
IntegrationBus/include/ib/sim/can/ICanController.hpp
old:
using ReceiveMessageHandler = CallbackT<CanMessage>; using StateChangedHandler = CallbackT<CanState>; using ErrorStateChangedHandler = CallbackT<CanErrorState>; using MessageStatusHandler = CallbackT<CanTransmitAcknowledge>; ICanController::RegisterReceiveMessageHandler(ReceiveMessageHandler handler); ICanController::RegisterStateChangedHandler(StateChangedHandler handler); ICanController::RegisterErrorStateChangedHandler(ErrorStateChangedHandler handler); ICanController::RegisterTransmitStatusHandler(MessageAckHandler handler); ICanController::SendMessage(const CanMessage& msg, void* userContext = nullptr) -> CanTxId;
new:
using FrameHandler = CallbackT<CanFrameEvent>; using StateChangeHandler = CallbackT<CanStateChangeEvent>; using ErrorStateChangeHandler = CallbackT<CanErrorStateChangeEvent>; using FrameTransmitHandler = CallbackT<CanFrameTransmitEvent>; ICanController::AddFrameHandler(FrameHandler handler); ICanController::AddStateChangeHandler(StateChangeHandler handler); ICanController::AddErrorStateChangeHandler(ErrorStateChangeHandler handler); ICanController::AddFrameTransmitHandler(FrameTransmitHandler handler); ICanController::SendFrame(const CanFrame& msg, void* userContext = nullptr) -> CanTxId;
IntegrationBus/include/ib/sim/can/CanDatatypes.hpp
(C++-Api)old:
struct CanMessage { CanTxId transmitId; //!< Set by the CanController, used for acknowledgements std::chrono::nanoseconds timestamp; //!< Reception time // CAN message content ... }; struct CanTransmitAcknowledge {...};
new:
struct CanFrame { // CAN frame content ... }; struct CanFrameTransmitEvent {...};
added:
struct CanFrameEvent { CanTxId transmitId; //!< Set by the CanController, used for acknowledgements std::chrono::nanoseconds timestamp; //!< Send time CanFrame frame; //!< The incoming CAN Frame }; struct CanStateChangeEvent { std::chrono::nanoseconds timestamp; //!< Timestamp of the state change. CanControllerState state; //!< The new state }; struct CanErrorStateChangeEvent { std::chrono::nanoseconds timestamp; //!< Timestamp of the state change. CanErrorState errorState; //!< The new error state };
IntegrationBus/include/ib/capi/Can.h
Data types
old:
struct ib_Can_Frame { ... uint32_t flags; //!< CAN Arbitration and Control Field Flags; see ib_Can_MessageFlag ... }; struct ib_Can_Message{...}; struct ib_Can_TransmitAcknowledge{...};
new:
struct ib_Can_Frame { ... ib_Can_FrameFlag flags; //!< CAN Arbitration and Control Field Flags; see ib_Can_FrameFlag ... }; struct ib_Can_FrameEvent{...}; struct ib_Can_FrameTransmitEvent{...};
added:
struct ib_Can_StateChangeEvent { ib_InterfaceIdentifier interfaceId; //!< The interface id specifying which version of this struct was obtained ib_NanosecondsTime timestamp; //!< Reception time ib_Can_ControllerState state; //!< CAN controller state }; struct ib_Can_ErrorStateChangeEvent { ib_InterfaceIdentifier interfaceId; //!< The interface id specifying which version of this struct was obtained ib_NanosecondsTime timestamp; //!< Reception time ib_Can_ErrorState errorState; //!< CAN controller error state };
Handlers
old:
typedef void (*ib_Can_TransmitStatusHandler_t)(void* context, ib_Can_Controller* controller, ib_Can_TransmitAcknowledge* acknowledge); typedef void (*ib_Can_ReceiveMessageHandler_t)(void* context, ib_Can_Controller* controller, ib_Can_Message* metaData); typedef void (*ib_Can_StateChangedHandler_t)(void* context, ib_Can_Controller* controller, ib_Can_ControllerState state); typedef void (*ib_Can_ErrorStateChangedHandler_t)(void* context, ib_Can_Controller* controller, ib_Can_ErrorState errorState);
new:
typedef void (*ib_Can_FrameTransmitHandler_t)(void* context, ib_Can_Controller* controller, ib_Can_FrameTransmitEvent* frameTransmitEvent); typedef void (*ib_Can_FrameHandler_t)(void* context, ib_Can_Controller* controller, ib_Can_FrameEvent* frameEvent); typedef void (*ib_Can_StateChangeHandler_t)(void* context, ib_Can_Controller* controller, ib_Can_StateChangeEvent stateChangeEvent); typedef void (*ib_Can_ErrorStateChangeHandler_t)(void* context, ib_Can_Controller* controller, ib_Can_ErrorStateChangeEvent errorStateChangeEvent);
Methods
old:
typedef ib_ReturnCode (*ib_Can_Controller_RegisterTransmitStatusHandler_t)( ib_Can_Controller* controller, void* context, ib_Can_TransmitStatusHandler_t handler, ib_Can_TransmitStatus statusMask); typedef ib_ReturnCode (*ib_Can_Controller_RegisterReceiveMessageHandler_t)(ib_Can_Controller* controller, void* context, ib_Can_ReceiveMessageHandler_t handler); typedef ib_ReturnCode (*ib_Can_Controller_RegisterStateChangedHandler_t)(ib_Can_Controller* controller, void* context, ib_Can_StateChangedHandler_t handler); typedef ib_ReturnCode (*ib_Can_Controller_RegisterErrorStateChangedHandler_t)(ib_Can_Controller* controller, void* context, ib_Can_ErrorStateChangedHandler_t handler);
new:
typedef ib_ReturnCode (*ib_Can_Controller_AddFrameTransmitHandler_t)( ib_Can_Controller* controller, void* context, ib_Can_FrameTransmitHandler_t handler, ib_Can_TransmitStatus statusMask); typedef ib_ReturnCode (*ib_Can_Controller_AddFrameHandler_t)(ib_Can_Controller* controller, void* context, ib_Can_FrameHandler_t handler); typedef ib_ReturnCode (*ib_Can_Controller_AddStateChangeHandler_t)(ib_Can_Controller* controller, void* context, ib_Can_StateChangeHandler_t handler); typedef ib_ReturnCode (*ib_Can_Controller_AddErrorStateChangeHandler_t)(ib_Can_Controller* controller, void* context, ib_Can_ErrorStateChangeHandler_t handler);
Ethernet
Renamed files
IntegrationBus/include/ib/sim/eth/EthDatatypes.hpp
toEthernetDatatypes.hpp
IntegrationBus/include/ib/sim/eth/IEthController.hpp
toIEthernetController.hpp
IntegrationBus/include/ib/mw/IParticipant.hpp
old:
IParticipant::CreateEthController(const std::string& canonicalName, const std::string& networkName) IParticipant::CreateEthController(const std::string& canonicalName) -> sim::eth::IEthController*;
new:
IParticipant::CreateEthernetController(const std::string& canonicalName, const std::string& networkName) IParticipant::CreateEthernetController(const std::string& canonicalName) -> sim::eth::IEthernetController*;
IntegrationBus/include/ib/sim/eth/IEthController.hpp
old:
using ReceiveMessageHandler = CallbackT<EthMessage>; using MessageAckHandler = CallbackT<EthTransmitAcknowledge>; using StateChangedHandler = CallbackT<EthState>; using BitRateChangedHandler = CallbackT<uint32_t>; IEthController::RegisterReceiveMessageHandler(ReceiveMessageHandler handler); IEthController::RegisterMessageAckHandler(MessageAckHandler handler); IEthController::RegisterStateChangedHandler(StateChangedHandler handler); IEthController::RegisterBitRateChangedHandler(BitRateChangedHandler handler); IEthController::SendFrame(EthFrame msg) -> EthTxId;
new:
using FrameHandler = CallbackT<EthernetFrameEvent>; using FrameTransmitHandler = CallbackT<EthernetFrameTransmitEvent>; using StateChangeHandler = CallbackT<EthernetStateChangeEvent>; using BitrateChangeHandler = CallbackT<EthernetBitrateChangeEvent>; IEthernetController::AddFrameHandler(FrameHandler handler); IEthernetController::AddFrameTransmitHandler(FrameTransmitHandler handler); IEthernetController::AddStateChangeHandler(StateChangeHandler handler); IEthernetController::AddBitrateChangeHandler(BitrateChangeHandler handler); IEthernetController::SendFrame(EthernetFrame msg) -> EthernetTxId;
IntegrationBus/include/ib/sim/eth/EthDatatypes.hpp
(C++-Api)For clarity, only the renaming overview is given in old and new. Internal member names have changed accordingly. Additional data types follow in added.
old:
EthMac EthVid EthTagControlInformation EthFrame EthTxId EthMessage EthTransmitStatus EthTransmitAcknowledge EthState EthStatus EthMode EthSetMode
new:
EthernetMac EthernetVid EthernetTagControlInformation EthernetFrame EthernetTxId EthernetFrameEvent EthernetTransmitStatus EthernetFrameTransmitEvent EthernetState EthernetStatus EthernetMode EthernetSetMode
added:
struct EthernetStateChangeEvent { std::chrono::nanoseconds timestamp; //!< Timestamp of the state change. EthernetState state; //!< State of the Ethernet controller. }; using EthernetBitrate = uint32_t; struct EthernetBitrateChangeEvent { std::chrono::nanoseconds timestamp; //!< Timestamp of the state change. EthernetBitrate bitrate; //!< Bit rate in kBit/sec of the link when in state LinkUp, otherwise zero. };
IntegrationBus/include/ib/capi/Ethernet.h
Data types
old:
ib_Ethernet_Message ib_Ethernet_TransmitAcknowledge
new:
ib_Ethernet_FrameEvent ib_Ethernet_FrameTransmitEvent
added:
typedef struct { ib_InterfaceIdentifier interfaceId; //!< The interface id that specifies which version of this struct was obtained ib_NanosecondsTime timestamp; //!< Timestamp of the state change event ib_Ethernet_State state; //!< New state of the Ethernet controller } ib_Ethernet_StateChangeEvent; typedef uint32_t ib_Ethernet_Bitrate; //!< Bitrate in kBit/sec typedef struct { ib_InterfaceIdentifier interfaceId; //!< The interface id that specifies which version of this struct was obtained ib_NanosecondsTime timestamp; //!< Timestamp of the bitrate change event ib_Ethernet_Bitrate bitrate; //!< New bitrate in kBit/sec } ib_Ethernet_BitrateChangeEvent;
Handlers
old:
typedef void (*ib_Ethernet_ReceiveMessageHandler_t)(void* context, ib_Ethernet_Controller* controller, ib_Ethernet_Message* message); typedef void (*ib_Ethernet_FrameAckHandler_t)(void* context, ib_Ethernet_Controller* controller, ib_Ethernet_TransmitAcknowledge* acknowledge); typedef void (*ib_Ethernet_StateChangedHandler_t)(void* context, ib_Ethernet_Controller* controller, ib_Ethernet_State state); typedef void (*ib_Ethernet_BitRateChangedHandler_t)(void* context, ib_Ethernet_Controller* controller, uint32_t bitrate);
new:
typedef void (*ib_Ethernet_FrameHandler_t)(void* context, ib_Ethernet_Controller* controller, ib_Ethernet_FrameEvent* frameEvent); typedef void (*ib_Ethernet_FrameTransmitHandler_t)(void* context, ib_Ethernet_Controller* controller, ib_Ethernet_FrameTransmitEvent* frameTransmitEvent); typedef void (*ib_Ethernet_StateChangeHandler_t)(void* context, ib_Ethernet_Controller* controller, ib_Ethernet_StateChangeEvent stateChangeEvent); typedef void (*ib_Ethernet_BitrateChangeHandler_t)(void* context, ib_Ethernet_Controller* controller, ib_Ethernet_BitrateChangeEvent bitrateChangeEvent);
Methods
old:
typedef ib_ReturnCode(*ib_Ethernet_Controller_RegisterReceiveMessageHandler_t)( ib_Ethernet_Controller* controller, void* context, ib_Ethernet_ReceiveMessageHandler_t handler); typedef ib_ReturnCode(*ib_Ethernet_Controller_RegisterFrameAckHandler_t)( ib_Ethernet_Controller* controller, void* context, ib_Ethernet_FrameAckHandler_t handler); typedef ib_ReturnCode(*ib_Ethernet_Controller_RegisterStateChangedHandler_t)( ib_Ethernet_Controller* controller, void* context, ib_Ethernet_StateChangedHandler_t handler); typedef ib_ReturnCode(*ib_Ethernet_Controller_RegisterBitRateChangedHandler_t)( ib_Ethernet_Controller* controller, void* context, ib_Ethernet_BitRateChangedHandler_t handler); typedef ib_ReturnCode(*ib_Ethernet_Controller_SendFrame_t)( ib_Ethernet_Controller* controller, ib_Ethernet_Frame* frame, void* userContext);
new:
typedef ib_ReturnCode(*ib_Ethernet_Controller_AddFrameHandler_t)( ib_Ethernet_Controller* controller, void* context, ib_Ethernet_FrameHandler_t handler); typedef ib_ReturnCode(*ib_Ethernet_Controller_AddFrameTransmitHandler_t)( ib_Ethernet_Controller* controller, void* context, ib_Ethernet_FrameTransmitHandler_t handler); typedef ib_ReturnCode(*ib_Ethernet_Controller_AddStateChangeHandler_t)( ib_Ethernet_Controller* controller, void* context, ib_Ethernet_StateChangeHandler_t handler); typedef ib_ReturnCode(*ib_Ethernet_Controller_AddBitrateChangeHandler_t)( ib_Ethernet_Controller* controller, void* context, ib_Ethernet_BitrateChangeHandler_t handler);
Removed
The Lin Controller’s
SendFrame
andSendFrameHeader
with explicit timestamp are removed.IntegrationBus/include/ib/sim/lin/ILinController.hpp
old:
ILinController::SendFrame(LinFrame frame, FrameResponseType responseType, std::chrono::nanoseconds timestamp); ILinController::SendFrameHeader(LinIdT linId, std::chrono::nanoseconds timestamp);
IntegrationBus/include/ib/capi/Lin.h
old:
typedef ib_ReturnCode (*ib_Lin_Controller_SendFrameWithTimestamp_t)(ib_Lin_Controller* controller, const ib_Lin_Frame* frame, ib_Lin_FrameResponseType responseType, ib_NanosecondsTime timestamp); typedef ib_ReturnCode (*ib_Lin_Controller_SendFrameHeaderWithTimestamp_t)(ib_Lin_Controller* controller, ib_Lin_Id linId, ib_NanosecondsTime timestamp);
In the Cpp-Api, the Can Controller’s
SendMessage
variant with R-value CanFrame is removed.IntegrationBus/include/ib/sim/can/ICanController.hpp
old:
ICanController::SendMessage(CanMessage&& msg, void* userContext = nullptr) -> CanTxId;
In the Cpp-Api, the Ethernet Controller’s
SendFrame
variant with explicit timestamp is removed.IntegrationBus/include/ib/sim/eth/IEthController.hpp
old:
IEthController::SendFrame(EthFrame msg, std::chrono::nanoseconds timestamp) -> EthTxId;
Fixed
Guard against execution of an already scheduled SimulationTask if the state of the simulation is not Running.
[3.99.20] - 2022-04-20
This delivery is the first public delivery since 3.6.1. Since then, development has focused on preparing the public open source release of the Vector Integration Bus in August 2022. This delivery is not ABI/API/network compatible to earlier 3.x deliveries. Future 3.99.x deliveries are not expected to be API/ABI/network compatible to each other as we finalize the API and network layer for the public open source 4.0 release. These deliveries are intended for evaluation purposes and to make the current status of the Vector Integration Bus as transparent as possible.
In this delivery the DataMessage API is stabilized such that it resembles the final API as closely as possible. See the earlier changelog entries since 3.6.1 for further information considering API changes (especially 3.99.19). Other parts will still undergo changes for improved consistency within the API.
Major changes since 3.6.1 (see changelog for details):
Introduction of optional and distributed participant configuration
DataMessage API as replacement for IoControllers and GenericMessage API
Remote Procedure Call API
Refactoring of CLI of Utilities to be consistent
Tracing and Replay currently not functional
Changed
In the C-Api, the Participant’s
ib_Participant_RegisterParticipantStateHandler
is removed and replaced by the more detailed variantib_Participant_RegisterParticipantStatusHandler
.IntegrationBus/include/ib/capi/Participant.h
old:
typedef void (*ib_ParticipantStateHandler_t)(void* context, ib_Participant* participant, const char* participantName, ib_ParticipantState state); // typedef was missing, API is: IntegrationBusAPI ib_ReturnCode ib_Participant_RegisterParticipantStateHandler(ib_Participant* participant, void* context, ib_ParticipantStateHandler_t handler);
new:
typedef struct { ib_InterfaceIdentifier interfaceId; const char* participantName; //!< Name of the participant. ib_ParticipantState participantState; //!< The new state of the participant. const char* enterReason; //!< The reason for the participant to enter the new state. ib_NanosecondsWallclockTime enterTime; //!< The enter time of the participant. ib_NanosecondsWallclockTime refreshTime; //!< The refresh time. } ib_ParticipantStatus; typedef void (*ib_ParticipantStatusHandler_t)(void* context, ib_Participant* participant, const char* participantName, ib_ParticipantStatus status); typedef ib_ReturnCode (*ib_Participant_RegisterParticipantStatusHandler_t)(ib_Participant* participant, void* context, ib_ParticipantStatusHandler_t handler);
Removed
The SystemMonitor’s
RegisterParticipantStateHandler
is removed, its functionality is already covered byRegisterParticipantStatusHandler
.IntegrationBus/include/ib/mw/sync/ISystemMonitor.hpp
old:
ISystemMonitor::RegisterParticipantStateHandler(ParticipantStateHandlerT handler);
Fixed
Fixed bug of no data transmission related to delayed DefaultDataMessageHandler registration
Complete list of changes to the C++ API (click to expand)
--- a/IntegrationBus/include/ib/mw/sync/ISystemMonitor.hpp
class ISystemMonitor
- using ParticipantStateHandlerT = std::function<void(ParticipantState)>;
- virtual void RegisterParticipantStateHandler(ParticipantStateHandlerT handler) = 0;
Complete list of changes to the C API (click to expand)
--- IntegrationBus/include/ib/capi/InterfaceIdentifiers.h
+#define ib_InterfaceIdentifier_ParticipantStatus ((ib_InterfaceIdentifier)7001001)
--- a/IntegrationBus/include/ib/capi/Participant.h
+typedef uint64_t ib_NanosecondsWallclockTime; //!< Wall clock time since epoch
+typedef struct
+{
+ ib_InterfaceIdentifier interfaceId;
+ const char* participantName; //!< Name of the participant.
+ ib_ParticipantState participantState; //!< The new state of the participant.
+ const char* enterReason; //!< The reason for the participant to enter the new state.
+ ib_NanosecondsWallclockTime enterTime; //!< The enter time of the participant.
+ ib_NanosecondsWallclockTime refreshTime; //!< The refresh time.
+} ib_ParticipantStatus;
-typedef void (*ib_ParticipantStateHandler_t)(void* context, ib_Participant* participant, const char* participantName, ib_ParticipantState state);
+typedef void (*ib_ParticipantStatusHandler_t)(void* context, ib_Participant* participant, const char* participantName, ib_ParticipantStatus status);
-IntegrationBusAPI ib_ReturnCode ib_Participant_RegisterParticipantStateHandler(ib_Participant* participant, void* context, ib_ParticipantStateHandler_t handler);
+IntegrationBusAPI ib_ReturnCode ib_Participant_RegisterParticipantStatusHandler(ib_Participant* participant, void* context, ib_ParticipantStatusHandler_t handler);
+typedef ib_ReturnCode (*ib_Participant_RegisterParticipantStatusHandler_t)(ib_Participant* participant, void* context, ib_ParticipantStatusHandler_t handler);
[3.99.19] - 2022-04-19
In this delivery we stabilized the DataMessage API.
Added
Participant methods to create DataPublisher, DataSubscriber, RpcClient and RpcServer now have an simplified overload with the controller name (‘canonicalName’) as single argument. In this variant, the controller name is used as topic/rpcChannel. The C-Api doesn’t provide these simplified methods.
IntegrationBus/include/ib/mw/IParticipant.hpp
new:
IParticipant::CreateDataPublisher(const string& canonicalName) -> ...; IParticipant::CreateDataSubscriber(const string& canonicalName) -> ...; IParticipant::CreateRpcClient(const string& canonicalName) -> ...; IParticipant::CreateRpcServer(const string& canonicalName) -> ...;
Removed
The typedef
ib::mw::sync::IParticipantController::TaskHandleT
was removed due to not being used anywhere.The header
IntegrationBus/include/ib/mw/sync/ISyncMaster.hpp
was removed due to not being used anywhere.Replaced the single-member struct
DataExchangeFormat
with its sole member, the media type string. The following data type and some associated free functions were removed:IntegrationBus/include/ib/sim/data/DataMessageDatatypes.hpp
struct ib::sim::data::DataExchangeFormat; bool operator ==(const DataExchangeFormat &, const DataExchangeFormat &);
IntegrationBus/include/ib/sim/data/string_utils.hpp
ib::sim::data::to_string(const DataExchangeFormat&) -> std::string; ib::sim::data::operator<<(std::ostream& out, const DataExchangeFormat& dataExchangeFormat) -> std::ostream&;
IntegrationBus/include/ib/capi/DataPubSub.h
typedef struct { ... } ib_Data_ExchangeFormat;
Changed
Updated documentation of Demos, Utilities and Configuration
Participant (formerly ‘ComAdapter’) methods to create DataPublisher, DataSubscriber, RpcClient and RpcServer now have an additional argument for the controller name. The controller name is used to to reference the controller in the configuration file (formerly, ‘topic’/’functionName’ was used).
IntegrationBus/include/ib/mw/IComAdapter.hpp
new:
IComAdapter::CreateDataPublisher(const string& canonicalName, ...) -> ...; IComAdapter::CreateDataSubscriber(const string& canonicalName, ...) -> ...; IComAdapter::CreateRpcClient(const string& canonicalName, ...) -> ...; IComAdapter::CreateRpcServer(const string& canonicalName, ...) -> ...;
IntegrationBus/include/ib/capi/DataPubSub.h
new:
typedef ib_ReturnCode (*ib_Data_Publisher_Create_t)(ib_Data_Publisher** outPublisher, ib_Participant* participant, const char* controllerName, ...); typedef ib_ReturnCode (*ib_Data_Subscriber_Create_t)(ib_Data_Subscriber** outSubscriber, ib_Participant* participant, const char* controllerName, ...);
Renamed Public-API for DataSubscriber:
IntegrationBus/include/ib/sim/data/IDataSubscriber.hpp
old:
IDataSubscriber::SetDefaultReceiveMessageHandler(...); IDataSubscriber::RegisterSpecificDataHandler(...);
new:
IDataSubscriber::SetDefaultDataMessageHandler(...); IDataSubscriber::AddExplicitDataMessageHandler(...);
IntegrationBus/include/ib/capi/DataPubSub.h
old:
typedef ib_ReturnCode (*ib_Data_Subscriber_SetDefaultReceiveDataHandler_t)(...); typedef ib_ReturnCode (*ib_Data_Subscriber_RegisterSpecificDataHandler_t)(...);
new:
typedef ib_ReturnCode (*ib_Data_Subscriber_SetDefaultDataMessageHandler_t)(...); typedef ib_ReturnCode (*ib_Data_Subscriber_AddExplicitDataMessageHandler_t)(...);
Renamed/wrapped structs and using statements in PubSub-context for the C/Cpp-API:
old:
// Cpp-API using DataHandlerT = std::function<void(ib::sim::data::IDataSubscriber* subscriber, const std::vector<uint8_t>& data)>; using NewDataSourceHandlerT = std::function<void(ib::sim::data::IDataSubscriber* subscriber, const std::string& topic, const std::string& mediaType, const std::map<std::string, std::string>& labels)>; // C-API typedef void (*ib_Data_Handler_t)(void* context, ib_Data_Subscriber* subscriber, const ib_ByteVector* data); typedef void (*ib_Data_NewDataSourceHandler_t)(void* context, ib_Data_Subscriber* subscriber, const char* topic, const char* mediaType, const ib_KeyValueList* labels);
new:
The new DataMessageEvent now contains a timestamp with the send time set by the DataPublisher. Formerly, the reception callback only contained the raw data. The information about a new DataPublisher in the NewDataPublisherHandlerT now is bundeled in a stuct called ‘NewDataPublisherEvent’ also containing a reception timestamp.
// Cpp-API using DataMessageHandlerT = std::function<void(ib::sim::data::IDataSubscriber* subscriber, const DataMessageEvent& dataMessageEvent)>; using NewDataPublisherHandlerT = std::function<void(ib::sim::data::IDataSubscriber* subscriber, const NewDataPublisherEvent& newDataPublisherEvent)>; // C-API typedef void (*ib_Data_DataMessageHandler_t)(void* context, ib_Data_Subscriber* subscriber, const ib_Data_DataMessageEvent* dataMessageEvent); typedef void (*ib_Data_NewDataPublisherHandler_t)(void* context, ib_Data_Subscriber* subscriber, const ib_Data_NewDataPublisherEvent* newDataPublisherEvent);
The header
EndpointAddress.hpp
,IReplay.hpp
,ITraceMessageSink.hpp
,ITraceMessageSource.hpp
andTraceMessage.hpp
are now internal headers. The typedefib::mw::ParticipantId
which used to be defined here was moved into its own public header file.IntegrationBus/include/ib/mw/ParticipantId.hpp
new:
using ParticipantId = ...;
IntegrationBus/include/ib/mw/sync/SyncDatatypes.hpp
old:
#include "ib/mw/EndpointAddress.hpp"
new:
#include "ib/mw/ParticipantId.hpp"
Replaced the single-member struct
DataExchangeFormat
with its sole member, the media type string. The following method and function type signatures have changed:old:
IComAdapter::CreateDataPublisher(..., const DataExchangeFormat&, ...) -> ...; IComAdapter::CreateDataSubscriber(..., const DataExchangeFormat&, ...) -> ...;
new:
IComAdapter::CreateDataPublisher(..., const std::string& ...) -> ...; IComAdapter::CreateDataSubscriber(..., const std::string& ...) -> ...;
IntegrationBus/include/ib/sim/data/DataMessageDatatypes.hpp
old:
NewDataSourceHandlerT = std::function<void(..., const DataExchangeFormat&, ...)>;
new:
NewDataSourceHandlerT = std::function<void(..., const std::string&, ...)>;
IntegrationBus/include/ib/sim/data/IDataSubscriber.hpp
old:
IDataSubscriber::RegisterSpecificDataHandler(const DataExchangeFormat&, ...) -> ...;
new:
IDataSubscriber::RegisterSpecificDataHandler(const std::string&, ...) -> ...;
IntegrationBus/include/ib/capi/DataPubSub.h
old:
typedef void (*ib_Data_NewDataSourceHandler_t)(..., const ib_Data_ExchangeFormat* dataExchangeFormat, ...); IntegrationBusAPI ib_ReturnCode ib_Data_Publisher_Create(..., ib_Data_ExchangeFormat* dataExchangeFormat, ...); typedef ib_ReturnCode (*ib_Data_Publisher_Create_t)(..., ib_Data_ExchangeFormat* dataExchangeFormat, ...); IntegrationBusAPI ib_ReturnCode ib_Data_Subscriber_Create(..., ib_Data_ExchangeFormat* dataExchangeFormat, ...); typedef ib_ReturnCode (*ib_Data_Subscriber_Create_t)(..., ib_Data_ExchangeFormat* dataExchangeFormat, ...); IntegrationBusAPI ib_ReturnCode ib_Data_Subscriber_RegisterSpecificDataHandler(..., ib_Data_ExchangeFormat* dataExchangeFormat, ...);
new:
typedef void (*ib_Data_NewDataSourceHandler_t)(..., const char* mediaType, ...); IntegrationBusAPI ib_ReturnCode ib_Data_Publisher_Create(..., const char* mediaType, ...); typedef ib_ReturnCode (*ib_Data_Publisher_Create_t)(..., const char* mediaType, ...); IntegrationBusAPI ib_ReturnCode ib_Data_Subscriber_Create(..., const char* mediaType, ...); typedef ib_ReturnCode (*ib_Data_Subscriber_Create_t)(..., const char* mediaType, ...); IntegrationBusAPI ib_ReturnCode ib_Data_Subscriber_RegisterSpecificDataHandler(..., const char* mediaType, ...);
Renamed
ib::mw::IComAdapter
toib::mw::IParticipant
, and renamedIntegrationBus/include/ib/mw/IComAdapter.hpp
toIntegrationBus/include/ib/mw/IParticipant.hpp
. Further renamed methodib::CreateSimulationParticipant(...)
toib::CreateParticipant(...)
:IntegrationBus/include/ib/IntegrationBus.hpp
old:
IntegrationBusAPI auto CreateSimulationParticipant( std::shared_ptr<ib::cfg::IParticipantConfiguration> participantConfig, const std::string& participantName, const uint32_t domainId, bool isSynchronized) -> std::unique_ptr<mw::IComAdapter>;
new:
IntegrationBusAPI auto CreateParticipant( std::shared_ptr<ib::cfg::IParticipantConfiguration> participantConfig, const std::string& participantName, const uint32_t domainId, bool isSynchronized) -> std::unique_ptr<mw::IParticipant>;
Note
The isSynchronized parameter is temporary and will be removed in the future.
Complete list of changes to the C++ API (click to expand)
--- IntegrationBus/include/ib/IntegrationBus.hpp
-CreateSimulationParticipant(...) -> std::unique_ptr<mw::IComAdapter>;
+CreateParticipant(...) -> std::unique_ptr<mw::IParticipant>;
--- IntegrationBus/include/ib/mw/IParticipant.hpp
rename from IntegrationBus/include/ib/mw/IComAdapter.hpp
rename to IntegrationBus/include/ib/mw/IParticipant.hpp
-class IComAdapter
+class IParticipant
- virtual ~IComAdapter() = default;
+ virtual ~IParticipant() = default;
+ virtual auto CreateDataPublisher(const std::string& canonicalName) -> sim::data::IDataPublisher* = 0;
+ virtual auto CreateDataSubscriber(const std::string& canonicalName) -> sim::data::IDataSubscriber* = 0;
+ virtual auto CreateRpcClient(const std::string& canonicalName) -> sim::rpc::IRpcClient* = 0;
+ virtual auto CreateRpcServer(const std::string& canonicalName) -> sim::rpc::IRpcServer* = 0;
- virtual auto CreateDataPublisher(const std::string& topic, const sim::data::DataExchangeFormat& dataExchangeFormat, ...);
+ virtual auto CreateDataPublisher(const std::string& canonicalName, const std::string& topic, const std::string& mediaType, ...);
- virtual auto CreateDataSubscriber(
- const std::string& topic,
- const sim::data::DataExchangeFormat& dataExchangeFormat,
- ...,
- sim::data::DataHandlerT defaultDataHandler,
- sim::data::NewDataSourceHandlerT newDataSourceHandler = nullptr) -> ...;
+ virtual auto CreateDataSubscriber(
+ const std::string& canonicalName,
+ const std::string& topic, const std::string& mediaType,
+ ...,
+ sim::data::DataMessageHandlerT defaultDataMessageHandler,
+ sim::data::NewDataPublisherHandlerT newDataPublisherHandler = nullptr) -> ...;
- virtual auto CreateRpcClient(const std::string& functionName, ...) -> ...;
+ virtual auto CreateRpcClient(const std::string& canonicalName, const std::string& channel, ...) -> ...;
- virtual auto CreateRpcServer(const std::string& functionName, ...) -> ...;
+ virtual auto CreateRpcServer(const std::string& canonicalName, const std::string& channel, ...) -> ...;
- virtual void DiscoverRpcServers(const std::string& functionName, ...);
+ virtual void DiscoverRpcServers(const std::string& rpcChannel, ...);
--- IntegrationBus/include/ib/mw/ParticipantId.hpp
+using ParticipantId = uint64_t;
--- IntegrationBus/include/ib/mw/sync/IParticipantController.hpp
-using TaskHandleT = void*;
--- IntegrationBus/include/ib/mw/sync/ISyncMaster.hpp
removed IntegrationBus/include/ib/mw/sync/ISyncMaster.hpp
--- IntegrationBus/include/ib/mw/sync/ISystemMonitor.hpp
- virtual auto ParticipantStatus(const std::string& participantId) const -> const sync::ParticipantStatus& = 0;
+ virtual auto ParticipantStatus(const std::string& participantName) const -> const sync::ParticipantStatus& = 0;
--- IntegrationBus/include/ib/sim/data/DataMessageDatatypes.hpp
-struct DataExchangeFormat {
- std::string mediaType;
-};
-inline bool operator==(const DataExchangeFormat& lhs, const DataExchangeFormat& rhs)
-using DataHandlerT =
- std::function<void(ib::sim::data::IDataSubscriber* subscriber, const std::vector<uint8_t>& data)>;
+using DataMessageHandlerT =
+ std::function<void(ib::sim::data::IDataSubscriber* subscriber, const DataMessageEvent& dataMessageEvent)>;
-struct DataMessage {
- std::vector<uint8_t> data;
-};
+struct DataMessageEvent
+{
+ std::chrono::nanoseconds timestamp;
+ std::vector<uint8_t> data;
+};
+struct NewDataPublisherEvent
+{
+ std::chrono::nanoseconds timestamp;
+ std::string topic;
+ std::string mediaType;
+ std::map<std::string, std::string> labels;
+};
-using NewDataSourceHandlerT = std::function<void(ib::sim::data::IDataSubscriber* subscriber, const std::string& topic,
- const ib::sim::data::DataExchangeFormat& dataExchangeFormat,
- const std::map<std::string, std::string>& labels)>;
+using NewDataPublisherHandlerT =
+ std::function<void(ib::sim::data::IDataSubscriber* subscriber, const NewDataPublisherEvent& newDataPublisherEvent)>;
--- IntegrationBus/include/ib/sim/data/IDataSubscriber.hpp
- virtual void SetDefaultReceiveMessageHandler(DataHandlerT callback) = 0;
+ virtual void SetDefaultDataMessageHandler(DataMessageHandlerT callback) = 0;
- virtual void RegisterSpecificDataHandler(const DataExchangeFormat& dataExchangeFormat,
- const std::map<std::string, std::string>& labels,
- DataHandlerT callback) = 0;
+ virtual void AddExplicitDataMessageHandler(DataMessageHandlerT callback,
+ const std::string& mediaType,
+ const std::map<std::string, std::string>& labels) = 0;
--- IntegrationBus/include/ib/sim/data/fwd_decl.hpp
-struct DataMessage;
-struct DataExchangeFormat;
+struct DataMessageEvent;
--- IntegrationBus/include/ib/sim/data/string_utils.hpp
-inline std::string to_string(const DataExchangeFormat& dataExchangeFormat);
-inline std::ostream& operator<<(std::ostream& out, const DataExchangeFormat& dataExchangeFormat);
-inline std::string to_string(const DataMessage& msg);
+inline std::string to_string(const DataMessageEvent& msg);
-inline std::ostream& operator<<(std::ostream& out, const DataMessage& msg);
+inline std::ostream& operator<<(std::ostream& out, const DataMessageEvent& msg);
-std::string to_string(const DataMessage& msg)
+std::string to_string(const DataMessageEvent& msg)
-std::ostream& operator<<(std::ostream& out, const DataMessage& msg)
+std::ostream& operator<<(std::ostream& out, const DataMessageEvent& msg)
-std::string to_string(const DataExchangeFormat& dataExchangeFormat)
-std::ostream& operator<<(std::ostream& out, const DataExchangeFormat& dataExchangeFormat)
--- IntegrationBus/include/ib/sim/rpc/RpcDatatypes.hpp
struct RpcDiscoveryResult
{
- std::string functionName;
+ std::string rpcChannel;
...
};
--- IntegrationBus/include/ib/sim/rpc/string_utils.hpp
-inline std::string to_string(const RpcExchangeFormat& dataExchangeFormat);
+inline std::string to_string(const RpcExchangeFormat& rpcExchangeFormat);
-inline std::ostream& operator<<(std::ostream& out, const RpcExchangeFormat& dataExchangeFormat);
+inline std::ostream& operator<<(std::ostream& out, const RpcExchangeFormat& rpcExchangeFormat);
Complete List of changes to the C API (click to expand)
--- IntegrationBus/include/ib/capi/Types.h
-typedef struct ib_SimulationParticipant ib_SimulationParticipant;
+typedef struct ib_Participant ib_Participant;
--- IntegrationBus/include/ib/capi/IntegrationBus.h
-typedef ib_ReturnCode(*ib_SimulationParticipant_GetLogger_t)(..., ib_SimulationParticipant* participant);
+typedef ib_ReturnCode(*ib_Participant_GetLogger_t)(..., ib_Participant* participant);
-ib_ReturnCode ib_SimulationParticipant_GetLogger(..., ib_SimulationParticipant* participant);
+ib_ReturnCode ib_Participant_GetLogger(..., ib_Participant* participant);
--- IntegrationBus/include/ib/capi/InterfaceIdentifiers.h
-#define ib_InterfaceIdentifier_DataExchangeFormat ((ib_InterfaceIdentifier)5001001)
+#define ib_InterfaceIdentifier_DataMessageEvent ((ib_InterfaceIdentifier)5001001)
+#define ib_InterfaceIdentifier_NewDataPublisherEvent ((ib_InterfaceIdentifier)5001002)
--- IntegrationBus/include/ib/capi/Participant.h
rename from IntegrationBus/include/ib/capi/SimulationParticipant.h
rename to IntegrationBus/include/ib/capi/Participant.h
-ib_ReturnCode ib_SimulationParticipant_Create(ib_SimulationParticipant** outParticipant, ...);
+ib_ReturnCode ib_Participant_Create(ib_Participant** outParticipant, ...);
-typedef ib_ReturnCode (*ib_SimulationParticipant_Create_t)(ib_SimulationParticipant** outParticipant, ...);
+typedef ib_ReturnCode (*ib_Participant_Create_t)(ib_Participant** outParticipant, ...);
-ib_ReturnCode ib_SimulationParticipant_Destroy(ib_SimulationParticipant* participant);
+ib_ReturnCode ib_Participant_Destroy(ib_Participant* participant);
-typedef ib_ReturnCode (*ib_SimulationParticipant_Destroy_t)(ib_SimulationParticipant* participant);
+typedef ib_ReturnCode (*ib_Participant_Destroy_t)(ib_Participant* participant);
-typedef void (*ib_ParticipantInitHandler_t)(..., ib_SimulationParticipant* participant, ...);
+typedef void (*ib_ParticipantInitHandler_t)(.., ib_Participant* participant, ...);
-ib_ReturnCode ib_SimulationParticipant_SetInitHandler(ib_SimulationParticipant* participant, ...);
+ib_ReturnCode ib_Participant_SetInitHandler(ib_Participant* participant, ...);
-typedef ib_ReturnCode(*ib_SimulationParticipant_SetInitHandler_t)(ib_SimulationParticipant* participant, ...);
+typedef ib_ReturnCode(*ib_Participant_SetInitHandler_t)(ib_Participant* participant, ...);
-typedef void (*ib_ParticipantStopHandler_t)(..., ib_SimulationParticipant* participant);
+typedef void (*ib_ParticipantStopHandler_t)(..., ib_Participant* participant);
-ib_ReturnCode ib_SimulationParticipant_SetStopHandler(ib_SimulationParticipant* participant, ...);
+ib_ReturnCode ib_Participant_SetStopHandler(ib_Participant* participant, ...);
-typedef ib_ReturnCode(*ib_SimulationParticipant_SetStopHandler_t)(ib_SimulationParticipant* participant, ...);
+typedef ib_ReturnCode(*ib_Participant_SetStopHandler_t)(ib_Participant* participant, ...);
-typedef void (*ib_ParticipantShutdownHandler_t)(..., ib_SimulationParticipant* participant);
+typedef void (*ib_ParticipantShutdownHandler_t)(..., ib_Participant* participant);
-ib_ReturnCode ib_SimulationParticipant_SetShutdownHandler(ib_SimulationParticipant* participant, ...);
+ib_ReturnCode ib_Participant_SetShutdownHandler(ib_Participant* participant, ...);
-typedef ib_ReturnCode(*ib_SimulationParticipant_SetShutdownHandler_t)(ib_SimulationParticipant* participant, ...);
+typedef ib_ReturnCode(*ib_Participant_SetShutdownHandler_t)(ib_Participant* participant, ...);
-ib_ReturnCode ib_SimulationParticipant_Run(ib_SimulationParticipant* participant, ...);
+ib_ReturnCode ib_Participant_Run(ib_Participant* participant, ...);
-typedef ib_ReturnCode (*ib_SimulationParticipant_Run_t)(ib_SimulationParticipant* participant, ...);
+typedef ib_ReturnCode (*ib_Participant_Run_t)(ib_Participant* participant, ...);
-ib_ReturnCode ib_SimulationParticipant_RunAsync(ib_SimulationParticipant* participant);
+ib_ReturnCode ib_Participant_RunAsync(ib_Participant* participant);
-typedef ib_ReturnCode (*ib_SimulationParticipant_RunAsync_t)(ib_SimulationParticipant* participant);
+typedef ib_ReturnCode (*ib_Participant_RunAsync_t)(ib_Participant* participant);
-ib_ReturnCode ib_SimulationParticipant_WaitForRunAsyncToComplete(ib_SimulationParticipant* participant, ...);
+ib_ReturnCode ib_Participant_WaitForRunAsyncToComplete(ib_Participant* participant, ...);
-typedef ib_ReturnCode (*ib_SimulationParticipant_WaitForRunAsyncToComplete_t)(ib_SimulationParticipant* participant, ...);
+typedef ib_ReturnCode (*ib_Participant_WaitForRunAsyncToComplete_t)(ib_Participant* participant, ...);
-typedef ib_ReturnCode (*ib_SimulationParticipant_SetPeriod_t)(ib_SimulationParticipant* participant, ...);
+typedef ib_ReturnCode (*ib_Participant_SetPeriod_t)(ib_Participant* participant, ...);
-ib_ReturnCode ib_SimulationParticipant_SetPeriod(ib_SimulationParticipant* participant, ...);
+ib_ReturnCode ib_Participant_SetPeriod(ib_Participant* participant, ...);
-typedef void (*ib_ParticipantSimulationTaskHandler_t)(..., ib_SimulationParticipant* participant, ...);
+typedef void (*ib_ParticipantSimulationTaskHandler_t)(..., ib_Participant* participant, ...);
-ib_ReturnCode ib_SimulationParticipant_SetSimulationTask(ib_SimulationParticipant* participant, ...);
+ib_ReturnCode ib_Participant_SetSimulationTask(ib_Participant* participant, ...);
-typedef ib_ReturnCode(*ib_SimulationParticipant_SetSimulationTask_t)(ib_SimulationParticipant* participant, ...);
+typedef ib_ReturnCode(*ib_Participant_SetSimulationTask_t)(ib_Participant* participant, ...);
-ib_ReturnCode ib_SimulationParticipant_SetSimulationTaskAsync(ib_SimulationParticipant* participant, ...);
+ib_ReturnCode ib_Participant_SetSimulationTaskAsync(ib_Participant* participant, ...);
-typedef ib_ReturnCode(*ib_SimulationParticipant_SetSimulationTaskNonBlocking_t)(ib_SimulationParticipant* participant, ...);
+typedef ib_ReturnCode(*ib_Participant_SetSimulationTaskNonBlocking_t)(ib_Participant* participant, ...);
-ib_ReturnCode ib_SimulationParticipant_CompleteSimulationTask(ib_SimulationParticipant* participant);
+ib_ReturnCode ib_Participant_CompleteSimulationTask(ib_Participant* participant);
-typedef ib_ReturnCode(*ib_SimulationParticipant_CompleteSimulationTask_t)(ib_SimulationParticipant* participant);
+typedef ib_ReturnCode(*ib_Participant_CompleteSimulationTask_t)(ib_Participant* participant);
-ib_ReturnCode ib_SimulationParticipant_Initialize(ib_SimulationParticipant* participant, ...);
+ib_ReturnCode ib_Participant_Initialize(ib_Participant* participant, ...);
-ib_ReturnCode ib_SimulationParticipant_Reinitialize(ib_SimulationParticipant* participant, ...);
+ib_ReturnCode ib_Participant_Reinitialize(ib_Participant* participant, ...);
-ib_ReturnCode ib_SimulationParticipant_RunSimulation(ib_SimulationParticipant* participant);
+ib_ReturnCode ib_Participant_RunSimulation(ib_Participant* participant);
-ib_ReturnCode ib_SimulationParticipant_StopSimulation(ib_SimulationParticipant* participant);
+ib_ReturnCode ib_Participant_StopSimulation(ib_Participant* participant);
-ib_ReturnCode ib_SimulationParticipant_Pause(ib_SimulationParticipant* participant, ...);
+ib_ReturnCode ib_Participant_Pause(ib_Participant* participant, ...);
-ib_ReturnCode ib_SimulationParticipant_Continue(ib_SimulationParticipant* participant);
+ib_ReturnCode ib_Participant_Continue(ib_Participant* participant);
-ib_ReturnCode ib_SimulationParticipant_Shutdown(ib_SimulationParticipant* participant);
+ib_ReturnCode ib_Participant_Shutdown(ib_Participant* participant);
-ib_ReturnCode ib_SimulationParticipant_PrepareColdswap(ib_SimulationParticipant* participant);
+ib_ReturnCode ib_Participant_PrepareColdswap(ib_Participant* participant);
-ib_ReturnCode ib_SimulationParticipant_ExecuteColdswap(ib_SimulationParticipant* participant);
+ib_ReturnCode ib_Participant_ExecuteColdswap(ib_Participant* participant);
-ib_ReturnCode ib_SimulationParticipant_GetParticipantState(..., ib_SimulationParticipant* participant, ...);
+ib_ReturnCode ib_Participant_GetParticipantState(..., ib_Participant* participant, ...);
-ib_ReturnCode ib_SimulationParticipant_GetSystemState(..., ib_SimulationParticipant* participant);
+ib_ReturnCode ib_Participant_GetSystemState(..., ib_Participant* participant);
-typedef void (*ib_SystemStateHandler_t)(..., ib_SimulationParticipant* participant, ...);
+typedef void (*ib_SystemStateHandler_t)(..., ib_Participant* participant, ...);
-ib_ReturnCode ib_SimulationParticipant_RegisterSystemStateHandler(ib_SimulationParticipant* participant, ...);
+ib_ReturnCode ib_Participant_RegisterSystemStateHandler(ib_Participant* participant, ...);
-typedef void (*ib_ParticipantStateHandler_t)(..., ib_SimulationParticipant* participant, ...);
+typedef void (*ib_ParticipantStateHandler_t)(..., ib_Participant* participant, ...);
-ib_ReturnCode ib_SimulationParticipant_RegisterParticipantStateHandler(ib_SimulationParticipant* participant, ...);
+ib_ReturnCode ib_Participant_RegisterParticipantStateHandler(ib_Participant* participant, ...);
-ib_ReturnCode ib_SimulationParticipant_SetRequiredParticipants(ib_SimulationParticipant* participant, ...);
+ib_ReturnCode ib_Participant_SetRequiredParticipants(ib_Participant* participant, ...);
--- IntegrationBus/include/ib/capi/Can.h
-ib_ReturnCode ib_Can_Controller_Create(..., ib_SimulationParticipant* participant, ...);
+ib_ReturnCode ib_Can_Controller_Create(..., ib_Participant* participant, ...);
-typedef ib_ReturnCode (*ib_Can_Controller_Create_t)(..., ib_SimulationParticipant* participant, ...);
+typedef ib_ReturnCode (*ib_Can_Controller_Create_t)(..., ib_Participant* participant, ...);
--- IntegrationBus/include/ib/capi/Ethernet.h
-ib_ReturnCode ib_Ethernet_Controller_Create(..., ib_SimulationParticipant* participant, ...);
+ib_ReturnCode ib_Ethernet_Controller_Create(..., ib_Participant* participant, ...);
-typedef ib_ReturnCode(*ib_Ethernet_Controller_Create_t)(..., ib_SimulationParticipant* participant, ...);
--- IntegrationBus/include/ib/capi/FlexRay.h
-ib_ReturnCode ib_FlexRay_Controller_Create(..., ib_SimulationParticipant* participant, ...);
-ib_ReturnCode ib_FlexRay_Controller_Create(..., ib_Participant* participant, ...);
-typedef ib_ReturnCode (*ib_FlexRay_Controller_Create_t)(..., ib_SimulationParticipant* participant, ...);
+typedef ib_ReturnCode (*ib_FlexRay_Controller_Create_t)(..., ib_Participant* participant, ...);
--- IntegrationBus/include/ib/capi/Lin.h
-ib_ReturnCode ib_Lin_Controller_Create(..., ib_SimulationParticipant *participant, ...);
+ib_ReturnCode ib_Lin_Controller_Create(..., ib_Participant *participant, ...);
-typedef ib_ReturnCode (*ib_Lin_Controller_Create_t)(..., ib_SimulationParticipant* participant, ...);
-typedef ib_ReturnCode (*ib_Lin_Controller_Create_t)(..., ib_Participant* participant, ...);
--- IntegrationBus/include/ib/capi/Rpc.h
typedef struct ib_Rpc_DiscoveryResult
{
...
- const char* functionName;
+ const char* rpcChannel;
...
} ib_Rpc_DiscoveryResult;
-ib_ReturnCode ib_Rpc_Server_Create(..., ib_SimulationParticipant* participant, const char* functionName, ...)
+ib_ReturnCode ib_Rpc_Server_Create(..., ib_Participant* participant, const char* controllerName, const char* rpcChannel, ...);
-typedef ib_ReturnCode (*ib_Rpc_Server_Create_t)(..., ib_SimulationParticipant* participant, const char* functionName, ...);
+typedef ib_ReturnCode (*ib_Rpc_Server_Create_t)(..., ib_Participant* participant, const char* controllerName, const char* rpcChannel, ...);
-ib_ReturnCode ib_Rpc_Client_Create(..., ib_SimulationParticipant* participant, const char* functionName, ...);
+ib_ReturnCode ib_Rpc_Client_Create(..., ib_Participant* participant, const char* controllerName, const char* rpcChannel, ...);
-typedef ib_ReturnCode (*ib_Rpc_Client_Create_t)(..., ib_SimulationParticipant* participant, const char* functionName, ...);
+typedef ib_ReturnCode (*ib_Rpc_Client_Create_t)(..., ib_Participant* participant, const char* controllerName, const char* rpcChannel, ...);
-ib_ReturnCode ib_Rpc_DiscoverServers(ib_SimulationParticipant* participant, const char* functionName, ...);
+ib_ReturnCode ib_Rpc_DiscoverServers(ib_Participant* participant, const char* rpcChannel, ...);
-typedef ib_ReturnCode(*ib_Rpc_DiscoverServers_t)(ib_SimulationParticipant* participant, const char* functionName, ...);
+typedef ib_ReturnCode(*ib_Rpc_DiscoverServers_t)(ib_Participant* participant, const char* rpcChannel, ...);
--- IntegrationBus/include/ib/capi/DataPubSub.h
-typedef struct { ... } ib_Data_ExchangeFormat;
+typedef struct
+{
+ ib_InterfaceIdentifier interfaceId;
+ ib_NanosecondsTime timestamp;
+ ib_ByteVector data;
+} ib_Data_DataMessageEvent;
+typedef struct
+{
+ ib_InterfaceIdentifier interfaceId;
+ ib_NanosecondsTime timestamp;
+ const char* topic;
+ const char* mediaType;
+ ib_KeyValueList* labels;
+} ib_Data_NewDataPublisherEvent;
-typedef void (*ib_Data_Handler_t)(..., const ib_ByteVector* data);
+typedef void (*ib_Data_DataMessageHandler_t)(..., const ib_Data_DataMessageEvent* dataMessageEvent);
-typedef void (*ib_Data_NewDataSourceHandler_t)(..., const char* topic, const ib_Data_ExchangeFormat* dataExchangeFormat, const ib_KeyValueList* labels);
+typedef void (*ib_Data_NewDataPublisherHandler_t)(..., const ib_Data_NewDataPublisherEvent* newDataPublisherEvent);
-ib_ReturnCode ib_Data_Publisher_Create(..., ib_SimulationParticipant* participant, const char* topic, ib_Data_ExchangeFormat* dataExchangeFormat, ...);
+ib_ReturnCode ib_Data_Publisher_Create(..., ib_Participant* participant, const char* controllerName, const char* topic, const char* mediaType, ...);
-typedef ib_ReturnCode (*ib_Data_Publisher_Create_t)(..., ib_SimulationParticipant* participant, const char* topic, ib_Data_ExchangeFormat* dataExchangeFormat, ...);
+typedef ib_ReturnCode (*ib_Data_Publisher_Create_t)(..., ib_Participant* participant, const char* controllerName, const char* topic, const char* mediaType, ...);
-ib_ReturnCode ib_Data_Subscriber_Create(
- ...,
- ib_SimulationParticipant* participant,
- const char* topic,
- ib_Data_ExchangeFormat* dataExchangeFormat,
- ...,
- ib_Data_Handler_t defaultDataHandler,
- ...,
- ib_Data_NewDataSourceHandler_t newDataSourceHandler);
+ib_ReturnCode ib_Data_Subscriber_Create(
+ ...,
+ ib_Participant* participant,
+ const char* controllerName,
+ const char* topic,
+ const char* mediaType,
+ ...,
+ ib_Data_DataMessageHandler_t defaultDataHandler,
+ ...,
+ ib_Data_NewDataPublisherHandler_t newDataSourceHandler);
-typedef ib_ReturnCode (*ib_Data_Subscriber_Create_t)(
- ...,
- ib_SimulationParticipant* participant,
- const char* topic,
- ib_Data_ExchangeFormat* dataExchangeFormat,
- ...,
- ib_Data_Handler_t defaultDataHandler,
- ...,
- ib_Data_NewDataSourceHandler_t newDataSourceHandler);
+typedef ib_ReturnCode (*ib_Data_Subscriber_Create_t)(
+ ...,
+ ib_Participant* participant,
+ const char* controllerName,
+ const char* topic,
+ const char* mediaType,
+ ...,
+ ib_Data_DataMessageHandler_t defaultDataHandler,
+ ...,
+ ib_Data_NewDataPublisherHandler_t newDataSourceHandler);
-typedef ib_ReturnCode (*ib_Data_Subscriber_SetDefaultReceiveDataHandler_t)(
- ...,
- ib_Data_Handler_t dataHandler);
+typedef ib_ReturnCode (*ib_Data_Subscriber_SetDefaultDataMessageHandler_t)(
+ ...,
+ ib_Data_DataMessageHandler_t dataHandler);
-ib_ReturnCode ib_Data_Subscriber_SetDefaultReceiveDataHandler(
- ...,
- ib_Data_Handler_t dataHandler);
+ib_ReturnCode ib_Data_Subscriber_SetDefaultDataMessageHandler(
+ ...,
+ ib_Data_DataMessageHandler_t dataHandler);
-ib_ReturnCode ib_Data_Subscriber_RegisterSpecificDataHandler(
- ib_Data_Subscriber* self,
- ib_Data_ExchangeFormat* dataExchangeFormat,
- const ib_KeyValueList* labels,
- void* context,
- ib_Data_Handler_t dataHandler);
+ib_ReturnCode ib_Data_Subscriber_AddExplicitDataMessageHandler(
+ ib_Data_Subscriber* self,
+ void* context,
+ ib_Data_DataMessageHandler_t dataHandler,
+ const char* mediaType,
+ const ib_KeyValueList* labels);
-typedef ib_ReturnCode (*ib_Data_Subscriber_RegisterSpecificDataHandler_t)(
- ib_Data_Subscriber* self,
- ib_Data_ExchangeFormat* dataExchangeFormat,
- const ib_KeyValueList* labels,
- void* context,
- ib_Data_Handler_t dataHandler);
+typedef ib_ReturnCode (*ib_Data_Subscriber_AddExplicitDataMessageHandler_t)(
+ ib_Data_Subscriber* self,
+ void* context,
+ ib_Data_DataMessageHandler_t dataHandler,
+ const char* mediaType,
+ const ib_KeyValueList* labels);
[3.7.18] - 2022-04-05
Added
Support for MinGW builds was added. The CI builds use the native MinGW builds from winlibs, but a cross-compile CMake toolchain file is provided in IntegrationBus/cmake/mingw-w64-toolchain.cmake. Warnings are not treated as errors for this compilation target, due to some known issues in the MinGW-w64 toolchain.
MinGW libraries are not distributed as part of VIB packages. The user must ensure that the following libraries are in PATH:
libgcc_s_seh-1.dll libstdc++-6.dll libwinpthread-1.dll
Fixed
Fixed typo in IbRegistry command help output.
Fixed typo in IbSystemMonitor command help output.
The IbRegistry hostname defined in the configuration is now resolved and used to create listening sockets. IPv6 addresses are not supported, yet.
The lin::LinControllerConfig data type now uses a message history of size 1. If the value was set by a LinController::Init call, it will be retained and automatically transmitted to newly connecting participants.
Changed
Demo adaptions - Ethernet Demo only uses Set/GetRawFrame calls - CAN & Ethernet demo can now run as asynchronous participants (add –async as command line argument)
Updated documentation of network simulator and Simulation Concepts
[3.7.13] - 2022-03-24
This is an internal build.
Changed
Added a new command line parser for all utilities, to have a consistent user experience. Long and short options are supported, invoke the utilities with –help to see a list of supported options:
old:
IbRegistry Configuration.json 42
new:
IbRegistry --domain 42 Configuration.json #the following lists all supported options: IbRegistry --help
old:
IbSystemController 42 participant1 participant2 ...
new:
IbSystemController --domain 42 participant1 participant2 ...
The VIBE-NetworkSimulator also supports this new command line interface.
Fixed:
The IntegrationBus shared library does not log to stdout anymore. The internal logger is now used when loading extensions or creating named pipes.
CAN: send a valid FD frame in CAN Demo by setting hte FD format indicator.
[3.7.8] - 2022-03-09
This is an internal build.
Removed
Removed deprecated ISystemController functions Initialize() and Reinitialize() which took a numeric participant id as argument. Use participant names instead.
old:
void ib::mw::sync::ISystemController::Initialize(ParticipantId) const; void ib::mw::sync::ISystemController::Reinitialize(ParticipantId participantId) const;
new:
void ib::mw::sync::ISystemController::Initialize(const std::string& participantName) const; void ib::mw::sync::ISystemController::Reinitialize(const std::string& participantName) const;
Removed the ConfigBuilder from the public API in the include/ib directory. The following headers were removed:
include/ib/cfg/ConfigBuilder.hpp include/ib/cfg/ControllerBuilder.hpp include/ib/cfg/DataPortBuilder.hpp include/ib/cfg/ExtensionConfigBuilder.hpp include/ib/cfg/GenericPortBuilder.hpp include/ib/cfg/LinkBuilder.hpp include/ib/cfg/LoggerBuilder.hpp include/ib/cfg/NetworkSimulatorBuilder.hpp include/ib/cfg/ParentBuilder.hpp include/ib/cfg/ParticipantBuilder.hpp include/ib/cfg/ParticipantBuilder_detail.hpp include/ib/cfg/ReplayBuilder.hpp include/ib/cfg/RpcPortBuilder.hpp include/ib/cfg/SimulationSetupBuilder.hpp include/ib/cfg/SinkBuilder.hpp include/ib/cfg/SwitchBuilder.hpp include/ib/cfg/SwitchPortBuilder.hpp include/ib/cfg/TimeSyncBuilder.hpp include/ib/cfg/TraceSinkBuilder.hpp include/ib/cfg/TraceSourceBuilder.hpp include/ib/cfg/VAsioConfigBuilder.hpp include/ib/cfg/VAsioRegistryBuilder.hpp
Removed all Configuration headers from include/ib. The configuration structure is no longer public. Use the opaque
ib::cfg::IParticipantConfiguration
instead. The following headers were removed:IntegrationBus/include/ib/cfg/OptionalCfg.hpp IntegrationBus/include/ib/cfg/all.hpp IntegrationBus/include/ib/cfg/fwd_decl.hpp IntegrationBus/include/ib/cfg/string_utils.hpp
Changed
- Adapted the demos to the new configuration file format.
Removed all old configuration files.
New configuration files only define a logger.
Bus system demos also provide an additional configuration file for VIBE-NetSim.
Network names on controllers are optional.
Fixed:
Reduced a lot of compiler warnings. On CI builds, warnings are treated as errors.
FlexRay: FlexRayController.Configure(…): values provided in the configuration file were not correctly overriding user-defined values.
All Bus Systems: Fixed bugs related to configured controllers that had no defined network.
CAN-Controller: Fixed a bug that prevented users from creating configured CAN controllers if the network was configured and the provided network name did not match the configured one.
Fixed deadlock in destructor when
SetSimulationTaskAsync()
is used.Fixed LinkUp/LinkDown transmission in VIBE-NetworkSimulator.
Fixed ethernet frame transmission with multiple switches in VIBE-NetworkSimulator.
[3.7.2] - unreleased
Fixed
Controller pointer in FlexRay Controller Wakeup handler
[3.7.1] - unreleased
Fixed
New Configuration format Network name override for Can and Ethernet
[3.7.0] - unreleased
Changed
Note: the IntegrationBus configuration and command line usage changed!
The old simulation setup based configuration mechanism was replaced by a dynamic configuration: The configuration file syntax changed and the utility command arguments changed. Please note, the documentation is not yet updated to reflect all changes.
Switched to dynamic configuration concept: a simulation setup description is no longer necessary for running a simulation. All participants announce and register their services upon connecting to the registry.
Removed support of old config format from public includes
ib/cfg/Config.hpp
Removed CreateComAdapter (use CreateSimulationParticipant instead)
old:
auto comAdapter = ib::CreateComAdapter(config, "ParticipantName", domainId);
new:
auto participant = ib::CreateSimulationParticipant(config, "ParticipantName", domainId, true);
CreateSimulationParticipant takes the new configuration as first argument. To configure a synchronized participant, set the fourth argument to true.
- Demos:
Removed demos CanDemoNoSync, DynamicConfig, TickTickDone, GenericMessage, SimulationControl, SimulationControlNonBlocking as they are outdated
Updated remaining demos to use CreateSimulationParticipant and updated the configuration files.
- Startup:
IbSystemController (reference implementation) does not take JSON file as first argument anymore and takes all expected synchronized participants as command line arguments.
.\IbSystemController.exe 42 CanWriter CanReader
SystemController API: The system controller now expects a complete list of synchronized participants for proper working:
ib::mw::sync::ISystemController::SetRequiredParticipants()
Note: the VIBE Network Simulator configuration format has changed!
The format of the Network Simulator configuration has changed. Refer to the sample configuration files distributed with the VIBE-NetworkSimulator package.
The network simulator’s configuration was changed. Please note, that the documentation does not yet reflect these changes. The new configuration format resembles the
NetworkSimulator
block of the legacy config format but is stripped down to the minimum: it contains blocks forSwitches
andSimulatedNetworks
(which were previously calledSimulatedLinks
):Sample of the new Network Simulator format:
{ "SchemaVersion": "1", "Description": "Small sample config with Link names from the VIB Demos", "Switches": [ { "Name": "FrontSwitch", "Ports": [ { "Name": "Port0", "VlanIds": [1], "Network": "FS-Port0" }, { "Name": "Port1", "VlanIds": [1], "Network": "FS-Port1" } ] } ], "SimulatedNetworks": [ { "Name": "CAN1", "Type": "CAN" }, { "Name": "LIN1", "Type": "LIN" }, { "Name": "FlexRay1", "Type": "FlexRay" }, { "Name": "ETH1", "Type": "Ethernet" }, { "Name": "FS-Port0", "Type": "Ethernet" }, { "Name": "FS-Port1", "Type": "Ethernet" } ] }
The Network Simulator is shipped with two sample configuration files and the process invocation is the same:
VIBE-NetworkSimulator ParticipantName path/to/configFile
Compatibility with 3.6.3
Note: The versions from 3.6.3 up to 3.6.16 changed a lot of key APIs and network compatibilties.
Application binary interface (ABI): No
Application software interface (API): No
Middleware network protocol (VAsio): No
[3.6.3] - 2022-01
Removed
- removed the deprecated FastRtps middleware:
CMake: removed option IB_MW_ENABLE_FASTRTPS.
Demos: removed the FastRtps specific config files.
removed FastRtps specific integration tests.
API: removed deprecated ib::CreateFastRtpsComAdapter and ib::CreateVAsioComAdapter. Users should use the generic
CreateComAdapter
, refer to Outdated References.ConfigBuilder: removed FastRtps configuration mechanism: ib::cfg::ConfigBuilder::ConfigureFastRtps.
[3.6.2] - 2021-12-16
Fixed
C-API: fix transmission of flags in CAN SendFrame (VIB-548).
Links are now checked for unique endpoints (VIB-542).
Changes
Remove FastRTPS submodule in main repository.
cmake: make Linux detection more portable. We now use
lsb_release
to determine Linux Standard Base name and version of the distribution.C-API: refactoring as described in VIB-529. The experimental C API has been refactored to make use of a unified naming scheme. The following changes have been introduced:
All identifiers related to a specific object (or topic) now use the prefix
ib_Topic_
. For instance,ib_CanController_Stop
has been renamed toib_Can_Controller_Stop
. The names are now unified for all functions and types, and for the ‘topics’ SimulationParticipant, Can, Ethernet, FlexRay, Lin.The functions ending with
_create
or_destroy
have been renamed to_Create
or_Destroy
.
Added
Added SerDes support library for easy serialization /deserialization of user data. Refer to Demos/GenericMessage/GenericMessageDemoSerDes.cpp for an example (VIB-514).
Compatibility with 3.6.1
Application binary interface (ABI): Yes
Application software interface (API): Yes
Middleware network protocol (FastRTPS): No (build is disabled)
Middleware network protocol (VAsio): Yes
[3.6.1-QA] - 2021-12-10
This is a Quality Assured Release.
Added
The launcher now supports YAML formatted configuration files based on their file name extension
.yaml
or.yml
. This requires an installation of PyYAML (e.g., viapip install PyYAML
). Please note, that JSON schema validation with YAML files is not supported (VIB-526).Added the option
--exclude-registry
to the launcher. This will prevent the launcher from starting an IbRegistry process on its own (VIB-527).
Changed
Note: the VIB-CANoe Add-on is now discontinued.
The CANoe Add-on is affected by a known regression. Upcoming releases of Vector CANoe will support the IntegrationBus directly.
The VIB CANoe addon is now discontinued. It is affected by a known regression and will not be part of this release. Users of the VIB-CANoe add-on are encouraged to remain on the previous quality assured release. The upcoming release of Vector CANoe 16 will support the IntegrationBus directly.
Fixed
Fixed a regression in the
Replay
feature and the VIBE-NetworkSimulator support (VIB-544).
Compatibility with 3.6.0
Application binary interface (ABI): Yes
Application software interface (API): Yes
Middleware network protocol (FastRTPS): No (build is disabled)
Middleware network protocol (VAsio): Yes
[3.6.0] - 2021-12-01
Please note, the version jump from v3.4.x to v3.6.x was necessary due to internal releases already having the v3.5.x tag.
Added
Add experimental C-API for life-cycle and time synchronization (VIB-492).
Add experimental C-API for FlexRay (VIB-505).
Add experimental C-API for LIN (VIB-516).
Internal VIB threads now set their name for easier debugging on WIN32 and posix platforms (VIB-524).
Changed
Note: Public API changed
Some rarely used public headers and IComAdapter methods were removed. User code should re-compile cleanly with these changes.
Some header files were removed from the public
include/ib
directories. These IIbTo* headers are only for internal use. This change should not affect any users of the public API directly (VIB-511).
Complete list of removed header files from include/ib
:
include/ib/mw/IIbEndpoint.hpp include/ib/mw/IIbMessageReceiver.hpp include/ib/mw/IIbReceiver.hpp include/ib/mw/IIbSender.hpp include/ib/mw/sync/IIbToParticipantController.hpp include/ib/mw/sync/IIbToSyncMaster.hpp include/ib/mw/sync/IIbToSystemController.hpp include/ib/mw/sync/IIbToSystemMonitor.hpp include/ib/sim/can/IIbToCanController.hpp include/ib/sim/can/IIbToCanControllerProxy.hpp include/ib/sim/can/IIbToCanSimulator.hpp include/ib/sim/eth/IIbToEthController.hpp include/ib/sim/eth/IIbToEthControllerProxy.hpp include/ib/sim/eth/IIbToEthSimulator.hpp include/ib/sim/fr/IIbToFrBusSimulator.hpp include/ib/sim/fr/IIbToFrController.hpp include/ib/sim/fr/IIbToFrControllerProxy.hpp include/ib/sim/generic/IIbToGenericPublisher.hpp include/ib/sim/generic/IIbToGenericSubscriber.hpp include/ib/sim/io/IIbToInPort.hpp include/ib/sim/io/IIbToOutPort.hpp include/ib/sim/lin/IIbToLinController.hpp include/ib/sim/lin/IIbToLinControllerProxy.hpp include/ib/sim/lin/IIbToLinSimulator.hpp
Directly sending messages on the
IComAdapter
via SendIbMessage(…) is not possible anymore. Sending messages is now only supported via the specific service controllers, see VIB API for an overview (VIB-511).For example, code that relies on IComAdapter::SendIbMessage(EndpointAddress, const T&) should use an appropriate controller for the given type T:
old:
// Example for message type T = CanMessage CanMessage msg{}; comAdapter->SendIbMessage(EndpointAddress{/*implementation detail*/}, msg);
new:
// Example for message type T = CanMessage auto* controller = comAdapter->CreateCanController(); CanMessage msg{}; controller->SendMessage(msg);
Complete list of methods removed from the interface class IComAdapter
in include/ib/mw/IComAdapter.hpp
:
virtual void SendIbMessage(EndpointAddress from, const sim::can::CanMessage& msg) = 0; virtual void SendIbMessage(EndpointAddress from, sim::can::CanMessage&& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::can::CanTransmitAcknowledge& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::can::CanControllerStatus& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::can::CanConfigureBaudrate& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::can::CanSetControllerMode& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::eth::EthMessage& msg) = 0; virtual void SendIbMessage(EndpointAddress from, sim::eth::EthMessage&& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::eth::EthTransmitAcknowledge& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::eth::EthStatus& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::eth::EthSetMode& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::fr::FrMessage& msg) = 0; virtual void SendIbMessage(EndpointAddress from, sim::fr::FrMessage&& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::fr::FrMessageAck& msg) = 0; virtual void SendIbMessage(EndpointAddress from, sim::fr::FrMessageAck&& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::fr::FrSymbol& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::fr::FrSymbolAck& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::fr::CycleStart& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::fr::HostCommand& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::fr::ControllerConfig& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::fr::TxBufferConfigUpdate& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::fr::TxBufferUpdate& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::fr::ControllerStatus& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::fr::PocStatus& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::lin::SendFrameRequest& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::lin::SendFrameHeaderRequest& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::lin::Transmission& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::lin::WakeupPulse& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::lin::LinControllerConfig& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::lin::ControllerStatusUpdate& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::lin::FrameResponseUpdate& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::io::AnalogIoMessage& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::io::DigitalIoMessage& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::io::PatternIoMessage& msg) = 0; virtual void SendIbMessage(EndpointAddress from, sim::io::PatternIoMessage&& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::io::PwmIoMessage& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sim::generic::GenericMessage& msg) = 0; virtual void SendIbMessage(EndpointAddress from, sim::generic::GenericMessage&& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sync::NextSimTask& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sync::Tick& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sync::TickDone& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sync::QuantumRequest& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sync::QuantumGrant& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sync::ParticipantStatus& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sync::ParticipantCommand& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const sync::SystemCommand& msg) = 0; virtual void SendIbMessage(EndpointAddress from, const logging::LogMsg& msg) = 0; virtual void SendIbMessage(EndpointAddress from, logging::LogMsg&& msg) = 0; virtual void OnAllMessagesDelivered(std::function<void(void)> callback) = 0; virtual void FlushSendBuffers() = 0;
Note: FastRTPS build is disabled
The FastRTPs middleware build is now disabled for the official Vector packages.
The binary packages are built with the CMake flag
IB_MW_ENABLE_FASTRTPS=OFF
. Calling aCreateComAdapter
with an active middleware ofFastRTPS
will result in a runtime exception.MSVC: our CMakeSettings.json now directly supports building with Ninja.
The transmit acknowledges in Ethernet were changed to work with a single participant. That is, in a trivial simulation sending an Ethernet message will be immediately acknowledged (VIB-490).
Fixed
Config: prevent multiple statements of the same keyword, e.g., multiple
"Links"
blocks now raise an error (VIB-528).Fix building with
IB_BUILD_TESTS=OFF
(VIB-536).
Compatibility with 3.4.6
The API changes consist of internal headers which were removed from include/ib
and
the removal of ComAdapter::SendIbMessage
methods.
Application binary interface (ABI): No
Application software interface (API): No
Middleware network protocol (FastRTPS): No (build is disabled)
Middleware network protocol (VAsio): Yes
[3.4.6] - 2021-11-16
Changed
Note:
The FastRTPS middleware is now deprecated
The middleware FastRTPS is now marked as deprecated. This middleware will be removed in the future. The middleware specific CreateFastRtpsComAdapter API has been marked as deprecated for a long time. Users should adopt the generic
CreateComAdapter
.C-API for ethernet was refactored and improved (VIB-489).
C-API for CAN was refactored and internal integrity checks and unit tests added (VIB-464 VIB-465 VIB-466 VIB-460 VIB-462).
The transmit acknowledges in CAN were changed to work with a single participant. That is, in a trivial simulation sending a CAN message will be immediately acknowledged (VIB-473 VIB-478).
Updated gtest to version 1.11. This version supports a simplified MOCK_METHOD macro with specifiers like const, override. (VIB-474).
Added
Added new functional tests for CAN and Ethernet without simulation control flow / synchronization (VIB-491 VIB-494).
A new C-API for a DataPublisher / Subscriber (VIB-432).
Fixed
Fixed regression in
Pause()/Continue()
calls of ParticipantController. The SimulationControl Demo was added and used as a stress test (AFTMAGT-330 VIB-499).
Compatibility with 3.4.5
Application binary interface (ABI): No (interface change due to transmit acknowledges)
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.4.5] - 2021-11-03
Added
C-API: added initial ethernet bindings for the C language. Refer to Entry Point and API Organization for documentation. Currently, the Ethernet controllers work without time-synchronization. A Demo is provided in
Demos/CEthernet
(VIB-431).
Fixed
Clarify the documentation of synchronization types and the usage of
SetPeriod()
(AFTMAGT-329).Fix YAML conversions with the
vib-config-tool
. The YAML parser was emitting JSON formatted input back in JSON format. Ensure that default config values are properly serialized, or if unchanged are omitted from the output (AFTMAGT-331).Fix VAsio config values in the JSON schema. Update the ConfigBuilder to support the latest config additions. Clarified the documentation, which indicated misplaced config items nested in the
Registry
config item (AFTMAGT-328).Ensure user input (in different encodings) is not used verbatim in the domain socket creation (VIB-459).
Compatibility with 3.4.4
Application binary interface (ABI): Yes
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.4.4] - 2021-10-20
Added
Added initial C language bindings. Please note, the C API is currently work in progress and as such might change in the future. The documentation is in Entry Point and API Organization. C language bindings exist for CAN controllers without time-synchronzition and creating simulation participants from config files.
Compatibility with 3.4.3
Application binary interface (ABI): Yes
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.4.3-QA] - 2021-09-15
This is a Quality Assured Release.
Added
CMake: the options IB_MW_ENABLE_VASIO and IB_MW_ENABLE_FASTRTPS can be used to disable the middlewares at compile time.
Config: introduced a ‘SchemaVersion’ field in the config formats, to allow for future changes.
Fixed
VAsio: fix a bug affecting distributed (networked) setups. Participants did only listen on localhost addresses and the registry did not distribute proper endpoint addresses to other participants.
Note: this bug affects users of VAsio with networked setups
Users with VIB setups across multiple hosts (with non-localhost addresses) should upgrade to this VIB version.
VAsio: improve performance. The TraceTx()/TraceRx() invocations were expanding their arguments and applying a to_string() operation on the VIB message payloads. Now, this is code path is only executed when Trace log level is active.
UB sanitizer: fixed undefined behavior in MessageBuffer (unaliased memory accesses) and Watchdog (integer overflow).
Fixed missing ‘ActiveMiddleware’ statements in Can/FastRTPS config files and ensure it is properly parsed with the new YamlConfigParser (VIB-375).
Fixed out of bounds exception when configuring tracing and replaying. Also ensure that configuring a replay block with a ‘Receive’ direction is able to replay messages (VIB-372).
Ensure that ‘SearchPathHints’ are passed on to the VIBE extension implementing the IReplayDataProvider interface (VIB-378).
Fix accidentally setting the badbit on the ostream when formatting Ethernet MAC addresses and LIN frames.
Changed
Config::FromJsonString
now uses a Yaml-parser internally. To update legacy JSON configs to the current valid format we provide thevib-config-tool
utility. It supports deprecated controller and port declarations (cf [3.1.0] - 2020-06-15) and also network simulator configurations at SimulationSetup scope (cf [3.3.0] - 2020-08-12). It can output in JSON or YAML format. For example, to ensure a JSON config is up to date:vib-config-tool --convert oldFile.json updated.json --format json
Note: the IbRegistry executable was moved again from the IntegrationBus-NonRedistributable directory to the IntegrationBus/bin
The relocation of the registry to the NonRedistributable caused so much irritation and breakage that we undid this change.
To reduce the fallout of moving the IbRegistry we put it back into IntegrationBus/bin/. For compatibility the IbLauncher searches the registry executable in both directories.
Removed
Removed the json11 from the source-tree. We now use yaml-cpp to parse JSON and YAML configuration files. Please note, that the yaml-based parser still accepts JSON formatted inputs.
Compatibility with 3.4.2
Application binary interface (ABI): No (json11 symbols removed)
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.4.2] - 2021-08-04
Added
VAsio now supports UNIX domain sockets as transport. By default, all participants open domain sockets locally and advertise the TCP/IP and local endpoints to other participants. If a participant is unable to connect to another participant locally, the TCP/IP endpoint is used for connecting without raising an error. As such, the local domain connectivity is optional and fully transparent to the users. Because of the path limitations of domain sockets the socket files are stored in the system temporary directory (e.g., %TEMPDIR% or $TMP). To allow for simulation isolation, the socket files have the participant IDs, domain ID, and the simulation’s working directory encoded in the file name.
The CMake build system is now better equipped for reproducible builds on Linux platforms. CI builds now set the TZ, LANG and SOURCE_DATE_EPOCH environment variables to known values. The time of the last commit on the master branch is used to initialize SOURCE_DATE_EPOCH. Packaged source-trees now contain a pre-processed version_macros.hpp recording the commit hash.
Fixed
Various fixes for our scripted Jenkins pipeline to improve stability on our CI environment.
Changed
VAsio: we imported the Asio library to version 1.18.2. This includes many bugfixes and also domain socket support for Windows 10. The FastRTPS packages used for CI/CD builds had to be rebuilt using this new version of Asio.
CMake: the third party handling code was refactored. Instead of using variables we now have targets to link against the third party components.
Compatibility with 3.4.1
Application binary interface (ABI): No (additions to struct ib::cfg::VAsio::Config)
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.4.1] - 2021-06-25
Added
Added native YAML parser implementation. This provides better error messages and warnings for parsing YAML and JSON config files via the
Config::FromYamlString
/Config::FromYamlFile
procedures. When the parser encounters an unknown element it emits a warning. However, if the element uses a reserved element name of the config schema the warning is turned into an error (AFTMAGT-314). Please note, that schema versioning for backward compatibility is not yet implemented and will be addressed in the future.
Fixed
Fixed warnings during 32-bit builds: an int64_t was truncated to int.
Build: relax some warning levels for gtest and remove useless compile flags on windows.
Changed
When shutting down, do not print an error message that we’re already shutting down.
Note: the IbRegistry executable was moved to the NonRedistributable directory.
The location of the IbRegistry executable now matches that of the vib-registry shared library, cf. sil-kit-registry.
Similar to the vib-registry shared library, the executable was moved to the IntegrationBus-NonRedistributable directory.
Compatibility with 3.4.0
Application binary interface (ABI): Yes
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.4.0] - 2021-06-01
Added
Added submodule yaml-cpp. This will be the base of our native YAML configuration parser.
Added
ib::cfg::Config::FromYamlString
andib::cfg::Config::FromYamlFile
to load configuration from YAML formatted input. This currently transforms the YAML input into JSON and re-uses the JSON config parser.
Compatibility with 3.3.10
Application binary interface (ABI): Yes
Application software interface (API): No (additions to
ib::cfg::Config
)Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.3.10-QA] - 2021-05-10
This is a Quality Assured Release.
Added
Added MdfChannel identification to replaying config. This allows replaying MDF4 trace files that do not originate from VIB simulation runs, cf. Outdated References (
sec:replay-foreign
).
Fixed
Allow tracing while replaying on I/O InPorts (VIB-159).
Allow tracing while replaying on GenericSubscribers (VIB-159).
Fix trivial FlexRay simulation. State transitions when a wakeup command was issued were not properly computed (VIB-154).
Ensure that only active replay controllers are configured. This fixes a crash when multiple controllers were defined, but only one was active (VIB-160).
Allow tracing messages on a LIN master when replaying is active (VIB-158).
Fix null pointer derference in PcapReader when input file name was missing in configuration. Also ensure that the config has non-empty input and output file paths (VIB-156).
The Launcher will attempt to clean up the CANoe environment several times when shutting down. This ensures a clean CANoe installation when CANoe is slow to shutdown, e.g., when launcher is interrupted by a user (VIB-153).
Fix LIN Sleep frames when using the VIBE Network Simulator. When the
ILinController::GoToSleep()
was invoked, a sleep frame was transmitted and then the controller’s internal state was set to Sleeping. This caused the Network Simulator to abort the running sleep-frame transmission and an erroneous LIN_RX_NO_RESPONSE frame was generated. An additional sleep pending state is introduced which allows completion of pending transmissions before entering the sleep state. (VIB-155)VIBE Network Simulator compatibility
To ensure interoperability you should use VIBE Network Simulator v3.3.10 in all setups involving detailed LIN simulations. See compatibility below for details.
Changed
Print acknowledgement on std::cout when an extension is loaded.
Throw IB exceptions instead of runtime_error where applicable.
Update the Demo configs to newer
NetworkSimulator
configuration scheme (VIB-156).Updated JSON config schema to include
TraceSource
andReplay
config blocks (VIB-156).
Compatibility with 3.3.9
Due to changes in the config API we are not ABI compatible.
Please note that the detailed simulation of LIN requires a matching VIBE Network Simulator v3.3.10. The addition of a new internal state makes the current VIB release incompatible with older Network Simulators for the detailed LIN simulation.
Application binary interface (ABI): No (Due to Config)
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.3.9] - 2021-04-09
Added
Add documentation for Outdated References (
Replaying and Tracing<usage/replay>
) (AFTMAGT-308).Added support for replaying FlexRay messages (AFTMAGT-289). Replaying FlexRay requires the use of the VIBE-NetworkSimulator. The NetworkSimulator is attached as a replay controller to the replay scheduler, cf. Outdated References (
sec:replay-architecture
) for an overview.Added support for replaying FlexRay messages in the VIBE-NetworkSimulator (AFTMAGT-290). Please note, that the startup/synchronization sequence is not part of a trace file and time stamps of the replay might deviate from the original traced messages. The logical order of messages is kept after the synchronization has been established. Refer to section Outdated References (
sec:replay
) for a summary of supported features and limitations.Add a Outdated References (
Replay<sec:cfg-participant-replay>
) configuration block to the NetworkSimulator configuration.
Fixed
The config parser no longer uses asserts when validating a Config. A misconfiguration exception is now thrown, which can be handled by the user (AFTMAGT-309).
Compatibility with 3.3.8
Due to changes in the config API we are not ABI compatible.
Application binary interface (ABI): No (Due to Config)
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.3.8] - 2021-02-18
Added
The CI build pipeline now includes Ubuntu 20.04 as a build target, which is used to run automated unit tests and integration tests (AFTMAGT-300).
Added support for replaying LIN frames using the VIBE-MDF4Tracing extension. This is exclusively supported on LIN master controllers. Replaying on LIN slaves is not supported, even though tracing is possible on these controllers. Invoking transmission API calls during replay is also not supported on a master (AFTMAGT-288).
Setting VAsio TCP flags is now supported from a JSON config file, cf. Outdated References (
sec:mwcfg-vasio
) (AFTMAGT-305).
Fixed
A graceful connection shutdown does no longer result in an error message when using the VAsio middleware (AFTMAGT-299).
Starting multiple VAsio registries on the same TCP/IP port resulted in empty error messages. Now, useful error messages are reported. On windows no error was reported at all. The registry listening socket is now created with SO_EXCLUSIVEADDR on windows, which prevents mulitple registries to share the same listening port (AFTMAGT-303).
Compatibility with 3.3.7
Application binary interface (ABI): Yes
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.3.7] - 2021-01-27
Added
Added replaying functionality for Ethernet, Can, GenericMessages and IO ports. This utilizes a new ReplayScheduler and replay controllers to inject replay messages from a trace file. The PCAP file format is supported natively, and the MDF4 format is supported through the VIBE-MDF4Tracing extension.
Changed
The semantics of the
ComAdapter::Create*
methods to create services has changed. Previously, invoking them multiple times would result in an exception. Now, the same pointer is always returned. The ReplayScheduler uses these methods to create and configure replay controllers for services internally.
Fixed
When setting the
struct ib::cfg::VAsio::Config::tcpQuickAck
option, the TCP_QUICKACK socket option is now activated after each successful read()/recvmsg on Linux. This ensures that the default 40ms delayed acknowledge timeout is not used.
Compatibility with 3.3.6
Application binary interface (ABI): Yes
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.3.6-QA] - 2020-12-10
This is a Quality Assured Release.
Fixed
Utility executables are now built with appropriate RPATHs on Linux.
Remove -Wabi flags from gcc/clang builds, as they were not correctly used and they break the build on Ubuntu 20.04.
Update the config schema to include the IbRegistry logger.
Compatibility with 3.3.5
Application binary interface (ABI): Yes
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.3.5] - 2020-11-26
Added
The number of connection attempts can now be configured in the VAsio registry configuration, see the “ConnectAttempts” field in Outdated References (
sec:mwcfg-vasio
).Added preliminary TCP/IP tuning settings to
struct ib::cfg::VAsio::Config
. The following settings are available:tcpNoDelay: enable the TCP_NODELAY flag, which disables Nagle’s algorithm (default off).
tcpQuickAck: enable the Linux specific TCP_QUICKACK, which disables delayed acknowledgements (default off).
tcpSendBufferSize and tcpReceiveBufferSize: set the TCP buffer sizes.
Changed
The TCP_NODELAY is now off by default again. It can be enabled using the VAsio config.
Fixed
The IbLauncher now considers debug libraries when searching for the VIB installation, this makes it usable with Debug builds.
Compatibility with 3.3.4
Application binary interface (ABI): No (due to Config changes)
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.3.4] - 2020-11-04
Added
The CMake build system has new options to build with sanitizers: IB_ENABLE_ASAN and IB_ENABLE_UBSAN, to enable ‘Address Sanitizer’ and ‘Undefined Behavior Sanitizer’, respectively. When active, the -fsanitize=… compile options and link options are enabled globally. This is currently only supported on GCC and Clang.
Added replay message provider interfaces for the upcoming MDF replaying extension.
Fixed
Fixed undeclared variable use in IbLauncher (AFTMAGT 294).
Changed
Added the TCP_NODELAY option to VAsio (AFTMAGT 297). This reduces latencies when sending a lot of small VIB messages.
Compatibility with 3.3.3
Application binary interface (ABI): Yes
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.3.3] - 2020-10-15
Added
Added a new configuration format for replaying traces, refer to Outdated References (
sec:cfg-participant-replaying
) for details. Please note that the replaying mechanism is still under development.
Changed
The IbRegistry command line utility now supports a
--use-signal-handler
flag that prevents it from listening on stdin. It can be safely shut down with Control-C when started with this flag.
Compatibility with 3.3.2
Due to changes in the config API we are not ABI compatible.
Application binary interface (ABI): No (due to Config)
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.3.2] - 2020-09-24
Changed
The duplicate IbConfig schema was removed from the Launcher subdirectory. There is now only one instance of IbConfig.schema.json under IntegrationBus/source/cfg/.
Integration tests were refactored and stabilized (AFTMAGT 271). Networked integration tests now use a synchronized simulation, with a new test harness that simplifies test case setup.
Compatibility with 3.3.1
Application binary interface (ABI): Yes
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.3.1-QA] - 2020-08-27
This is a Quality Assured Release.
Fixed
Fixed config JSON schema and updated Demos to latest configuration syntax.
Allow ‘UseTraceSinks’ when parsing configuration files in backward-compatibility mode.
Make trace sink attachment deterministic per participant. This changes an internal interface used to load the VIBE mdf4tracing extension.
Fix launcher when there is a trailing separator in the environment PATH variable.
Changed
Building the documentation now requires Sphinx version >= 3.0 (cf. !!! Getting Started as a SIL Kit Developer).
Compatibility with 3.3.0
Application binary interface (ABI): Yes
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.3.0] - 2020-08-12
Added
Added support for tracing bus messages on the VIBE-NetworkSimulator (AFTMAGT 277).
Enable tracing for GenericMessages (AFTMAGT 233).
Enable tracing for IoPorts (AFTMAGT 276).
Added support for tracing CAN/LIN/Ethernet bus messages on controller proxies (AFTMAGT 278).
Changed
The NetworkSimulator configuration syntax was changed. The network simulator definition was moved from the SimulationSetup level, down to the participant that previously only referred to the network simulator by name. For backward compatibility the old configuration syntax is still supported. (AFTMAGT-277).
old:
"SimulationSetup": { "Participants": [ { "Name": "NetworkSimulator", "NetworkSimulators": [ "NetSim1" ] } ], "NetworkSimulators": [ { "Name" : "NetSim1", "SimulatedLinks": [...] } ] }
new:
"SimulationSetup": { "Participants": [ { "Name": "NetworkSimulator", "NetworkSimulators": [ { "Name" : "NetSim1", "SimulatedLinks": [...] } ] } ] }
This change also affects the config builder API and ib::cfg::Config.
Compatibility with 3.2.1
The config builder API for network simulators was changed, and the struct ib::cfg::Config was also modified.
Application binary interface (ABI): No (changes in Config)
Application software interface (API): No (changes in Config)
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.2.1] - 2020-07-23
Added
The startup delay of a FlexRay node in the FlexRay demo can now be set programmatically.
Added a message tracing section to Outdated References (
Participant Configuration<sec:cfg-participant-tracing>
). It briefly discusses how to configure the trace sink mechanism and how the Outdated References (mdf4tracing
) extension is used. The controllers now also reflect the recently updated tracing support.
Changed
Enabled message tracing on the following controllers: LIN, CAN, FlexRay.
The Ethernet demo now uses the IEthController::SendFrame API.
Updated version of the third-party library fmt to version 6.1.0.
Fixed
Fixed a bug in the FlexRay demo which caused unreachable code in the POC Handler.
TraceSinkBuilder was missing API exports for three methods, resulting in missing symbols when linking on Windows.
Fixed shared library loading incompatibilities.
Compatibility with 3.2.0
Application binary interface (ABI): No
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.2.0] - 2020-07-06
Added
Logger of the VAsio Registry can now be configured via the middleware configuration, cf. Outdated References (
sec:mwcfg-vasio
). The correspondingRegistryBuilder
also gained theConfigureLogger()
method to configure the logger of the VAsio Registry.Added benchmark demo, cf. Outdated References (
sec:util-benchmark-demo
).
Changed
ib::type_conversion_error
inherits now fromstd::runtime_error
instead ofstd::exception
directly.ib::cfg::LoggerBuilder
doesn’t inherit fromib::cfg::ParentBuilder
anymore.
Fixed
Fixed a bug that prevented legacy IbConfigs (pre VIB 3.1.0) using the PcapFile setting from being converted to new IbConfigs (VIB 3.1.0) using trace sinks.
Compatibility with 3.1.0
Application binary interface (ABI): No (See Changed)
Application software interface (API): No (LoggerBuilder API changed)
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.1.0] - 2020-06-15
Added
New optional configuration section for extension-related settings, cf. Extensions Configuration. Its only property is the list of extension search path hints, which allows to configure the additional search paths for shared library extensions loaded by the VIB.
New configuration mechanism for IB message tracing. It supersedes the previous Ethernet and PCAP specicic configuration, please refer to the Deprecated section.
The ParticipantBuilder gained a new AddTraceSink() method, which returns a TraceSinkBuilder. A TraceSink consists of a unique, non-empty name, an output path and the format type (PcapFile, PcapPipe, Mdf4File).
Services, Controllers and Ports can be configured to use a trace sink by name. For example, by invoking the
WithTraceSink(name)
on the appropriate builder. This will populate the ‘UseTraceSinks’ field of the JSON serialization of the builder’s configuration type.
Changed
For FastRTPS, the default participant lease duration is now 2h to avoid connection losses when debugging. (AFTMAGT-267)
To enable the newly added ‘UseTraceSinks’ fields, the JSON serialization format of the Controllers, Services and Ports were adjusted. In particular, the JSON type of DigitalIoPort, AnalogIoPort, PwmPort, PatternPort, and GenericSubscriber were changed:
old:
"Port-Type": [ "PortName", "OtherPort", ...]
new:
"Port-Type": [ { "Name": "PortName" }, { "Name": "OtherPort" } ]
Fixed
ILinController::SendFrameHeader(LinIdT)
now correctly sets the current simulation time in the LinTransmission. Previously, the timestamp was always 0s.GenericSubscriber was missing the ITimeProvider interface.
Removed
The ControllerBuilder<EthernetController> no longer supports the WithPcapFile() and WithPcapPipe() methods. This usage has been superseded by the new configuration mechanism:
old:
simulationSetup .AddParticipant("P1") .AddEthernet("ETH1") .WithPcapFile("output filename");
new:
auto&& participant = simulationSetup.AddParticipant("P1"); participant->AddEthernet("ETH1").WithTraceSink("EthSink"); participant->AddTraceSink("EthSink") .WithType(TraceSink::Type::PcapFile) .WithOutputPath("output filename.pcap");
Deprecated
The ‘pcapFile’ and ‘pcapPipe’ fields in the EthernetController configuration are deprecated. Please use the newly added ‘UseTraceSinks’ and ‘TraceSinks’ fields. These fields will be removed from the JSON format and the Config Builder API in the future.
old:
"EthernetControllers": [ { "Name": "ETH0", "PcapFile": [ "EthernetReader.pcap" ] } ]
new:
"EthernetControllers": [ { "Name": "ETH0", "UseTraceSinks": "EthernetSink" } ] "TraceSinks": [ { "Name" : "EthernetSink", "OutputPath": "EthernetReader.pcap", "Type": "PcapFile" } ]
Loading a JSON file which contains the deprecated “PcapFile” or “PcapPipe” fields will cause a runtime warning. Internally the data structures are updated as if a “TraceSinks” and “UseTraceSinks” was supplied with a TraceSink name that is derived from the Participant’s and EthernetController’s names.
Compatibility with 3.0.7
Application binary interface (ABI): No
Application software interface (API): No (ConfigBuilder API changed)
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.0.7] - 2020-05-25
Added
Add a time provider interface internal to the service controllers. By default the wallclock time is used as the source for the current time. When a participant controller is present, its virtual simulation time is used.
IEthController gained a new API for sending Ethernet frames with explicit and implicit timestamps:
IEthController::SendFrame(EthFrame, nanoseconds)
andIEthController::SendFrame(EthFrame)
.These methods will support MDF4 tracing in the future. The controller’s time provider will be queried if no user supplied timestamp is present.
ParticipantControllers can now forcefully exit the run loop in case of an error:
IParticipantController::ForceShutdown()
. Note that this method is only intended for use cases where a regular shut down is not possible!
Fixed
Fixed a memory leak: there was a shared pointer cycle in SyncMaster’s DiscreteTimeClient when attaching a lambda to itself.
Deprecated
Please note, that the
IEthController::SendMessage(EthMessage)
method is deprecated in favor of the new SendFrame() methods. It will be removed in the future. The EthMessage struct contains a user-settable timestamp, which is not a good fit for the new time provider based API.
Changed
CMake build: the binaries are now all built in the ${CMAKE_BINARY_DIR}/$<CONFIG> directory. This allows running Demos and Tests directly from the build directory, which eases debugging.
Compatibility with 3.0.6
Application binary interface (ABI): Yes
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.0.6] - 2020-04-30
Fixed
Disable remote logging when shutting down (AFTMAGT252) This fixes issues when remote logging is enabled with log levels of debug and higher. The FastRTPS middleware uses debug log messages internally, and during shutdown the LogMsg FastRTPS topic is unmatched and destroyed – which leads to invalid accesses when remote logging is enabled.
PCAP tracing now includes the ingress data on EthControllers (AFTMAGT265).
Changed
We no longer bundle FastRTPS binaries in the official VIB packages. Users had issues using the exported cmake targets from FastRTPS binaries when building from source. The VIB cmake build system fetches FastRTPS using git when the FastRTPS depdendencies are missing from the local source tree.
Compatibility with 3.0.5
Application binary interface (ABI): Yes
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.0.5] - 2020-04-08
Added
It is now possible to provide a time stamp for LIN transmissions. For this, overloads have been added to
ILinController::SendFrame()
andILinController::SendFrameHeader()
. Note that this timestamp will be overwritten when using the VIBE NetworkSimulator.The VAsio registry can now be used as a shared library. Please note that the shared library is non-redistributable. The extension mechanism will load the shared library and construct an instance of the
IIbRegistry
interface for the user to consume. The API entry point is theCreateIbRegistry()
function. The vib-registry shared library needs to reside in the current process’s working directory. Initially, it is located in theIntegrationBus-NonRedistributable
subdirectory of the VIB package. In case of error a std::runtime_error is thrown.
Changed
Don’t format Logger messages if the messages aren’t going to be logged anyways.
Compatibility with 3.0.4
Application binary interface (ABI): Yes
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.0.4] - 2020-03-19
Added
A new FlexRay controller API is introduced for monitoring protocol operation control (POC) status changes, cf. Receiving POC Status Changes. This new API supersedes the ControllerStatusHandler mechanism, as current use cases and new ones are covered by the PocStatus handler. This new API exposes more status variables of the POC when using the VIBE Network Simulator for FlexRay simulation. (AFTMAGT-253)
Note
To ensure interoperability you should use VIBE Network Simulator v3.0.4 in all setups involving different, but compatible versions of VIB. See compatibility below for details.
Changed
Clarify error messages on connection loss for VAsio. The previous term “Shutdown” was ambiguous, the error reason now states “Connection lost” (AFTMAGT-260).
Disable problematic FastRTPS connection loss detection (AFTMAGT-259).
Deprecated
IFrController::RegisterControllerStatusHandler()
is now deprecated in favor ofRegisterPocStatusHandler()
. ControllerStatusHandler will be removed in a future release. The usage of RegisterControllerStatusHandler will result in a warning at runtime and compile time.
Fixed
The IbRegistry can now be used for multiple simulation runs without the need to terminate and restart it (AFTMAGT-249).
The internally used spdlog is now build with compiler flags that prevent creation of weak symbols on Linux / GCC (AFTMAGT-256).
Compatibility with 3.0.3
Please note that the new FlexRay controller model (VIB v3.0.4) requires the matching VIBE Network Simulator v3.0.4, even when not using the new PocStatus API. However, the VIBE Network Simulator v3.0.4 is fully compatible with previous FlexRay controller models and enables interoperability between VIB v3.0.3 and v3.0.4 participants.
Application binary interface (ABI): Yes
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.0.3] - 2020-02-26
Added
New integration test ensuring that VAsio is fully deterministic and delivers messages strictly in-order. This test replaces the demo GenericMessageITest, which is now obsolete and has been removed for this reason.
Fixed
ib::version::Patch() was set to a wrong value.
Removed
Removed demo GenericMessageITest.
Compatibility with 3.0.2
Application binary interface (ABI): Yes
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.0.2-QA] - 2020-02-10
This is a Quality Assured Release.
Added
Documentation for the CAN controller API: CAN Vehicle Network Controllers.
Documentation for the Participant Controller API: Outdated References (
api/participantcontroller
) (AFTMAGT-206).Documentation for the IO Port services (AFTMAGT-201).
Documented Generic Messages API: (AFTMAGT-204).
Documented the simulation state machine and synchronization types: Simulation Concepts
Added docs for the ComAdapter:
Added quick start guide: usage/quickstart
Elaborate the user APIs and overview pages: C/C++ API
Add docs for System Controller (AFTMAGT-242).
Add docs for System Monitor (AFTMAGT-242).
Add docs for Ethernet Service API (AFTMAGT-239).
Changed
Removed the upper limit of the VAsio send Queue, to avoid that critical IbMessages are thrown away. (AFTMAGT-240)
VIB Utilities are now distributed in Release build configuration (AFTMAGT-245)
The interactive system controller has been promoted from demo to utility. I.e., it is now part of the binary delivery.
Fixed
The LIN controller now only calls the goToSleepHandler if the frame id and also the data field of a received LIN frame matches the id and data of a valid “GoToSleep” frame (AFTMAGT-244).
VIB applications built in RelWithDebInfo or MinSizeRel will no longer link against the VIB Debug installation, which crashes under windows. (AFTMAGT-246)
Fixed compilation errors caused by windows.h, which broke std::min/max calls in VIB headers. (AFTMAGT-248)
Fixed a crash when move assigning the ConfigBuilder. (AFTMAGT-24)
Fixed the cmake exported targets. CMake users should be able to use find_package(CONFIG) to integrate with the IntegrationBus library.
Fixed a bug that prevented the CAN controller state callback from being called when using VIBE NetworkSimulator.
Removed a false warning for VAsio with syncType::DistributedTimeQuantum, which incorrectly informed a user that IParticipantController::setPeriod() has no effect for this syncType.
Compatibility with 3.0.1
Application binary interface (ABI): Yes
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.0.1] - 2020-01-08
Added
New config parameter “HistoryDepth” added to FastRTPS config section. This value is used to set the history size for all FastRTPS topics.
New WithHistoryDepth method for FastRtpsConfigBuilder. When using the builder pattern to generate an Ib Config, the new FastRTPS HistoryDepth can be configured this way.
New documentation for the configuration mechanism, cf. Configuration
New documentation for FastRTPS configuration, cf. Middleware Configuration
Extend the simulation setup documentation, cf. ../configuration/simulation-setup
Changed
The IbLauncher CANoe environment module was adapted to the new CANoe Extensions packaging format.
Fixed
A check was added to prevent participants from using ParticipantID 0, since this ID is reserved for the Registry when VAsio is used.
Compatibility with 3.0.0
Application binary interface (ABI): No
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[3.0.0] - 2019-12-03
Added
The logging mechanism now includes the most important elements of sent and received IB messages (AFTMAGT-217).
Changed
The VIB distribution uses a new directory layout for packages:
- IntegrationBus
Contains the pre-built binary distribution of the IntegrationBus, including the C++ header files and CMake export targets.
- IntegrationBus-Demos
The VIB demos are now distributed in source form. They can be easily compiled against the distributed VIB binaries: e.g, on Windows just right-click and “open in visual studio”
- IntegrationBus-Documentation
Contains the documentation in HTML and text format.
- IntegrationBus-Source
The VIB source tree, with notable changes:
The SystemController and SystemMonitor demos were moved to the Utilities/ directory. They are also distributed in binary form.
Fast-RTPS is no longer distributed in source form. The CMake build infrastructure automatically downloads a git snapshot if needed (requires git).
CMake packaging was simplified (AFTMAGT-195).
A notification is shown when writing to a PCAP pipe is enabled, as the default behavior is to block until the pipe is read by another process (AFTMAGT-221).
Logging output to std::cerr and std::cout is replaced by calls to the internal logging mechanism (AFTMAGT-210).
Warn user when a PCAP pipe is opened (AFTMAGT-221).
Fixed
Fixed the Participant subscription in VASio (AFTMAGT-216). Creating an IB service will now block until all the necessary subscriptions have been acknowledged by all known participants.
Compatibility with 2.0.0
Application binary interface (ABI): No
Application software interface (API): No
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): No
[2.0.0] - 2019-11-06
Added
New watchdog functionality for SimTasks with soft and hard limits. Whenever a SimTask runs longer than the soft limit, a warning is logged. If it runs longer than the hard limit, the participant switches to the error state.
New config section for ParticipantControllers. Here, you can specify the execution time limits for SimTasks and specify the SyncType. E.g.,
"ParticipantController": { "SyncType": "DiscreteTime", "ExecTimeLimitSoftMs": 1010, "ExecTimeLimitHardMs": 1500 }
New ParticipantControllerBuilder. When using the builder pattern to generate an Ib Config, the ParticipantController can be configured via ParticipantBuilder::AddParticipantController().
New Ethernet Trace Logging in the PCAP Format. Trace logs can be written to files or named pipes.
New config parameters are added for EthernetControllers. Here, you can specify the PCAP trace filename or the name of the pipe. For example:
"EthernetControllers": [ { "Name": "ETH0", "MacAddr": "F6:04:68:71:AA:C2", "PcapFile": "EthernetReader.pcap", "PcapPipe": "EthernetReaderPipe" } ]
Added WithPcapFile and WithPcapPipe methods for ControllerBuilder<EthernetController>. When using the builder pattern to generate an Ib Config, PCAP tracing can be configured with the new methods.
Changed
Transitions from the shutdown state to the error state are no longer allowed. With the recently added connection loss detection, participants could also enter the error state after a normal shutdown, which is now prevented.
Implemented new versioning schema. As of now, the following semantic versioning schema is applied:
major number changes indicate breaks on a network layer
minor number changes indicate API of config format breaks
patch number changes indicate any other non-breaking changes.
Added a canId field to the CanTransmitAcknowledge data type. This was required for a bug fix and is a breaking change on the network layer.
Added a sourceMac field to the EthTransmitAcknowledge data type. This was required for a bug fix and is breaking change on the network layer.
Fixed
CAN controllers now only call the TransmitStatusHandler if they did send the corresponding CAN message. Previously, in a simulation with more than two CAN controllers, the callback could be triggered without having sent a message.
Ethernet controllers now only call the MessageAckHandler if they did send the corresponding ethernet message. Previously, in a simulation with more than two ethernet controllers, the callback could be triggered without having sent a message.
Deprecated
The Participant config setting SyncType has been deprecated. The SyncType is now configured in the ParticipantController section.
old:
"SyncType": "DiscreteTime"
new:
"ParticipantController": { "SyncType": "DiscreteTime" }
The SyncType::Unsynchronized is no longer used. Only participants with a ParticipantController configuration are synchronized. I.e., you can simple remove the “SyncType”: “Unsynchronized” from SystemMonitors.
The ParticipantBuilder::WithSyncType() has been deprecated. Use ParticipantConfigBuilder::WithSyncType() instead.
old:
simulationSetup.AddParticipant("P1") .WithSyncType(SyncType::DiscreteTime);
new:
simulationSetup.AddParticipant("P1") .AddParticipantController().WithSyncType(SyncType::DiscreteTime);
Compatibility with 1.1.0
Application binary interface (ABI): No
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Partially (Everything except for CAN and Ethernet is compatible)
Middleware network protocol (VAsio): Partially (Everything except CAN and Ethernet is compatible)
[1.1.0] - 2019-09-16
Added
Added a connection loss mechanism in FastRTPS and VAsio middleware. Lossing the connection of one participant will lead the system to go into Error state.
When logging at trace level, a log entry is now written for each incoming and outgoing IbMessage.
When logging at trace level, the wait times and execution times per tick are now logged.
The creation of a ComAdapter is now logged. The log entry includes the used VIB version.
Connection losses during the simulation are now detected. The are reported as an updated ParticipantStatus with State Error and a note that the connection was lost.
Fixed
Fixed FlexRay parameter validation, which could cause valid parameter sets to be rejected. E.g., gdSymbolWindows has a valid range from 0 to 162, but we check for 1 to 139.
Fixed a racecondition when starting up a VAsio simulation. As VAsio does not have a history, it could happen that some participants did not receive all ParticipantStatus values.
Removed
IComAdapter::RegisterNewPeerCallback() was removed. This method was only intended as an IB-internal helper method and never officially announced as part of the public API.
Compatibility with 1.0.0
Application binary interface (ABI): No
Application software interface (API): No (cf. Removed)
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): Yes
[1.0.0-QA] - 2019-09-25
This is a Quality Assured Release.
Added
The logging facilities can now be configured per participant using the IB config. E.g., different sinks and log levels can be configured.
Changed
The LIN API was redesigned to provide a clearer and simpler interface. To make the transition to the new API as simple as possible, we provided extensive documentation on the new API itself including usage examples and information about what changed in the new API: LIN Service API
Removed spdlog from the public IB API. Spdlog is still used internally but it has been removed from the public API to avoid conflicts with user specific spdlog installations.
The CMake build options BUILD_TESTS and BUILD_DOCS were renamed to IB_BUILD_TESTS and IB_BUILD_DOCS.
The Tools folder has been renamed to Utilities to differentiate it more clearly from build tools. For the time being, the IbRegistry is the only utility.
Fixed
Fixed a crash in the IbLauncher when the IbConfig did not specify a MiddlewareConfig or an ActiveMiddleware.
Fixed a crash when creating a ComAdapter with the same participant name as a previously destroyed one. The crash originated in spdlog.
Fixed a crash in the VAsioConnection destructor due to a wrong member order.
Fixed the Fast-RTPS submodule from v1.7.0 to v1.8.1, which got broken during a merge.
The old, unmaintained CHANGELOG.md is no longer installed. Instead, the CHANGELOG.rst is installed in addition to the HTML documentation.
Compatibility with Sprint-31
Application binary interface (ABI): No
Application software interface (API): No
Middleware network protocol (FastRTPS): Partially (Everything except LIN is compatible)
Middleware network protocol (VAsio): Partially (Everything except LIN is compatible)
[Sprint-31] - 2019-08-14
Added
New VAsio middleware as an alternative to Fast-RTPS, the VAsio middleware was specifically developped for the integration bus to provide high performance and stability. Cf. Middleware Configuration.
Changed
Upgrade Fast-RTPS to version v1.8.1. This improves stability on Linux.
Fixed
Fixed a crash in the IbLauncher when the IbConfig did not specify a MiddlewareConfig or an ActiveMiddleware.
Compatibility with Sprint-30
Application binary interface (ABI): No
Application software interface (API): Yes
Middleware network protocol (FastRTPS): Yes
Middleware network protocol (VAsio): No
[Sprint-30] - 2019-07-31
Fixed
Attempting to create a ComAdapter with an empty name will now throw a misconfiguration exception with a proper error message.
Interface compatibility with Sprint-29
Application binary interface (ABI): Yes
Application software interface (API): Yes
Application middleware interface: Yes
[Sprint-29] - 2019-07-17
Added
It is now possible to reconfigure FlexRay TX-Buffers during the simulation, e.g., to change offset and repetition. Cf.
IFrController::ReconfigureTxBuffer()
Changed
This is the last entry to CHANGELOG.md. From now on, the changelog will be maintained in docs/CHANGELOG.rst.
The IB API Headers are no longer added to every project. Instead, a dedicated header project IbApi has been added.
The IbLauncher now prefers Python 3 if available
Fixed
Fix logger nullptr bug in SystemMonitor
Fast-RTPS ComAdapter creation is now thread safe
Interface compatibility with Sprint-28
Application binary interface (ABI): No
Application software interface (API): Yes
Application middleware interface: Yes
[Sprint-28] - 2019-07-03
Added
New demo that shows how integration tests can be written for the Vector Integration Bus.
Fixed
IbLauncher can now be started from every directory location on Linux and Windows. The global IntegrationBus-BinPath and IntegrationBus-LibPath are now set to absolute paths inside the IbLauncher project. Furthermore, the IbLauncher shell script now sets absolute paths for the bin and lib path.
FastRTPS socket buffer sizes now use default values when not set in IbConfig. This could lead to random socket buffer sizes in release builds.
VIB integration tests now can be launched directly from the Visual Studio test runner.
Interface compatibility with Sprint-27:
Application binary interface (ABI): Yes
Application software interface (API): Yes
Application middleware interface: Yes
[Sprint-27] - 2019-06-19
Changed
NetworkSimulator VIBE is now only used for configured links. For all other links, the trivial simulation is used.
Fixed
The IB Launcher will now work if installed in a path containing spaces.
The FlexRay configuration will now use strings to represent the enumeration values of pChannels, pWakeupChannel, and pdMicrotick, as well as channels and transmissionMode for the TxBuffers. The new valid values are:
Channels: “A”, B”, or “AB”
pdMicrotick: “12.5ns”, “25ns”, or “50ns”
transmissionMode: “Continuous” or “SingleShot”
Interface compatibility with previous version:
Application binary interface (ABI): No
Application software interface (API): Yes
Application middleware interface: Yes
[Sprint-26] - 2019-05-29
Added
New FlexRay controller callback
IFrController::CycleStartHandler()
, which is called at the start of each FlexRay cycle. Only available VIBE simulation.New config option for FastRTPS middleware to configure SocketBuffer sizes
New config options to configure FlexRay TxBuffers
Fixed
Fixed broken CMake target for installed IntegrationBus target: With the introduction of spdlog, the IntegrationBus cmake target depends on spdlog::spdlog target. However, the spdlog::spdlog target was not installed (only header files were copied, but no cmake config file was generated). Thus, the installed IntegrationBus target could not be used from cmake.
[Sprint-25] - 2019-05-14
Added
The FlexRay cluster and node configuration can now be specified in the IbConfig.json.
It is now possible to use
SetResponse()
andRequestMessage()
on LINControllers
configured as master. This can be used to send a LIN message from a master to slaves instead of theSendMessage()
.
Fixed
LIN Controller models are now robust to out-of-order configuration. It is no longer necessary to configure the master node before the slaves. And the master can handle an out-of-order configuration, e.g., if a response reaches the master before the response configuration.
[Sprint-24] - 2019-03-13
Added
Support to swap out participants between simulation runs. A participant can activate the so called coldswap feature by calling
IParticipantController::EnableColdswap()
. The coldswap process can be initiated by a system controller once the system is in state stopped.Participants can now signal that they are alive by refreshing the participant status. This can be done by calling
IParticipantController::RefreshStatus()
and is reflected in the new field ParticipantStatus::refreshTime.Logging is finally here. We’ve integrated spdlog and enabled distributed logging with a new spdlog sink. The FastRtpsComAdapter automatically creates an spdlogger with this sink. You can access this logger via
IComAdapter::GetLogger()
and add any further sinks, e.g., to print logging messages to std out. Examples for this can be found in the CAN demo and in the PassiveSystemMonitor.
Changed
The signature of simulation tasks has changed from void(std::chrono::nanoseconds now) to void(std::chrono::nanoseconds now, std::chrono::nanoseconds duration). The guaranteed simulation time that can be processed is [now, now+duration). The old signature is still available but is now considered deprecated and will be removed in a future sprint.
[Sprint-23] - 2019-02-20
[Sprint-22] - 2019-02-06
Added
The IbConfig is now validated before creating a ComAdapter. NB: ib::CreateFastRtpsComAdapter() will now also throw Misconfiguration exceptions!
Fixed
The IbLauncher now correctly shows both stdout and stderr. Previously, only stdout was shown.
[Sprint-21] - 2019-01-23
Added
Strict sync, i.e., calling wait_for_all_acked() between ticks, is now configurable via the IbConfig.json: SimulationSetup/TimeSync/SyncPolicy.
If a participant is configured as SyncMaster, the corresponding ComAdapter will now automatically create the SyncMaster instance.
Removed
SimulationSetup/TimeSync/SyncType has been removed from the IbConfig.json as the SyncType can now be configured per participant.
IParticipantController::EnableStrictSync() has been removed. This is now handled automatically according to the configured SyncPolicy.
Changed
The TimeSyncConfigBuilder is now accessed ib::cfg::SimulationSetupBuilder::ConfigureTimeSync(). Old: ib::cfg::SimulationSetupBuilder::SetSyncType(SyncType).
ComAdapter is now configured automatically according to SyncPolicy. Only in strict mode, wait_for_all_acked() is used and a short heartbeat period is used.
IComAdapter::CreateSyncMaster() was renamed to IComAdapter::GetSyncMaster() since the SyncMaster is automatically instantiated by the FastRtpsComAdapter if configured.
Fixed
SystemMonitor was made more robust to race conditions that could lead to a IB Startup Failure (SystemState stuck in SystemState::Invalid)
[Sprint-20] - 2018-12-19
Added
LIN: new method ILinController::SetResponseWithChecksum() to override the configured checksum model. This can be used to facilitate fault injection and simulation.
LIN: support for LIN network management (sleep / wakeup). See new methods ILinController methods: SetSleepMode(), SetOperationalMode(), SendGoToSleep(), SendWakeupRequest() and related callbacks.
Removed
Demo projects ExecutionController and ExecutionControllerProxy were based on the deprecated synchronization API and were Removed
Changed
LIN: IMPORTANT you must now specify a LIN ID for each lin::SlaveResponseConfig. lin::SlaveConfig now longer identifies the lin::SlaveResponses by positions.
All demo projects Can, Lin, Ethernet, FlexRay, GenericMessage and Io now use the new synchronization API.
Revised public API:
Renamed files: IoDataTypes.hpp -> IoDatatypes.hpp
Fixed inconsistent naming:
IComAdapter.hpp: RegisterCanBusSimulator -> IComAdapter::RegisterCanSimulator
CanDatatypes.hpp: Removed ‘e’ prefix from enum classes CanControllerState, CanErrorState, CanTransmitStatus
EthDatatypes.hpp: Removed ‘e’ prefix from enum classes EthTransmitStatus, EthState, EthMode
IEthController.hpp: Renamed ‘acticate()’, ‘deacticate()’ -> ‘Acticate()’, ‘Deacticate()’
ISyncAdapterTtd.hpp: Renamed SetOnTickCallback -> SetTickHandler
IGenericSubscriber.hpp: Renamed RegisterCallback -> SetReceiveMessageHandler
ISyncMasterDt.hpp: Renamed RegisterShutdownHandler -> SetShutdownHandler
Moved generic messages into subnamespace: ib::sim -> ib::sim::generic
Made include namespaces reflect folder names: ib::Simulation::Can|Ethernet|Flexray|Generic|Io|Lin|Kernels -> ib::sim::can|eth|fr|generic|io|lin|kernels
[Sprint-19] - 2018-12-05
Added
New unified SyncMaster that replaces the SyncMasterDt and SyncMasterTtd. Requires new state handling with ParticipantController
The participant discovery mechanism can now be configured in the IbConfig.json, section “MiddlewareConfig/FastRTPS/DiscoveryType”. The default is Local, which limits communication to the localhost.
The build number of the master branches CD build is now available as ib::version::BuildNumber()
On windows, version information is now available as metadata of the IntegrationBus.dll
Removed
“MiddlewareConfig/FastRTPS/CommunicationMaster” has been removed and replaced with the new DiscoveryType options.
Changed
SyncMasterDt and SyncMasterTtd are now considered deprecated.
Fixed
Unicast discovery is now working with DiscoveryType Unicast and a list of the participants’ IP-Addresses.
[Sprint-18] - 2018-11-21
Added
New IbLauncher to startup a whole IB System. See /Launcher/README.md for infos on how to use (AFTMAGT-120)
Version information is now available in the IB library via the following API calls: ib::version::Major(), ib::version::Minor(), ib::version::Patch(), ib::version::String(), ib::version::SprintNumber(), ib::version::SprintName(), ib::version::GitHash() (AFTMAGT-154)
Removed
LinkId has been removed from CAN, LIN, FlexRay and Ethernet data types, as they are no longer needed (see below).
Changed
LIN masters now directly store slave responses to answer any request without delay. Instead of emulating LIN communication over the IB, LIN slaves now send newly configured response data to masters. (AFTMAGT-155) NB: calling ILinController::RequestMessage() will now trigger a callback to the registered MessageHandler before RequestMessage() returns!
There is now one FastRTPS topic per link. I.e., if there are two CAN busses CAN1 and CAN2 in your configuration, they will now use separate topics. Previously, traffic of different links (busses) was separated by a linkid field in the message data types and controllers had to filter out messages accordingly. This is no longer necessary. (AFTMAGT-140)
[Sprint-17] - 2018-11-07
Added
New state handling, which is provided by the following classes:
- – sync::IParticipantController (cf. IComAdapter::GetParticipantController())
allows registering callbacks for the different phases of a participant’s life time (e.g., Initialization, Running, Stop, Shutdown) and replaces the old sync::ISyncAdapterTtd and sync::ISyncAdapterDt.
- – sync::ISystemMonitor (cf. IComAdapter::GetSystemMonitor()) is a passive
component, which never sends data, it allows registering callbacks to observe the states of the other participants as well as the global system state.
- – sync::ISystemController (cf. IComAdapter::GetSystemController()) is the
counterpart to the system monitor and allows manipulating the system state, e.g., by initializing individual participants.
- – sync::ISyncMaster (cf. IComAdapter::CreateSyncMaster()) a unified synchronization master
(currently only supports simple Tick/TickDone synchronization).
– Participants can now inidividually specify one of the following synchronization mechanisms:
DiscreteEvent (not implemented yet)
TimeQuantum (Quantum Request and Grant with variable quantum lengths)
DiscreteTime (Fixed interval synchronization with participant acknowledgement (Tick/TickDone))
DiscreteTimePassive (the participant receives Ticks but does not generate TickDone messages and thus does not actively participate in the system synchronization), Unsychronized (for participants that are only intended to monitor or control the simulation but not participante as an active client)
GenericMessage configuration is now available at both IGenericPublisher and IGenericSubscriber (AFTMAGT-137)
Changed
The old state handling including the old SyncAdapters is now considered deprecated! This affects the following classes: sync::ISyncAdapterDt, sync::ISyncAdapterTtd, sync::ISyncMasterTtd, sync::ISyncMasterDt, sync::IExecutionControllerProxy. And the matching factory methods: IComAdapter::CreateSyncAdapterDt(), IComAdapter::CreateSyncAdapterTtd(), IComAdapter::CreateSyncMasterTtd(), IComAdapter::CreateSyncMasterDt(), IComAdapter::CreateExecutionControllerProxy().
The SyncType can now be configured per participant (Currently only DiscreteTime supported)
[Sprint-15] - 2018-10-10
Added
Documentation for throwing behavior at API level (AFTMAGT-50)
Doxygen documentation for vehicle network controller APIs (AFTMAGT-126)
Automated CI build system for Jenkins CI, cf. folder /IntegrationBus/ci/ (AFTMAGT-55)
Support for custom FastRTPS XML configurations; the file name can be specified in the ib config (Config.middlewareConfig.fastRtps) (AFTMAGT-138)
Fixed
Fixed a bug that caused the FastRTPS communication to sporadically hang (AFTMAGT-126)
The number of links for IO ports is no longer limited (AFTMAGT-134)
[Sprint-14] - 2018-09-27
Added
GenericPublisher::Config() and GenericSubscriber::Config() accessors for corresponding config items. This allows retrieving the name of a Publisher or Subscriber (AFTMAGT-125)
ib::cfg::Config::ToJsonString() converts an integration bus config to a parsable json string.
CMake install target for the IntegrationBus
The generic message demo now uses time synchronization, i.e., an ExecutionController is required to run the demo
Changed
ExecutionController demo now terminates automatically unless started with –waitForKeyPress
Fixed
The byte order of mac addresses in ethernet frames was fixed
[Sprint-13] - 2018-09-12
Added
Changelog :)
ib::cfg::ConfigBuilder to create IbConfigs programatically, cf. example in Demo/ConfigBuilder/ConfigBuilderDemo.cpp.
Support for Continous Integration (CI) with Jenkins, cf. /ci/
IO ports can now be specified and initialized via the IntegrationBus config.
Support for multiple GenericMessage instances (specified via IbConfig.json)
Added new top-level section ‘MiddlewareConfig’ to JSON file for settings FastRTPS/CommunicationMaster and FastRTPS/ConfigFileName; moved existing configuration tree into top-level section ‘SimulationSetup’.
FastRTPS version bump from v1.5.0 to v1.6.0. FastRTPS is now included as a sub module
Removed
ib::sim::IGenericMessageController()
ib::mw::IComAdapter::CreateGenericMessageController()
Changed
Moved config headers to /include/ib/cfg to match namespace, i.e., /include/ib/Config.hpp moved to /include/ib/cfg/Config.hpp.
IoPorts are now type specific with direction. IComAdapter::CreateIoPort() has been replaced with: IComAdapter::CreateAnalog{In,Out}(), IComAdapter::CreateDigital{In,Out}(), IComAdapter::CreatePattern{In,Out}(), IComAdapter::CreatePwm{In,Out}()
IComAdapter::CreateGenericMessageController() has been replaced by IComAdapter::CreateGenericPublisher() and IComAdapter::CreateGenericSubscriber(), cf. updated demo Demo/GenericMessage/
Outdated References
Some references in the changelog may have been outdated by changes made to the documentation due to the development process.
These references were replaced with a link to this notice.
Please take a look at the documentation of the version of SilKit / IntegrationBus to which the changelog entry belongs.