eCAL 5.12.0#

Changelog#

![ecal-logo-5-12](https://github.com/eclipse-ecal/ecal/assets/49162693/437975aa-5c3f-4185-be1e-d3c4c092ddaf)

# Highlights

- **True Zero Copy!**

  eCAL had Zero Copy in the past. But now it's even better! With the new **low level API** you can precisely control which part of your Shared Memory message you actually have to change and therefore speed up your system even more!

  Check out the [Zero Copy documentation](https://eclipse-ecal.github.io/ecal/advanced/layers/shm_zerocopy.html) for explanations and examples on how to use it!

- **Container support through host-groups**

  You want to containerize your eCAL Apps? Well, then this is the release for you. In the past, you had to choose between enabling support for eCAL services or utilizing the shared memory transport layer, now you can have both simultaneously.

  Check out the [eCAL in Docker tutorial](https://eclipse-ecal.github.io/ecal/advanced/ecal_in_docker.html) to learn more!

  This also enables you to manage apps in your docker containers with eCAL Sys!

- **Improved eCAL Monitor for Debugging**

  We enriched the eCAL Monitor with even more information, that allow you to debug your system. You can now see the size and hash of your publishers' and subscribers' **descriptors**. And - if that isn't enough for you - the eCAL Monitor got an entirely new **Raw Data panel** for very deep (but easy!) inspections of the registration layer.

- **Improved support for C#**

  The C# language binding has seen some mayor updates. Most notably, the Client / Server API is now available in C#, so you can use eCAL's RPC features!

# Changelog

## Core

- **API, Features & Behavior**
  - Added true-zero-copy support (i.e., even when publishing), when using Shared Memory (#1082)
    - Added `CPayloadWriter` class that represents a view on the shared memory
    - Added samples on how to utilize it:
      - https://github.com/eclipse-ecal/ecal/tree/master/samples/cpp/pubsub/binary/binary_zero_copy_snd
      - https://github.com/eclipse-ecal/ecal/tree/master/samples/cpp/pubsub/binary/binary_zero_copy_rec
  - Added active un-registration for pub/sub and client/server. This makes apps that rely on the monitoring data (like eCAL Mon) more responsive. (#1086)
  - Added events for Publishers and Subscribers: `pub_event_update_connection` and `sub_event_update_connection` (#920)
  - Added API to retrieve the monitoring / registration data as a native C++ struct
    This new API function is much more performant than the old protobuf based version, as it doesn't require a serialization and deserialization. (#994)
  - Added eCAL Util methods for efficiently getting information about Topics and Services without having to initialize the eCAL Monitoring layer: `eCAL::Util::GetTopics()`, `eCAL::Util::GetServices()` (#990, #1010)
  - Added API to separate the encoding (e.g. `proto`) from the message type (e.g. `pb.person`) (#1126, #1134)
    - The new information is provided atomically via the SDataTypeInformation struct
    - The internal `topic.proto` file is extended with more fields. For compatibility, both the old `ttype`, `tdesc` and the new `tinfo `fields are set.
    - Publishers and Subscribers now have a `SetTopicInformation()` / `GetTopicInformation()` function and new constructors. The old functions still exist.
  - The internal descriptor pool is now cleaned after not seeing a topic for a certain time (#995)
  - Added overload of `CMsgPublisher::Send()` that supports an acknowledgement timeout in cases where only Shared memory is used (#1026, #1040, #1064)
  - Create macros to deprecate functions / variables, since a given eCAL version. This allows users to see directly when something will be / has been deprecated. (#1146)
  - Removed support for iceoryx (#1056, #1046)

- **New `ecal.ini` options**
  - Fixed computation of UDP Multicast Address for a topic name (#950)
    This adds the `[network]/multicast_config_version` to the `ecal.ini`. The old implementation (`v1`) is currently the default. 
  - Added `[network]/host_group_name` setting in `ecal.ini`, that allows to steer which processes shall communicate via SHM. This now allows Docker containers running on the same host to communicate via SHM while still having their own hostname to be addressable by eCAL Services / RPC calls.  (#1143) 
  - Added `[experimental]/drop_out_of_order_messages` option to `ecal.ini` to drop out-of-order messages.
    The default is to not drop out of order messages, which is the old behavior. (#1039)

- **Fixes**
  - Limited internal SHM filenames to 31 characters in order to comply with the POSIX standard. This fixes issues on macOS. (#1009)
  - TCP Layer: Added bytes-alignment field in TCP Header to 8-byte-align the TCP user payload. (#1050)
    This fixes issues with Capnproto data being transported with TCP
  - Fixed an issue that could lead to deadlocks when calling `Destroy()` from a subscriber callback (#1130)
  - Fixed a bug that could cause data drops of the first published message when using the SHM Multibuffering feature (#1074)

## Apps

- **Mon**:
    - Added Raw-Data-Panel, that displays the un-interpreted content of the monitoring layer for debugging purposes (#1088)
    - Added Column in the topics panel that shows the size of the descriptor information (#1063)
    - Reflection windows don't warn about 2 or more publishers for a topic anymore. Having 2 or more publishers per topic is totally fine (and has always been). (#936)

- **Rec**:
    - Added RPC call "SetConfig" for remotely changing the configuration without having to load it from a file (#957)

- **Meas Cutter**:
    - Aligned output folder structure to eCAL Rec recordings (#1110)

## Bindings

- **C#**:
  - Added API for Service / Client interface + samples (#1043)
  - Added overload to `Publisher.Send()` that takes a `byte[]` (#1013)
  - Added `GetTime()` to Monitoring class (#1013)
  - Changed return type of `GetMonitoring()` and `GetLogging()` to `byte[]` (#1013)
  - Properly create Protobuf descriptors when using newer Protobuf Versions that have that feature available. (#1018)

- **Python**:
  - Zero size messages now create a zero-size bytearray instead of `none` (#1113)


## Build

- Build support for the latest flatbuffers version (23.3.3) (#1071, #1133)
- Upgraded official Windows installer to be built with Visual Studio 2019 (v142). From now on, you will need VS 2019 or up to link against the SDK coming from our installer.
  Also removed a previous hack that was required to build the complete project with VS 2015 (v140). (#1097)
- Allow standalone build of C# bindings (#1002)

- Updated submodule dependencies:
  - hdf5 (#1148)
  - simpleini (#1049)
  - ftxui (#1096)

## Samples:
- Changed directory structure of all samples (#1099)
- Added C++ binary Publish/Subscribe samples demonstrating new zero copy mechanism (#1169)
- Added C# Server/Client samples (#1043)
- Added Python sample for writing protobuf messages with low level eCALHdf5 API (#1120)

Downloads#