diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 8f94a4b040..c3f0131668 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -20,7 +20,7 @@ [eca]: http://www.eclipse.org/legal/ECA.php [contributing]: https://github.com/eclipse-iceoryx/iceoryx/blob/master/CONTRIBUTING.md#coding-style [testing]: https://github.com/eclipse-iceoryx/iceoryx/blob/master/doc/website/advanced/best-practice-for-testing.md -[changelog]: https://github.com/eclipse-iceoryx/iceoryx/blob/master/CHANGELOG.md +[changelog]: https://github.com/eclipse-iceoryx/iceoryx/blob/master/doc/website/release-notes/iceoryx-unreleased.md ## Notes for Reviewer diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index eae99beb47..0000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,659 +0,0 @@ -# Change Log - -## [vX.X.X](https://github.com/eclipse-iceoryx/iceoryx/tree/v1.0.0) (unreleased) - -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/v1.0.1...master) - -**Features:** - -- Partial enable iceoryx building with msvc2015+clang [\#965](https://github.com/eclipse-iceoryx/iceoryx/issues/965) -- C binding for posh configuration [\#930](https://github.com/eclipse-iceoryx/iceoryx/issues/930) -- Enhance MacOS performance with timed{send,receive} functionality in unix domain socket[\#903](https://github.com/eclipse-iceoryx/iceoryx/issues/903) -- Multi-Publisher support for DDS gateway and generic gateway class [\#900](https://github.com/eclipse-iceoryx/iceoryx/issues/900) -- Replace `iox-gw-iceoryx2dds` and `iox-gw-dds2iceoryx` gateways with `iox-dds-gateway` [\#900](https://github.com/eclipse-iceoryx/iceoryx/issues/900) -- Enhance posixCall[\#805](https://github.com/eclipse-iceoryx/iceoryx/issues/805) -- New chunk available callback for the new C++[\#391](https://github.com/eclipse-iceoryx/iceoryx/issues/391) -- Git Hooks on iceoryx[\#486](https://github.com/eclipse-iceoryx/iceoryx/issues/486) -- static memory alternative for std::function[\#391](https://github.com/eclipse-iceoryx/iceoryx/issues/391) -- Adding support for Helix QAC 2021.1[\#755](https://github.com/eclipse-iceoryx/iceoryx/issues/755) thanks to @toniglandy1 -- Axivion analysis on CI[\#409](https://github.com/eclipse-iceoryx/iceoryx/issues/409) -- Cpptoml can be provided by an external source[\#951](https://github.com/eclipse-iceoryx/iceoryx/issues/) -- Extend cxx::optional constructor for in place construction so that copy/move for values inside the optional even could be deleted[\#967](https://github.com/eclipse-iceoryx/iceoryx/issues/967) -- Add templated `from`/`into` free functions to formalize conversions from enums and other types [#992](https://github.com/eclipse-iceoryx/iceoryx/issues/992) -- UniqueId class for unique IDs within a process [#1010](https://github.com/eclipse-iceoryx/iceoryx/issues/1010) -- Add requirePublisherHistorySupport option at subscriber side (if set to true requires historyRequest <= historyCapacity to be eligible for connection) [#1029](https://github.com/eclipse-iceoryx/iceoryx/issues/1029) -- Add `/tools/scripts/ice_env.sh` shell script to provide simple access to docker containers for CI debugging [#1049](https://github.com/eclipse-iceoryx/iceoryx/issues/1049) -- Introduce `cxx::FunctionalInterface` to enrich nullable classes with `and_then`, `or_else`, `value_or`, `expect` [\#996](https://github.com/eclipse-iceoryx/iceoryx/issues/996) -- Add C++17 `std::perms` as `cxx::perms` to `iceoryx_hoofs/cxx/filesystem.hpp`. [#1059](https://github.com/eclipse-iceoryx/iceoryx/issues/1059) -- Support FreeBSD as a representative for the UNIX platforms [#1054](https://github.com/eclipse-iceoryx/iceoryx/issues/1054) -- Add event parameter to `findService` method [#415](https://github.com/eclipse-iceoryx/iceoryx/issues/415) -- Implement stream operator for `ChunkReceiveResult` and `AllocationError` to be able to use it with ostream and LogStream [\#1062](https://github.com/eclipse-iceoryx/iceoryx/issues/1062) -- Replace IPC-channel-based `findService` with pub/sub-based on [#415](https://github.com/eclipse-iceoryx/iceoryx/issues/415) - -**Bugfixes:** - -- Fix support for libc++ on clang[\#905](https://github.com/eclipse-iceoryx/iceoryx/issues/905) -- Fix warnings for gcc-11.1[\#838](https://github.com/eclipse-iceoryx/iceoryx/issues/838) -- Incremental builds with the build script are broken[\#821](https://github.com/eclipse-iceoryx/iceoryx/issues/821) -- Compile failed because of missing for GCC 11[\#811](https://github.com/eclipse-iceoryx/iceoryx/issues/811) thanks to @homalozoa -- Unable to build cyclone dds idlpp-cxx [\#736](https://github.com/eclipse-iceoryx/iceoryx/issues/736) -- Fix format string issues with introspection client [\#960](https://github.com/eclipse-iceoryx/iceoryx/issues/960) thanks to @roehling -- Add support for Multi-Arch install destinations [\#961](https://github.com/eclipse-iceoryx/iceoryx/issues/961) thanks to @roehling -- Fix a few misspellings in log messages [\#962](https://github.com/eclipse-iceoryx/iceoryx/issues/962) thanks to @roehling -- Fix typos in goals/non-goals document [\#968](https://github.com/eclipse-iceoryx/iceoryx/issues/968) -- Catch deserialization errors for enums in publisher and subscriber options [\#989](https://github.com/eclipse-iceoryx/iceoryx/issues/989) -- Fix linker error on QNX [\#1013](https://github.com/eclipse-iceoryx/iceoryx/issues/1013) -- When posix mutex fails a correct error message is reported on the console [\#999](https://github.com/eclipse-iceoryx/iceoryx/issues/999) -- Only use `std::result_of` for C++14 to be able to use iceoryx in C++20 projects [\#1076](https://github.com/eclipse-iceoryx/iceoryx/issues/1076) -- Set stack size for windows in singleprocess example and posh tests [\#1082](https://github.com/eclipse-iceoryx/iceoryx/issues/1082) - -**Refactoring:** - -- Handle nullptr callbacks in waitset and listener[\#932](https://github.com/eclipse-iceoryx/iceoryx/issues/932) -- Add clang-tidy rules for iceoryx_hoofs[\#889](https://github.com/eclipse-iceoryx/iceoryx/issues/889) -- Move all tests into an anonymous namespace[\#563](https://github.com/eclipse-iceoryx/iceoryx/issues/563) -- Refactor smart_c to use contract by design and expected[\#418](https://github.com/eclipse-iceoryx/iceoryx/issues/418) -- PoshRuntime Mock[\#449](https://github.com/eclipse-iceoryx/iceoryx/issues/449) -- Clean-up Doxygen for all methods in headers[\#583](https://github.com/eclipse-iceoryx/iceoryx/issues/583) -- Iox-#590 Rename utils to hoofs[\#790](https://github.com/eclipse-iceoryx/iceoryx/pull/790) -- Iox-#590 plantuml in design documentation[\#787](https://github.com/eclipse-iceoryx/iceoryx/pull/787) -- Refine quality levels[\#425](https://github.com/eclipse-iceoryx/iceoryx/issues/425) -- Clean-up std::terminate usage[\#261](https://github.com/eclipse-iceoryx/iceoryx/issues/261) -- Add Quality Declaration Document[\#910](https://github.com/eclipse-iceoryx/iceoryx/issues/910) -- Make `cxx::string::capacity` a `static` method[\#979](https://github.com/eclipse-iceoryx/iceoryx/issues/979) -- Restructure iceoryx tools [\#471](https://github.com/eclipse-iceoryx/iceoryx/issues/471) -- Use cxx::expected for MemoryManager::getChunk [\#954](https://github.com/eclipse-iceoryx/iceoryx/pull/991) -- Upgrade GTest/GMock to v1.10 [\#841](https://github.com/eclipse-iceoryx/iceoryx/issues/841) -- Remove the requirement for INVALID_STATE for the cxx::expected [\#987](https://github.com/eclipse-iceoryx/iceoryx/issues/987) -- Add unique test identifers [\#988](https://github.com/eclipse-iceoryx/iceoryx/issues/988) -- Remove `ApplicationPort` and `ApplicationPortData` classes [\#415](https://github.com/eclipse-iceoryx/iceoryx/issues/415) -- Remove creation pattern from `MemoryMap` and replace it with `MemoryMapBuilder` [\#1036](https://github.com/eclipse-iceoryx/iceoryx/issues/1036) -- Fix error handling of `TypedUniqueId` and refactor it to `UniquePortId` [\#861](https://github.com/eclipse-iceoryx/iceoryx/issues/861) -- Updating Codecov API and enforce CMake version 3.16 for building iceoryx [\#774](https://github.com/eclipse-iceoryx/iceoryx/issues/774) and [\#1031](https://github.com/eclipse-iceoryx/iceoryx/issues/1031) -- Remove `InvalidIdString` and `isValid()` from `ServiceDescription`, replace Wildcard string with `iox::cxx::nullopt` [\#415](https://github.com/eclipse-iceoryx/iceoryx/issues/415) -- Remove creation pattern from `SharedMemory` and replace it with `SharedMemoryBuilder` [\#1036](https://github.com/eclipse-iceoryx/iceoryx/issues/1036) -- Remove the leading slash requirement from the name of a shared memory in `SharedMemory` and `SharedMemoryObject` [\#439](https://github.com/eclipse-iceoryx/iceoryx/issues/439) - -**New API features:** - -- Introduce `iceoryx_hoofs/cxx/filesystem.hpp` which implements `std::perms` as `cxx::perms`. - -```cpp -#include "iceoryx_hoofs/cxx/filesystem.hpp" - -// ... -cxx::perms filePermissions; -filePermissions = cxx::perms::owner_read | cxx::perms::group_write; -std::cout << filePermissions << std::endl; -``` - -**API Breaking Changes:** - -The CMake files in iceoryx expect to have CMake version 3.16 or greater installed, otherwise the build fails. -(Hint: Ubuntu 18 users can install `cmake-mozilla` from the universe repository provided by Canonical) - -Dependency for building the iceoryx_dds gateway changed from `openjdk` (Java) to `bison` - -Change include from `iceoryx_hoofs/cxx/helplets.hpp` to `iceoryx_hoofs/cxx/requires.hpp` -when using `cxx::Expects` or `cxx::Ensures` -```cpp -// before -#include "iceoryx_hoofs/cxx/helplets.hpp" - -iox::cxx::Expects(someCondition); -iox::cxx::Ensures(anotherCondition); - -// after -#include "iceoryx_hoofs/cxx/requires.hpp" - -iox::cxx::Expects(someCondition); -iox::cxx::Ensures(anotherCondition); -``` - - -Replace Creation pattern from `MemoryMap` with `MemoryMapBuilder`. - -```cpp -// before -auto memoryMapResult = posix::MemoryMap::create(baseAddress, length, fileDescriptor, accessMode, flags, offset); - -// after -auto memoryMapResult = posix::MemoryMapBuilder().baseAddressHint(baseAddress) - .length(length).fileDescriptor(fileDescriptor) - .accessMode(accessMode).flags(flags) - .offset(0).create(); -``` - -Rename utils to hoofs: - -- in CMake you need now to find and link the package `iceoryx_hoofs` instead of `iceoryx_utils` - -```cmake -# before -find_package(iceoryx_utils REQUIRED) -target_link_libraries(${target} - iceoryx_utils::iceoryx_utils) - -# after -find_package(iceoryx_hoofs REQUIRED) -target_link_libraries(${target} - iceoryx_hoofs::iceoryx_hoofs) -``` - -- the include paths for `iceoryx_utils` are now `iceoryx_hoofs` - -```cpp -// before -#include "iceoryx_utils/cxx/string.hpp" - -// after -#include "iceoryx_hoofs/cxx/string.hpp" -``` - -Refactoring SmartC: - -- Renaming SmartC wrapper to posixCall. -- Removed `getErrorString()` from posixCall, please use `getHumanReadableErrnum()` instead. -- Enhanced posixCall to handle a common case were multiple errnos are ignored just to suppress error logging - -```cpp -// before -#include "iceoryx_utils/cxx/smart_c.hpp" - -auto unlinkCallPublisher = iox::cxx::makeSmartC( - unlink, iox::cxx::ReturnMode::PRE_DEFINED_ERROR_CODE, {ERROR_CODE}, {ENOENT}, sockAddrPublisher.sun_path); - - if (unlinkCallPublisher.hasErrors()) - { - std::cout << "unlink error" << std::endl; - exit(1); - } - -// after -#include "iceoryx_utils/posix_wrapper/posix_call.hpp" - -iox::posix::posixCall(unlink)(sockAddrPublisher.sun_path) - .failureReturnValue(ERROR_CODE) - .ignoreErrnos(ENOENT, EBUSY) // can be a comma-separated list of errnos - .evaluate() - .or_else([](auto& r) { - std::cout << "unlink error " << r.getHumanReadableErrnum() << std::endl; - exit(1); - }); -``` - -A `ServiceDescription` is now only string-based and no more wildcards are allowed. -A well-defined `ServiceDescription` consists of three non-empty strings. - -```cpp -// before -ServiceDescription myServiceDescription1(1U, 2U, 3U); -ServiceDescription myServiceDescription3("First", "Second"); -ServiceDescription myServiceDescription3(iox::capro::AnyServiceString, iox::capro::AnyInstanceString, iox::capro::AnyEventString); - -// after -ServiceDescription myServiceDescription1("Foo", "Bar", "Baz"); -ServiceDescription myServiceDescription2("First", "Second", "DontCare"); -ServiceDescription myServiceDescription3("Foo", "Bar", "Baz"); -``` - -The following classes have now an constructor marked as `explicit`: - -```cpp -explicit DeadlineTimer(const iox::units::Duration timeToWait); -explicit GenericRAII(const std::function& cleanupFunction); -explicit mutex(const bool f_isRecursive); -explicit PosixUser(const uid_t f_id); -explicit PosixUser(const string_t& f_name); -``` - -Renaming in `FileReader` class and logging of iceoryx_hoofs - -```cpp -// before -iox::cxx::FileReader reader("filename"); -std::string str; -if(reader.IsOpen()) { - reader.ReadLine(str); -} - -static auto& logger = CreateLogger("", "", iox::log::LogManager::GetLogManager().DefaultLogLevel()); - -// after -iox::cxx::FileReader reader("filename"); -std::string str; -if(reader.isOpen()) { - reader.readLine(str); -} - -static auto& logger = createLogger("", "", iox::log::LogManager::GetLogManager().DefaultLogLevel()); -``` - -Instead of using a constructor a `ServiceDescription` is now deserialized via a -static method with error handling: - -```cpp -// before -iox::cxx::Serialization serializedObj; -iox::capro::ServiceDescription service(serializedObj); - -// after -iox::cxx::Serialization serialisedObj; -capro::ServiceDescription::deserialize(serialisedObj) - .and_then([](auto& value){ - // Do something with the deserialized object - }) - .or_else([](auto& error){ - // Handle the error - }); -``` - -The service-related methods have been moved from `PoshRuntime` to `ServiceDiscovery`. The `offerService` -and `stopOfferService` methods have been removed and `findService` has now an additional event paramter: - -```cpp -// before -#include "iceoryx_posh/runtime/posh_runtime.hpp" - -poshRuntime.offerService(myServiceDescription); -poshRuntime.stopOfferService(myServiceDescription); -poshRuntime.findService({"ServiceA", iox::capro::AnyInstanceString}); - -// after -#include "iceoryx_posh/runtime/service_discovery.hpp" - -serviceDiscovery.findService("ServiceA", Wildcard, Wildcard); -``` - -The `iox::cxx::expected` has dropped the requirement for `INVALID_STATE`. With this, the -`ErrorTypeAdapter` which was necessary for non enum types was also removed. The specialization -of `ErrorTypeAdapter` for custom types must therefore also be removed in the user code. - -The `InvalidIdString` was removed from `ServiceDescription` and the Wildcard string was replaced -with a `iox::cxx::nullopt`. With this, every string is allowed within the `ServiceDescription`. -The default `ServiceDescription` consists of empty strings. - -- The queue port policy enums are adjusted to use them with `Client` and `Server`. - -The `QueueFullPolicy::BLOCK_PUBLISHER` is replaced with the more generic `QueueFullPolicy::BLOCK_PRODUCER`. - -```cpp -// old -iox::popo::SubscriberOptions options; -options.queueFullPolicy = iox::popo::QueueFullPolicy::BLOCK_PUBLISHER; - -// new -iox::popo::SubscriberOptions options; -options.queueFullPolicy = iox::popo::QueueFullPolicy::BLOCK_PRODUCER; -``` - -Similar, for `binding_c` it is `QueueFullPolicy_BLOCK_PRODUCER` instead of `QueueFullPolicy_BLOCK_PUBLISHER` - -```c -// old -iox_sub_options_t options; -iox_sub_options_init(&options); -options.queueFullPolicy = QueueFullPolicy_BLOCK_PUBLISHER; - -// new -iox_sub_options_t options; -iox_sub_options_init(&options); -options.queueFullPolicy = QueueFullPolicy_BLOCK_PRODUCER; -``` - -The `SubscriberTooSlowPolicy` is replaced with the more generic `ConsumerTooSlowPolicy` and -`SubscriberTooSlowPolicy::WAIT_FOR_SUBSCRIBER` became `ConsumerTooSlowPolicy::WAIT_FOR_CONSUMER`. - -```cpp -// old -iox::popo::PublisherOptions options; -options.subscriberTooSlowPolicy = iox::popo::SubscriberTooSlowPolicy::WAIT_FOR_SUBSCRIBER; - -// new -iox::popo::PublisherOptions options; -options.subscriberTooSlowPolicy = iox::popo::ConsumerTooSlowPolicy::WAIT_FOR_CONSUMER; -``` - -And with the `binding_c` - -```c -// old -iox_pub_options_t options; -iox_pub_options_init(&options); -options.subscriberTooSlowPolicy = SubscriberTooSlowPolicy_WAIT_FOR_SUBSCRIBER; - -// new -iox_pub_options_t options; -iox_pub_options_init(&options); -options.subscriberTooSlowPolicy = ConsumerTooSlowPolicy_WAIT_FOR_CONSUMER; -``` - -- The `CaproMessageSubType` enum is renamed to `CaproServiceType` and the values are renamed from `NOSUBTYPE`, - `SERVICE`, `EVENT` and `FIELD` to `NONE`, `PUBLISHER` and `SERVER` - -This change only affects `InterfacePorts` which used this enum to communicate whether the `CaproMessage` -was from a `SERVICE`, `EVENT` or `FIELD`. This was quite ara::com specific and with the introduction of the `ServerPort` -changes were needed. The distinction between a `FIELD` and an `EVENT` can be made by checking -`CaproMessage::m_historyCapacity`. - -```cpp -// old -caproMessage.m_subType = CaproMessageSubType::EVENT; - -// new -caproMessage.m_serviceType = CaproServiceType::PUBLISHER; -``` - -## [v1.0.1](https://github.com/eclipse-iceoryx/iceoryx/tree/v1.0.0) (2021-06-15) - -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/v1.0.0...v1.0.1) - -**Description:** -This is the first bugfix release for Eclipse iceoryx 1.0.0. We made minor changes in the documentation and added several patches. - -Compared to the feature content of the release 1.0.0, the following bug tickets where resolved: - -**Bugfixes:** - -- Github CI Integrationtests failing[\#825](https://github.com/eclipse-iceoryx/iceoryx/issues/825) -- Segmentation Fault in FileLock [\#808](https://github.com/eclipse-iceoryx/iceoryx/issues/808) -- cpptoml cannot be build due to failing examples [\#791](https://github.com/eclipse-iceoryx/iceoryx/issues/791) -- Missing template parameter for user-header in typed C++ API [\#768](https://github.com/eclipse-iceoryx/iceoryx/issues/768) -- Fix issues with generating website documentation [\#743](https://github.com/eclipse-iceoryx/iceoryx/issues/743) -- Starting an application after RouDi was terminated floods the cmd line with error messages [\#654](https://github.com/eclipse-iceoryx/iceoryx/issues/654) - -## [v1.0.0](https://github.com/eclipse-iceoryx/iceoryx/tree/v1.0.0) (2021-04-15) - -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/v0.90.7...v1.0.0) - -Description: -This is the first major release for Eclipse iceoryx. That means it is the first release with long-term support and the adopters of iceoryx can rely on a stable API. The release called Almond allows for true zero-copy inter-process-communication on Linux, QNX and MacOS and provides C and modern C++ user APIs. This release is supported until 2022-04-01. - -Compared to the feature content of the initial contribution, the main new features are: - -**Features:** - -- Introduction of a C API -- Refactoring of C++ API -- MacOS support -- Support for n:m communication -- Bridge to Eclipse Cyclone DDS - -See [Eclipse iceoryx 1.0.0 (Almond)](https://projects.eclipse.org/projects/technology.iceoryx/releases/1.0.0-almond) for more information. - -- Reserved chunkinfo user payload header [\#14](https://github.com/eclipse-iceoryx/iceoryx/issues/14) -- New chunk available callback for the new C++ and C APIs [\#350](https://github.com/eclipse-iceoryx/iceoryx/issues/350) -- Add generic QNX toolchain files [\#609](https://github.com/eclipse-iceoryx/iceoryx/issues/609) -- Introduction of Runnables/Nodes for the new APIs [\#349](https://github.com/eclipse-iceoryx/iceoryx/issues/349) - -**Refactoring:** - -- Added tests to iceoryx_posh and iceoryx_utils [\#496](https://github.com/eclipse-iceoryx/iceoryx/issues/496), - [\#484](https://github.com/eclipse-iceoryx/iceoryx/issues/484), [\#454](https://github.com/eclipse-iceoryx/iceoryx/issues/454) -, [\#240](https://github.com/eclipse-iceoryx/iceoryx/issues/240) -- Add [[nodiscard]] keyword to cxx::expected class [\#624](https://github.com/eclipse-iceoryx/iceoryx/issues/624) -- Refactor Relocatable Pointer [\#605](https://github.com/eclipse-iceoryx/iceoryx/issues/605) -- Integration test with RouDi and new API elements [\#378](https://github.com/eclipse-iceoryx/iceoryx/issues/378) -- Refactoring copyright headers [\#483](https://github.com/eclipse-iceoryx/iceoryx/issues/483) -- Integration of Unix Domain Sockets [\#381](https://github.com/eclipse-iceoryx/iceoryx/issues/381) -- Add how to install after build to guide [\#533](https://github.com/eclipse-iceoryx/iceoryx/issues/533) -- Add maven and openjdk-14-jdk-headless as build prerequisites [\#525](https://github.com/eclipse-iceoryx/iceoryx/issues/525) -- Refine modern pub/sub API [\#408](https://github.com/eclipse-iceoryx/iceoryx/issues/408) -- Replace introspection threads with PeriodicTask [\#489](https://github.com/eclipse-iceoryx/iceoryx/issues/489) -- Enable UndefinedBehaviorSanitizer [\#489](https://github.com/eclipse-iceoryx/iceoryx/issues/459) -- Move iceoryx from eclipse to iceoryx-eclipse organization [\#467](https://github.com/eclipse-iceoryx/iceoryx/issues/467) - -**Fixed bugs:** - -- TOML parser exceptions will crash RouDi [\#622](https://github.com/eclipse-iceoryx/iceoryx/issues/622) -- fail build on ubuntu 16.04 with g++ 5.4.0 [\#495](https://github.com/eclipse-iceoryx/iceoryx/issues/495) -- Wrong handling of applications that are started multiple times in parallel [\#404](https://github.com/eclipse-iceoryx/iceoryx/issues/404) -- Expected and_then/or_else calling callable without checking [\#599](https://github.com/eclipse-iceoryx/iceoryx/issues/599) -- std::void_t used in code [\#591](https://github.com/eclipse-iceoryx/iceoryx/issues/591) -- Fix resource leak caused by move ctor/assignment [\#542](https://github.com/eclipse-iceoryx/iceoryx/issues/542) -- nanoseconds in units::Duration are truncated [\#190](https://github.com/eclipse-iceoryx/iceoryx/issues/190) -- popo/user_trigger.hpp:33:5: error: exception specification of explicitly defaulted default constructor does not match the calculated one [\#494](https://github.com/eclipse-iceoryx/iceoryx/issues/494) -- iceoryx libs should be build as static libs [\#509](https://github.com/eclipse-iceoryx/iceoryx/issues/509) -- Build with gcov is broken [\#497](https://github.com/eclipse-iceoryx/iceoryx/issues/497) - -## [v0.99.7](https://github.com/eclipse-iceoryx/iceoryx/tree/v0.99.7) (2021-04-09) - -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/v0.99.6...v0.99.7) - -- cleanup testing libraries; if used outside of iceoryx, include paths and link targets must be adjusted -- build iceoryx_utils, iceoryx_posh and iceoryx_binding_c as shared libraries in colcon - -## [v0.99.6](https://github.com/eclipse-iceoryx/iceoryx/tree/v0.99.6) (2021-04-08) - -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/v0.99.5...v0.99.6) - -- Add git to dependency list in iceoryx_posh for RHEL - -## [v0.99.5](https://github.com/eclipse-iceoryx/iceoryx/tree/v0.99.5) (2021-04-08) - -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/v0.99.4...v0.99.5) - -- Add libatomic to dependency list in iceoryx_utils for RHEL - -## [v0.99.4](https://github.com/eclipse-iceoryx/iceoryx/tree/v0.99.4) (2021-04-06) - -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/v0.99.3...v0.99.4) - -- Increase version number to trigger build again on ROS buildfarm - -## [v0.99.3](https://github.com/eclipse-iceoryx/iceoryx/tree/v0.99.3) (2021-04-06) - -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/v0.99.2...v0.99.3) - -- Increase version number to trigger build again on ROS buildfarm - -## [v0.99.2](https://github.com/eclipse-iceoryx/iceoryx/tree/v0.99.2) (2021-04-03) - -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/v0.99.0...v0.99.2) - -- Prepare package release for iceoryx 1.0 [\#670](https://github.com/eclipse-iceoryx/iceoryx/issues/670) - -## [v0.99.0](https://github.com/eclipse-iceoryx/iceoryx/tree/v0.99.0) (2021-04-01) - -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/v0.90.0...v0.99.0) - -Intermediate Milestone before the final 1.0.0 release, see v.1.0.0 above for the changes. - -## [v0.90.0](https://github.com/eclipse-iceoryx/iceoryx/tree/v0.90.0) (2020-12-22) - -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/v0.17.0...v0.90.0) - -Pre-Release for new and stable APIs and n:m pub/sub communication - -This is a pre-release for our first long-term-support release that is coming soon (will be iceoryx_1.0.0). - -We had a major refactoring of the iceoryx communication infrastructure which allows to do n:m communication now and provides a flexible history functionality for late joining subscribers. - -This new infrastructure is also made to support request/response communication as a next step [(\#27)](https://github.com/eclipse-iceoryx/iceoryx/issues/27). The C++ API has been completely reworked and a new C API has been added. - -We will give the API draft some weeks for finalizing the features and to incorporate feedback from the community. There's an issue in which we collect and discuss the final modifications [(\#408)](https://github.com/eclipse-iceoryx/iceoryx/issues/408). - -**Features:** - -- Complete refactoring of publishers and subscribers from shared memory data structures to user APIs, [\#252](https://github.com/eclipse-iceoryx/iceoryx/issues/252) -- First versions of new APIs for C++ and C [\#252](https://github.com/eclipse-iceoryx/iceoryx/issues/252) -- n:m publish/subscribe communication now possible [\#25](https://github.com/eclipse-iceoryx/iceoryx/issues/25) -- First version of a DDS gateway. Cyclone DDS already integrated, FastDDS on it's way [\#64](https://github.com/eclipse-iceoryx/iceoryx/issues/64), [\#65](https://github.com/eclipse-iceoryx/iceoryx/issues/65) -- New github actions for Mac OS and colcon build [\#175](https://github.com/eclipse-iceoryx/iceoryx/issues/175), [\#276](https://github.com/eclipse-iceoryx/iceoryx/issues/276), [\#328](https://github.com/eclipse-iceoryx/iceoryx/issues/328) -- Adjustable capacity for the lockfree queue [\#216](https://github.com/eclipse-iceoryx/iceoryx/issues/216) -- Check the files have a copyright header [\#346](https://github.com/eclipse-iceoryx/iceoryx/issues/346) - -**Refactoring:** - -- Refactoring of waitset [\#341](https://github.com/eclipse-iceoryx/iceoryx/issues/341) -- create multi publisher example [\#394](https://github.com/eclipse-iceoryx/iceoryx/issues/394) -- Full IceOryx Public API Cheat Sheet [\#283](https://github.com/eclipse-iceoryx/iceoryx/issues/283) -- Rework build and test steps in iceoryx [\#433](https://github.com/eclipse-iceoryx/iceoryx/issues/433) -- Extend iceperf example to C API [\#453](https://github.com/eclipse-iceoryx/iceoryx/issues/453) -- Remove default parameter from PoshRuntime::getInstance() [\#382](https://github.com/eclipse-iceoryx/iceoryx/issues/382) -- Enable Sanitizer in Debug Build and Unit Tests [\#141](https://github.com/eclipse-iceoryx/iceoryx/issues/141) -- Minor RouDi cleanups [\#91](https://github.com/eclipse-iceoryx/iceoryx/issues/91) -- C++14 [\#220](https://github.com/eclipse-iceoryx/iceoryx/issues/220) -- Replace occurence of std::list by cxx::list [\#221](https://github.com/eclipse-iceoryx/iceoryx/issues/221) - -**Fixed bugs:** - -- SegFault in iox-roudi on startup [\#447](https://github.com/eclipse-iceoryx/iceoryx/issues/447) -- Mocks can cause segfaults/undefined behavior [\#427](https://github.com/eclipse-iceoryx/iceoryx/issues/427) -- Chunks are lost forever when having an overflow in a variant queue of type FIFO [\#456](https://github.com/eclipse-iceoryx/iceoryx/issues/456) -- RouDi does not free shared memory properly on x86 Linux [\#324](https://github.com/eclipse-iceoryx/iceoryx/issues/324) -- WaitSet behavior wrong in `waitAndReturnFulfilledConditions` [\#388](https://github.com/eclipse-iceoryx/iceoryx/issues/388) -- Incorrect usage of strncpy [\#374](https://github.com/eclipse-iceoryx/iceoryx/issues/374) -- Global Instantiation of Publisher/Subscriber created core dump [\#327](https://github.com/eclipse-iceoryx/iceoryx/issues/327) - -## [v0.17.0](https://github.com/eclipse-iceoryx/iceoryx/tree/ICEORYX_0.17.0) (2020-08-27) - -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/ICEORYX_0.17.0_RC6...v0.17.0)\ -MacOS support and preparations for new API - -**Packages:** - -- iceoryx_posh (Quality level 4) -- iceoryx_utils (Quality level 4) -- iceoryx_examples (Quality level 5) - -**Features:** - -- MacOS support [\#32](https://github.com/eclipse-iceoryx/iceoryx/issues/32) -- Major RouDi refactorings [\#70](https://github.com/eclipse-iceoryx/iceoryx/issues/70), [\#59](https://github.com/eclipse-iceoryx/iceoryx/issues/59), [\#78](https://github.com/eclipse-iceoryx/iceoryx/issues/78) -- Preparations for new iceoryx API [\#25](https://github.com/eclipse-iceoryx/iceoryx/issues/25) -- iceoryx to cyclonedds gateway [\#64](https://github.com/eclipse-iceoryx/iceoryx/issues/64) -- Introduce cxx::function_ref [\#86](https://github.com/eclipse-iceoryx/iceoryx/issues/86) - -**Fixed bugs:** - -- POSIX timer improvements [\#120](https://github.com/eclipse-iceoryx/iceoryx/issues/120), [\#167](https://github.com/eclipse-iceoryx/iceoryx/issues/167) -- Memory Synchronisation Issue in FiFo [\#119](https://github.com/eclipse-iceoryx/iceoryx/issues/119) -- Roudi MessageQueue thread startup [\#171](https://github.com/eclipse-iceoryx/iceoryx/issues/171) -- Destructor fix MessageQueue and UnixDomainSocket [\#150](https://github.com/eclipse-iceoryx/iceoryx/issues/150) -- RouDi ressource clean-up [\#113](https://github.com/eclipse-iceoryx/iceoryx/issues/113) - -## [v0.17.0_RC6](https://github.com/eclipse-iceoryx/iceoryx/tree/ICEORYX_0.17.0_RC6) (2020-07-29) - -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/ICEORYX_0.17.0_RC5...ICEORYX_0.17.0_RC6)\ -Release Candidate for 0.17.0 release - -**Fixed bugs:** - -- Sporadic timing test failure [\#120](https://github.com/eclipse-iceoryx/iceoryx/issues/120) -- Improvement: Merge Mempool Introspection data into one sample [\#210](https://github.com/eclipse-iceoryx/iceoryx/issues/210) - -## [v0.17.0_RC5](https://github.com/eclipse-iceoryx/iceoryx/tree/ICEORYX_0.17.0_RC5) (2020-07-29) - -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/ICEORYX_0.17.0_RC4...ICEORYX_0.17.0_RC5)\ -Release Candidate for 0.17.0 release - -**Fixed bugs:** - -- Callable can outrun periodicity of POSIX timer [\#161](https://github.com/eclipse-iceoryx/iceoryx/issues/161) - -## [v0.17.0_RC4](https://github.com/eclipse-iceoryx/iceoryx/tree/ICEORYX_0.17.0_RC4) (2020-07-29) - -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/ICEORYX_0.17.0_RC3...ICEORYX_0.17.0_RC4)\ -Release Candidate for 0.17.0 release - -**Fixed bugs:** - -- The destroy method of MessageQueue and UnixDomainSocket does not fully invalidate the object [\#150](https://github.com/eclipse-iceoryx/iceoryx/issues/150) -- Roudi message queue thread startup [\#171](https://github.com/eclipse-iceoryx/iceoryx/issues/171) - -## [v0.17.0_RC3](https://github.com/eclipse-iceoryx/iceoryx/tree/ICEORYX_0.17.0_RC3) (2020-07-27) - -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/ICEORYX_0.17.0_RC2...ICEORYX_0.17.0_RC3)\ -Release Candidate for 0.17.0 release - -**Features:** - -- cmake options for deployment parameter [\#142](https://github.com/eclipse-iceoryx/iceoryx/issues/142) - -## [v0.17.0_RC2](https://github.com/eclipse-iceoryx/iceoryx/tree/ICEORYX_0.17.0_RC2) (2020-07-27) - -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/ICEORYX_0.17.0_RC1...ICEORYX_0.17.0_RC2)\ -Release Candidate for 0.17.0 release - -**Refactoring:** - -- Refactoring of logging [\#88](https://github.com/eclipse-iceoryx/iceoryx/issues/88) -- Remove const_cast wherever possible [\#76](https://github.com/eclipse-iceoryx/iceoryx/issues/76) -- Remove asynchronous service discovery feature [\#90](https://github.com/eclipse-iceoryx/iceoryx/issues/90) -- qacpp-4.5.0-2427 [\#93](https://github.com/eclipse-iceoryx/iceoryx/issues/93) -- Usage of github actions to build pull requests [\#89](https://github.com/eclipse-iceoryx/iceoryx/issues/89) -- Reduce default memory consumption with config and mempools [\#78](https://github.com/eclipse-iceoryx/iceoryx/issues/78) - -**Fixed bugs:** - -- Sporadic timing test failure [\#120](https://github.com/eclipse-iceoryx/iceoryx/issues/120) -- Make SOFI real size equal to the specified one [\#105](https://github.com/eclipse-iceoryx/iceoryx/issues/105) -- increase padding in introspection [\#117](https://github.com/eclipse-iceoryx/iceoryx/issues/117) -- Increase the process waiting for RouDi timeout to 60 seconds [\#110](https://github.com/eclipse-iceoryx/iceoryx/issues/110) - -## [v0.17.0_RC1](https://github.com/eclipse-iceoryx/iceoryx/tree/ICEORYX_0.17.0_RC1) (2020-03-24) - -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/v0.16.1...ICEORYX_0.17.0_RC1)\ -Release Candidate for 0.17.0 release - -**Features:** - -- Memory abstraction, modularization of RouDi and fixes [\#59](https://github.com/eclipse-iceoryx/iceoryx/issues/59) -- Memory abstraction and RouDi modularization step 2, fixed string improvements and other fixes [\#70](https://github.com/eclipse-iceoryx/iceoryx/issues/70) - -**Fixed bugs:** - -- Can't compile due to missing CPPTOML [\#67](https://github.com/eclipse-iceoryx/iceoryx/issues/67) - -## [v0.16.1](https://github.com/eclipse-iceoryx/iceoryx/tree/v0.16.1) (2020-03-02) - -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/v0.16.0...v0.16.1)\ -Support for rmw_iceoryx with ROS2 python API - -**Packages:** - -- POSH (POSIX Shared Memory) -- Utils -- Iceoryx examples - -**Features:** - -- Capability to cleanup shared memory resources during process lifetime [\#51](https://github.com/eclipse-iceoryx/iceoryx/issues/51) - -**Fixed bugs:** - -- compile error with clang [\#43](https://github.com/eclipse-iceoryx/iceoryx/issues/43) -- CMqInterface unit tests are failing caused by unneeded move operations [\#56](https://github.com/eclipse-iceoryx/iceoryx/issues/56) - -**Known limitations:** - -- ```RouDi --version``` shows 0.16.0.1 instead of 0.16.1 - -## [v0.16.0](https://github.com/eclipse-iceoryx/iceoryx/tree/v0.16.0) (2019-12-16) - -Introspection, performance test and flexible mapping of shared memory - -**Packages:** - -- POSH (POSIX Shared Memory) -- Utils -- Iceoryx examples - -**Features:** - -- Introspection client for live debugging of iceoryx [\#21](https://github.com/eclipse-iceoryx/iceoryx/issues/21) -- Flexible mapping of shared memory in virtual address spaces [\#19](https://github.com/eclipse-iceoryx/iceoryx/issues/19) -- Performance test to measure inter-process latency [\#17](https://github.com/eclipse-iceoryx/iceoryx/issues/17) -- Docker build [\#15](https://github.com/eclipse-iceoryx/iceoryx/issues/15) (Thanks to @Mr-Slippery ) - -**Fixed bugs:** - -- Payload size not updated by allocateChunk [\#10](https://github.com/eclipse-iceoryx/iceoryx/issues/10) -- Failure in runnable creation [\#23](https://github.com/eclipse-iceoryx/iceoryx/issues/23) - -Command for generating git log for merge commits between two tags - -```bash -**git log --merges --first-parent master --pretty=format:"%h %<(10,trunc)%aN %C(white)%<(15)%aD%Creset %C(red bold)%<(15)%D%Creset %s" ... > diff_merge_commit.log** -``` diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 83eff907b5..516bb84d54 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -53,7 +53,8 @@ Please make sure you have: 3. All branches have the following naming format: `iox-#[issue]-branch-name` e.g. `iox-#123-super-duper-feature` 4. All commits have the following naming format: `iox-#[issue] commit message` e.g. `iox-#123 implemented super-duper feature` 5. All commits have been signed with `git commit -s` -6. The CHANGELOG.md is updated with the GitHub issue that is closed by the Pull-Request (add to unreleased section) +6. The `iceoryx-unreleased.md` in `doc/website/release-notes` is updated with the GitHub issue + that is closed by the Pull-Request 7. You open your pull request towards the base branch `master` 8. Link the pull request to the according GitHub issue and set the label accordingly diff --git a/QUALITY_DECLARATION.md b/QUALITY_DECLARATION.md index 14dc227920..99aef06fcc 100644 --- a/QUALITY_DECLARATION.md +++ b/QUALITY_DECLARATION.md @@ -23,7 +23,7 @@ On Git, the tags have a `v` prefix before the version numbers. A [release script `iceoryx` is at a stable version, i.e. `>= 1.0.0`. The latest valid release can be found on the [release page](https://github.com/eclipse-iceoryx/iceoryx/releases) of iceoryx. -The change history can be found in the [CHANGELOG](https://github.com/eclipse-iceoryx/iceoryx/blob/master/CHANGELOG.md). +The change history can be found in the [release notes section](https://iceoryx.io/latest/release-notes). ### Public API Declaration [1.iii] diff --git a/doc/design/request_response_communication.md b/doc/design/request_response_communication.md index 64d6c61b55..05212db24f 100644 --- a/doc/design/request_response_communication.md +++ b/doc/design/request_response_communication.md @@ -40,26 +40,26 @@ In order to support asynchronous requests, a sequence ID should be part of each This is an overview of the untyped `Client` and `Server` classes. -![simple class diagram](diagrams/request_response/overview_class.svg) +![simple class diagram](overview_class.svg) The `Client` and `Server` are reusing the `ChunkSender` and `ChunkReceiver` building blocks. The `Client` uses a `ChunkSender` to send requests and a `ChunkReceiver` to get the responses while the `Server` uses a `ChunkReceiver` to get the requests and a `ChunkSender` to send the responses. #### Typed API -![typed API](diagrams/request_response/typed_api.svg) +![typed API](../website/images/typed_api.svg) Since the `Response` is tied to a specific `Request`, the `loan` method takes a `Request` to populate the `Response` with the correct settings. Alternatively, a `Request` could have a `createResponse` method which returns a `Response` with the correct settings. #### Untyped API -![untyped API](diagrams/request_response/untyped_api.svg) +![untyped API](../website/images/untyped_api.svg) Similar to the the typed API, `loan` takes a pointer to a `RequestHeader` to populate the `ResponseHeader` with the correct settings. #### Client Port -![client port](diagrams/request_response/client_port.svg) +![client port](../website/images/client_port.svg) The `ClientPortData` is located in the shared memory and contain only the data but no methods to access them. `ClientPortUser` is the class providing the methods for the user access and `ClientPortRouDi` provides the @@ -67,7 +67,7 @@ interface RouDi needs to connect the client to the server and to cleanup the por #### Server Port -![server port](diagrams/request_response/server_port.svg) +![server port](../website/images/server_port.svg) Similar to the Client Port, the Server Port has `ServerPortData` which is located in the shared memory and contain only the data but no methods to access them. `ServerPortUser` is the class providing the methods for the user access and `ServerPortRouDi` provides the @@ -77,7 +77,7 @@ It must be ensured that only one server with a given `ServiceDescription` can ru #### Request/Response Header -![rpc header](diagrams/request_response/request_response_header.svg) +![rpc header](../website/images/request_response_header.svg) Since request and response need to encode different meta-information, we also need different header for the messages. The common data is aggregated in `RpcBaseHeader` which contains a `cxx::UniqueId` to the `ClientChunkQueueData_t` and a sequence ID. @@ -101,7 +101,7 @@ The `RequestHeader` has also the option to specify a message as fire and forget, #### Client/Server Options -![client and server options](diagrams/request_response/client_and_server_options.svg) +![client and server options](../website/images/client_and_server_options.svg) The client and server options can be used to control certain aspects of the clients and servers. Beside setting the capacity of the queues and defining whether a client should be connected and a server offering on creation, @@ -114,14 +114,14 @@ If the options don't match, the client will not be connected to the server, simi The client is guided by the following state machine. -![client state machine](diagrams/request_response/client_state_machine.svg) +![client state machine](../website/images/client_state_machine.svg) Similar to the subscriber state machine, the client passes it's response queue with the `CONNECT` CaPro message to the server. The server will pass its request queue with the `ACK` CaPro message to the client. Following is a sequence diagram which shows all this cases -![client and server service discovery](diagrams/request_response/client_and_server_service_discovery.svg) +![client and server service discovery](../website/images/client_and_server_service_discovery.svg) ### Code example diff --git a/doc/design/service-discovery.md b/doc/design/service-discovery.md index 64e67e4df1..9dbc761a15 100644 --- a/doc/design/service-discovery.md +++ b/doc/design/service-discovery.md @@ -128,9 +128,9 @@ Contra: * Built-in topic approach based on `InterfacePort`'s * Sniff and intercept `CaproMessage` -![overview diagram](diagrams/service-discovery/overview-alternative-b.svg) +![overview diagram](../website/images/overview-alternative-b.svg) -![sequence diagram](diagrams/service-discovery/sequence-diagram-alternative-b.svg) +![sequence diagram](../website/images/sequence-diagram-alternative-b.svg) Pro: @@ -172,9 +172,9 @@ Create a new publisher in RouDi which sends a `ServiceRegistryTopic`. This publi change in the service registry and to transmit the service discovery registry. The complete old service registry (saved locally) would be compared to the new service registry in a new class, extending the public user API. -![overview diagram](diagrams/service-discovery/overview-alternative-d.svg) +![overview diagram](../website/images/overview-alternative-d.svg) -![sequence diagram](diagrams/service-discovery/sequence-diagram-alternative-d.svg) +![sequence diagram](../website/images/sequence-diagram-alternative-d.svg) Pro: @@ -416,5 +416,5 @@ PoshRuntime::findService(const capro::ServiceDescription& serviceDescription) no * [x] How does the SOME/IP-SD service discovery API look like? * [x] What does a `ros topic list` do in rmw_iceoryx? * [ ] Filter for `ServiceDescription::EventString` needed by AUTOSAR? Not supported by `ServiceRegistry::find()` as of today -* [ ] Decision on mapping table between iceory and DDS (see [overview.md](../website/getting-started/overview.md)) +* [ ] Decision on mapping table between iceory and DDS (see [Overview](../website/getting-started/overview.md)) * [ ] Current mapping table between iceoryx and DDS does not work with service discovery diff --git a/doc/website/.pages b/doc/website/.pages index c555be266a..a1f9abefb5 100644 --- a/doc/website/.pages +++ b/doc/website/.pages @@ -1,6 +1,10 @@ nav: - index.md - getting-started - - API-reference + - concepts + - examples + - design - FAQ.md - advanced + - release-notes + - API-reference diff --git a/doc/website/concepts/architecture.md b/doc/website/concepts/architecture.md new file mode 100644 index 0000000000..c79bec1ac6 --- /dev/null +++ b/doc/website/concepts/architecture.md @@ -0,0 +1 @@ +# Architecture diff --git a/doc/website/advanced/how-optional-and-error-values-are-returned-in-iceoryx.md b/doc/website/concepts/how-optional-and-error-values-are-returned-in-iceoryx.md similarity index 100% rename from doc/website/advanced/how-optional-and-error-values-are-returned-in-iceoryx.md rename to doc/website/concepts/how-optional-and-error-values-are-returned-in-iceoryx.md diff --git a/doc/website/design/design_article.md b/doc/website/design/design_article.md new file mode 100644 index 0000000000..3fd318539d --- /dev/null +++ b/doc/website/design/design_article.md @@ -0,0 +1,3 @@ +# Design article + + diff --git a/doc/website/getting-started/examples/.pages b/doc/website/examples/.pages similarity index 94% rename from doc/website/getting-started/examples/.pages rename to doc/website/examples/.pages index 5bfa60c135..b222d1410a 100644 --- a/doc/website/getting-started/examples/.pages +++ b/doc/website/examples/.pages @@ -3,6 +3,7 @@ nav: - icehello.md - icedelivery.md - icedelivery_in_c.md + - icedocker.md - iceoptions.md - callbacks.md - callbacks_in_c.md diff --git a/doc/website/getting-started/examples/callbacks.md b/doc/website/examples/callbacks.md similarity index 100% rename from doc/website/getting-started/examples/callbacks.md rename to doc/website/examples/callbacks.md diff --git a/doc/website/getting-started/examples/callbacks_in_c.md b/doc/website/examples/callbacks_in_c.md similarity index 100% rename from doc/website/getting-started/examples/callbacks_in_c.md rename to doc/website/examples/callbacks_in_c.md diff --git a/doc/website/getting-started/examples/complexdata.md b/doc/website/examples/complexdata.md similarity index 58% rename from doc/website/getting-started/examples/complexdata.md rename to doc/website/examples/complexdata.md index 1399e94302..455bdce629 100644 --- a/doc/website/getting-started/examples/complexdata.md +++ b/doc/website/examples/complexdata.md @@ -2,5 +2,4 @@ title: Sending/receiving some of the iceoryx STL container surrogates --- -{! ./../iceoryx_examples/complexdata/README.md !} - +{! ../iceoryx/iceoryx_examples/complexdata/README.md !} diff --git a/doc/website/getting-started/examples/ice_access_control.md b/doc/website/examples/ice_access_control.md similarity index 100% rename from doc/website/getting-started/examples/ice_access_control.md rename to doc/website/examples/ice_access_control.md diff --git a/doc/website/getting-started/examples/icecrystal.md b/doc/website/examples/icecrystal.md similarity index 100% rename from doc/website/getting-started/examples/icecrystal.md rename to doc/website/examples/icecrystal.md diff --git a/doc/website/getting-started/examples/icedelivery.md b/doc/website/examples/icedelivery.md similarity index 100% rename from doc/website/getting-started/examples/icedelivery.md rename to doc/website/examples/icedelivery.md diff --git a/doc/website/getting-started/examples/icedelivery_in_c.md b/doc/website/examples/icedelivery_in_c.md similarity index 100% rename from doc/website/getting-started/examples/icedelivery_in_c.md rename to doc/website/examples/icedelivery_in_c.md diff --git a/doc/website/getting-started/examples/icedocker.md b/doc/website/examples/icedocker.md similarity index 100% rename from doc/website/getting-started/examples/icedocker.md rename to doc/website/examples/icedocker.md diff --git a/doc/website/getting-started/examples/iceensemble.md b/doc/website/examples/iceensemble.md similarity index 100% rename from doc/website/getting-started/examples/iceensemble.md rename to doc/website/examples/iceensemble.md diff --git a/doc/website/getting-started/examples/icehello.md b/doc/website/examples/icehello.md similarity index 100% rename from doc/website/getting-started/examples/icehello.md rename to doc/website/examples/icehello.md diff --git a/doc/website/getting-started/examples/iceoptions.md b/doc/website/examples/iceoptions.md similarity index 100% rename from doc/website/getting-started/examples/iceoptions.md rename to doc/website/examples/iceoptions.md diff --git a/doc/website/getting-started/examples/iceperf.md b/doc/website/examples/iceperf.md similarity index 100% rename from doc/website/getting-started/examples/iceperf.md rename to doc/website/examples/iceperf.md diff --git a/doc/website/getting-started/examples/index.md b/doc/website/examples/index.md similarity index 68% rename from doc/website/getting-started/examples/index.md rename to doc/website/examples/index.md index 7c077be205..f295b64714 100644 --- a/doc/website/getting-started/examples/index.md +++ b/doc/website/examples/index.md @@ -1,5 +1,5 @@ --- -title: List of examples +title: Examples --- {! ../iceoryx/iceoryx_examples/README.md !} diff --git a/doc/website/getting-started/examples/singleprocess.md b/doc/website/examples/singleprocess.md similarity index 100% rename from doc/website/getting-started/examples/singleprocess.md rename to doc/website/examples/singleprocess.md diff --git a/doc/website/getting-started/examples/user_header.md b/doc/website/examples/user_header.md similarity index 60% rename from doc/website/getting-started/examples/user_header.md rename to doc/website/examples/user_header.md index 8245d2ce1c..0246ee19fb 100644 --- a/doc/website/getting-started/examples/user_header.md +++ b/doc/website/examples/user_header.md @@ -2,4 +2,4 @@ title: Using a user-header for additional meta-information like timestamps --- -{! ../iceoryx_examples/user_header/README.md !} +{! ../iceoryx/iceoryx_examples/user_header/README.md !} diff --git a/doc/website/getting-started/examples/waitset.md b/doc/website/examples/waitset.md similarity index 100% rename from doc/website/getting-started/examples/waitset.md rename to doc/website/examples/waitset.md diff --git a/doc/website/getting-started/examples/waitset_in_c.md b/doc/website/examples/waitset_in_c.md similarity index 100% rename from doc/website/getting-started/examples/waitset_in_c.md rename to doc/website/examples/waitset_in_c.md diff --git a/doc/website/getting-started/.pages b/doc/website/getting-started/.pages index 6c26ce6be8..76d6ad9dd9 100644 --- a/doc/website/getting-started/.pages +++ b/doc/website/getting-started/.pages @@ -2,4 +2,3 @@ nav: - what-is-iceoryx.md - overview.md - installation.md - - examples diff --git a/doc/website/getting-started/overview.md b/doc/website/getting-started/overview.md index 7c10c0b33c..72d9195759 100644 --- a/doc/website/getting-started/overview.md +++ b/doc/website/getting-started/overview.md @@ -57,7 +57,7 @@ and exhaust memory. We have to handle this potential error since the expected cl attached. This means we get a warning (or an error when build in strict mode) when we don't handle it. We could also explicitly discard it with `IOX_DISCARD_RESULT` which is discouraged. If you want to know more about `expected`, take a look at -[How optional and error values are returned in iceoryx](../advanced/how-optional-and-error-values-are-returned-in-iceoryx.md). +[How optional and error values are returned in iceoryx](how-optional-and-error-values-are-returned-in-iceoryx.md). Let's create a corresponding subscriber. @@ -66,8 +66,8 @@ iox::popo::Subscriber subscriber({"Group", "Instance", "CounterTop ``` Now we can use the subscriber to receive data. For simplicity, we assume that we periodically check for new data. It -is also possible to explicitly wait for data using the [WaitSet](../examples/waitset/) or the -[Listener](../examples/callbacks/). The code to receive the data is the same, the only difference is the way we wake +is also possible to explicitly wait for data using the [WaitSet](waitset.md) or the +[Listener](callbacks.md). The code to receive the data is the same, the only difference is the way we wake up before checking for data. ```cpp @@ -117,7 +117,9 @@ Afterwards, we can start the applications which immediately connect to the RouDi When the application terminates, the runtime cleans up all resources needed for communication with RouDi. This includes all memory chunks used for the data transmission which may still be held by the application. - +Before going into the details in the next section, the following animations depicts the course of events. + +![Overview](https://user-images.githubusercontent.com/8661268/74612998-b962bc80-510a-11ea-97f0-62f41c5d287b.gif) We now briefly define the main entities of an iceoryx system which were partially already used in the example above. @@ -256,7 +258,7 @@ picture below. This is sufficient for simple use cases but inefficient in genera latency and wake-ups without data. An alternative approach to receive data is to wait for user-defined events to occur. This is provided by our `WaitSet` and `Listener` which are introduced in the following sections. -![Polling alternatives](../images/avoid-polling.svg) +![Polling alternatives](avoid-polling.svg) ### WaitSet @@ -298,12 +300,12 @@ For more information about the Listener see our ## API The API is offered in two languages, C++ and C. Detailed information can be found in the -[C++ example](../examples/icedelivery/) and -[C example](../examples/icedelivery_in_c/). +[C++ example](icedelivery.md) and +[C example](icedelivery_in_c.md). Many parts of the C++ API follow a functional programming approach which is less error-prone. This requires using the monadic types `cxx::expected` and `cxx::optional` which are introduced -[here](../advanced/how-optional-and-error-values-are-returned-in-iceoryx.md). +[here](how-optional-and-error-values-are-returned-in-iceoryx.md). With the C++ API, we distinguish between the `typed API` and the `untyped API`. In the typed API, the underlying data type is made apparent by typed pointers or references to some data type T (often a template parameter). This allows diff --git a/doc/website/getting-started/what-is-iceoryx.md b/doc/website/getting-started/what-is-iceoryx.md index 3d79aca642..bf87d97a7b 100644 --- a/doc/website/getting-started/what-is-iceoryx.md +++ b/doc/website/getting-started/what-is-iceoryx.md @@ -11,7 +11,6 @@ consumers of messages. On its own, this is not a new innovation as the approach However, iceoryx takes the approach further, ending up in an inter-process-communication technology with a publish/subscribe architecture that is fast, flexible and dependable. - ## Fast With the iceoryx API, a publisher can write the message directly into a chunk of memory that was previously requested @@ -21,11 +20,11 @@ zero-copy — an end-to-end approach from publishers to subscribers without crea Avoiding the copies on API level is crucial when GBytes of sensor data have to be processed per second on robotics and autonomous driving systems. Therefore the iceoryx team contributed to the standardization of true zero-copy capable -APIs in [ROS 2](https://www.ros.org/) and [AUTOSAR Adaptive](https://www.autosar.org/standards/adaptive-platform/). - +APIs in [ROS 2](https://www.ros.org/) and [AUTOSAR Adaptive](https://www.autosar.org/standards/adaptive-platform/). + On modern processors iceoryx has a latency of less than 1 µs for transferring a message. And the best message is that this latency is constant as size doesn't matter. Want to give it a try? Then have a look at our -[iceperf example](../examples/iceperf) after having made the first steps. +[iceperf example](iceperf.md) after having made the first steps. ## Flexible @@ -36,13 +35,13 @@ integrating iceoryx as shared memory backbone into a bigger framework. The APIs support polling access and event-driven interactions with the [Waitset](../overview/#waitset) and [Listener](../overview/#listener). Applications can be started and stopped flexibly as there is a service discovery -behind the scenes that dynamically connects matching communication entities. +behind the scenes that dynamically connects matching communication entities. That iceoryx has the right set of features can be seen from the already existing integrations in middleware and frameworks such as [Eclipse Cyclone DDS](https://github.com/eclipse-cyclonedds/cyclonedds), [eCAL from Continental](https://continental.github.io/ecal/), [RTA-VRTE from ETAS](https://www.etas.com/en/products/rta-vrte.php) and - [Apex.OS from Apex.AI](https://www.apex.ai/apex-os). + [Apex.Middleware from Apex.AI](https://www.apex.ai/apex-middleware). ## Dependable @@ -52,13 +51,13 @@ design and implementation of features. The usage of heap, exceptions and any und to increase the predictability. Instead a custom memory allocation is being used, based on static memory pools. Additionally, the handling of return values and error cases was inspired by upcoming C++ features and other languages like Rust (details can be found -[here](../../advanced/how-optional-and-error-values-are-returned-in-iceoryx/)). +[here](how-optional-and-error-values-are-returned-in-iceoryx.md)). As different processes are operating on shared data structures, avoiding deadlocks is becoming all the more important. iceoryx uses lock-free data structures like the multi-producer multi-consumer (MPMC) queue that was written portably -thanks to modern C++. +thanks to modern C++. The tools available for automotive-compliant software development are always one or two releases behind the latest C++ standard. This fact, combined with our already mentioned constraints, led to a bunch of STL like C++ classes that have the goal to combine modern C++ with the reliability needed for the domains iceoryx is used in. They can be found in -the iceoryx hoofs which are introduced [here](../../advanced/iceoryx_hoofs/) +the iceoryx hoofs which are introduced [here](iceoryx_hoofs.md). diff --git a/doc/design/diagrams/request_response/client_and_server_options.svg b/doc/website/images/client_and_server_options.svg similarity index 100% rename from doc/design/diagrams/request_response/client_and_server_options.svg rename to doc/website/images/client_and_server_options.svg diff --git a/doc/design/diagrams/request_response/client_and_server_service_discovery.svg b/doc/website/images/client_and_server_service_discovery.svg similarity index 100% rename from doc/design/diagrams/request_response/client_and_server_service_discovery.svg rename to doc/website/images/client_and_server_service_discovery.svg diff --git a/doc/design/diagrams/request_response/client_port.svg b/doc/website/images/client_port.svg similarity index 100% rename from doc/design/diagrams/request_response/client_port.svg rename to doc/website/images/client_port.svg diff --git a/doc/design/diagrams/request_response/client_state_machine.svg b/doc/website/images/client_state_machine.svg similarity index 100% rename from doc/design/diagrams/request_response/client_state_machine.svg rename to doc/website/images/client_state_machine.svg diff --git a/doc/website/images/favicon.ico b/doc/website/images/favicon.ico new file mode 100644 index 0000000000..6c7d7e8636 Binary files /dev/null and b/doc/website/images/favicon.ico differ diff --git a/doc/design/diagrams/iceoryx_components_diagram_nextgen_release.svg b/doc/website/images/iceoryx_components_diagram_nextgen_release.svg similarity index 100% rename from doc/design/diagrams/iceoryx_components_diagram_nextgen_release.svg rename to doc/website/images/iceoryx_components_diagram_nextgen_release.svg diff --git a/doc/design/diagrams/service-discovery/overview-alternative-b.svg b/doc/website/images/overview-alternative-b.svg similarity index 100% rename from doc/design/diagrams/service-discovery/overview-alternative-b.svg rename to doc/website/images/overview-alternative-b.svg diff --git a/doc/design/diagrams/service-discovery/overview-alternative-d.svg b/doc/website/images/overview-alternative-d.svg similarity index 100% rename from doc/design/diagrams/service-discovery/overview-alternative-d.svg rename to doc/website/images/overview-alternative-d.svg diff --git a/doc/design/diagrams/request_response/overview_class.svg b/doc/website/images/overview_class.svg similarity index 100% rename from doc/design/diagrams/request_response/overview_class.svg rename to doc/website/images/overview_class.svg diff --git a/doc/design/diagrams/puml_github_workflow.svg b/doc/website/images/puml_github_workflow.svg similarity index 100% rename from doc/design/diagrams/puml_github_workflow.svg rename to doc/website/images/puml_github_workflow.svg diff --git a/doc/design/diagrams/request_response/request_response_header.svg b/doc/website/images/request_response_header.svg similarity index 100% rename from doc/design/diagrams/request_response/request_response_header.svg rename to doc/website/images/request_response_header.svg diff --git a/doc/design/diagrams/service-discovery/sequence-diagram-alternative-b.svg b/doc/website/images/sequence-diagram-alternative-b.svg similarity index 100% rename from doc/design/diagrams/service-discovery/sequence-diagram-alternative-b.svg rename to doc/website/images/sequence-diagram-alternative-b.svg diff --git a/doc/design/diagrams/service-discovery/sequence-diagram-alternative-d.svg b/doc/website/images/sequence-diagram-alternative-d.svg similarity index 100% rename from doc/design/diagrams/service-discovery/sequence-diagram-alternative-d.svg rename to doc/website/images/sequence-diagram-alternative-d.svg diff --git a/doc/design/diagrams/request_response/server_port.svg b/doc/website/images/server_port.svg similarity index 100% rename from doc/design/diagrams/request_response/server_port.svg rename to doc/website/images/server_port.svg diff --git a/doc/design/diagrams/request_response/typed_api.svg b/doc/website/images/typed_api.svg similarity index 100% rename from doc/design/diagrams/request_response/typed_api.svg rename to doc/website/images/typed_api.svg diff --git a/doc/design/diagrams/request_response/untyped_api.svg b/doc/website/images/untyped_api.svg similarity index 100% rename from doc/design/diagrams/request_response/untyped_api.svg rename to doc/website/images/untyped_api.svg diff --git a/doc/website/overrides/partials/footer.html b/doc/website/overrides/partials/footer.html index bb45cf87ed..df5ad7c67d 100644 --- a/doc/website/overrides/partials/footer.html +++ b/doc/website/overrides/partials/footer.html @@ -38,7 +38,7 @@ {% endif %}