eCAL 5.10.0

Changelog


# Highlights

- Added Shared Memory improvements ([Multi-Buffering](https://continental.github.io/ecal/advanced/layers/shm.html#multi-buffering-mode-optional) & [Zero-Copy](https://continental.github.io/ecal/advanced/layers/shm.html#zero-copy-mode-optional))
    _(turned off by default to stay compatible! Turn them on to benefit from the improvements!)_
- Added [TCP Transport layer](https://continental.github.io/ecal/advanced/layers/tcp.html) (Improves Network subscriptions of large messages)

- Added full UTF-8 Support for all Apps on Windows
- Added Dark Mode in all Apps
- eCAL Mon can now display and dock plugins in it's main window, not only in the reflection Dialog
- Added eCAL Mon plugin for plotting numeric data in a 2D graph

Check out the Release page: https://continental.github.io/ecal/versions/5.10/whats_new.html

# Changelog

Core:
- Added Error callback to async service calls
- Introduced shared-memory features to increase performance:
    - zero copy (blocking callback) option
    - Multi-buffering (multiple SHM files per topic for parallel read + write access)
- Introduced TCP transport layer
- Improved ecal.ini loading strategy (see https://continental.github.io/ecal/configuration/options.html for details)
- Added GetSubscriberCount() and GetPublisherCount() To eCAL::CSubscriber / eCAL::CPublisher
- Added parallelism in publishers and subscribers. Subscriber callbacks now run in parallel, which can massively boost performance when having multiple subscribers in a process.
- Added generic SetAttribute() function to publishers / subscribers. The attributes can be obtained from the Monitoring Layer.
- eCAL now warns if NPCAP is activated but eCAL hasn't even been built with NPCAP support
- Added eCAL::Config API to access the current eCAL Settings
- Default network mode is now "local", i.e., network is disabled. This counts for ecal.ini and internal default values.
- Removed HostID Check for shared-memory transport. Now SHM works in Docker containers
- Redesigned Raw-Service-API and eCAL Service Implementation (Protobuf-Service API is not affected)
    - Added Service Event Callbacks
    - Added timeout parameters
    - Added IsConnected() method to Service Clients
    - Added monitoring layer (Service clients can now be obtained via monitoring layer)
    - Added more samples
    - The service server name can now be set from the constructor
    - Added some parallelization for improved performance
    - If you are using the Raw-Service-API please check the documentation on how to solve incompatibilities: https://continental.github.io/ecal/versions/5.10/api_incompatibilities.html
    - Added Dynamic Service client that can call services based on the descriptor string sent by the Service Server (without knowing the .proto file at compile time)

- All strings from the API are now interpreted as UTF-8
- Improved Error handling of UDP Layer


- Deprecations:
    - GeteCALDefaultIniFile(). The path to the actual ecal.ini file can be obtained from eCAL::Config
    - size_t CSubscriber::Receive(). Use the bool-returning equivalent with the same name instead.
    - Process::GetHostID(). The HostID is not relevant in eCAL anymore.

- Removed C -> C++ wrapper (was only needed for Visual Studio 2012 compatibility). This does not affect the "normal" C API of eCAL which is still present and there is no intention to remove that.



ecal-hdf5:
- hdf5 files can now be created bit-exact (an unused system timestamp has been removed for that. This does not affect compatibility).

Build:
- Cleanup of thirdparty build logic
- Fixed macOS build of ecal::pb (it can now be a dynamic lib)
- eCAL's CMakeLists.txt can now more easily be included in other projects
- Updated and added dependencies and submodules:
    - CapnProto
    - Googletest
    - HDF5

Mon:
- The monitor can now display the eCAL runtime version of other eCAL Processes using eCAL 5.10 and up
- The protobuf reflection now displays default (non-set) values
- Added dark-mode (Menu: View/Theme/Dark)
- Added "Category=Development" to .desktop file on Ubuntu
- The network mode (local / cloud) is now displayed in the status bar
- The path to the ecal.ini in the System Information widget is now clickable to open the file
- Added eCAL Mon Plugin Template to the build
- Added Plugin for 2D Plots of numeric data
- Added possibility to dock Monitor Plugins in the main Windows (they used to be only in the reflection windows, before)

Rec:
- Added Unicode / UTF-8 Support on Windows
- Added dark-mode (Menu: View/Theme/Dark)
- Set default HDF5 Splitsize to 1000MiB
- Added "Category=Development" to .desktop file on Ubuntu
- Added "can_upload" and "can_comment" field in the RPC Status API

Play:
- Properly associated .ecalmeas files with eCAL Play on Windows
- Added GetStatus RPC Call
- Added Unicode / UTF-8 Support on Windows
- Added DarkMode (Menu: View/Theme/Dark)
- Added "Category=Development" to .desktop file on Ubuntu
- Labels can now be saved to a custom location

Sys:
- Code cleanup
- Added Unicode / UTF-8 Support on Windows
- Added dark-mode (Menu: View/Theme/Dark)
- Added "Category=Development" to .desktop file on Ubuntu


Python:
- Added build-feature to create self-contained python WHLs that include the necessary eCAL runtime libraries and don't depend on a system installation. This is the new default for official builds.
- Fixed channel class in measurement.py to raise a sensible error
- Wheels now contain pre-generated pb2.py files
    

# Notes

- By default, zero-copy and multi-buffering is deactivated. This makes it 100% compatible with previous eCAL Versions. Using the multi-buffering feature will prevent eCAL subscribers from eCAL 5.9 and lower to receive data sent by eCAL 5.10 publishers. ShmEnableZeroCopy can be used but will be ignored by eCAL 5.9 and lower. eCAL 5.10 subscribers are always able to receive data from eCAL <= 5.9 publishers regardless of the settings.
- By default, the TCP transport layer is not used for Publishers. This makes it 100% compatible with previous eCAL Versions. The layer can be enabled on a per-publisher-base (recommended) or via ecal.ini and improves performance with large payloads. When enabled, subscribers from eCAL 5.9 and lower are not able to receive the data.