RTI Connext DDS Micro
Version 2.4.6
|
This version of RTI Connext DDS Micro includes a number of API changes to improve compatability with RTI Connext DDS Core and make the API more robust to input argument errors such as string length violations. Please note that some of the changes are incompatible with earlier version of RTI Connext DDS Micro.
The internal representation of state information has been refactored, significantly reducing run-time memory usage.
Please refer to the Configuring Resource Limits guide for details.
The FooTypeSupport code generated for a user-defined Foo data type now includes three additional operations:
These operations are available to users of both the C and C++ APIs.
The missing parts of RTI Connext Micro's public C API have now been added to the public C++ API, so that C++ users don't have to rely on C operations to implement their applications.
C++ developers are also not required to include any C header file anymore, but they must instead rely on newly available C++ header files.
Please refer to DDS C++ API for a list of APIs.
All callbacks exposed by the DDS listeners of the C++ API (DDSDataReaderListener, DDSDataWriterListener, DDSTopicListener, and other derived classes) now accept the status data passed in by the middleware as a C++ reference, rather than a pointer.
The variable TheParticipantFactory is now available to users of the C++ API to reference the singleton instance of DDSDomainParticipantFactory.
All the status types (e.g. DDS_SubscriptionMatchedStatus) have been exposed to C++ users as part of the DDS:: namespace (e.g. DDS::SubscriptionMatchedStatus).
The pointer specifying the source sample passed to the generated operation Foo::copy_data() (C++ API) is now of "const" type.
C++ developers can now refer to data type DDS_ConditionSeq as DDS::ConditionSeq.
In order to be interoperable with the Real-Time Publish-Subscribe Wire Protocol DDS Interoperability Wire Protocol (DDSI-RTPS), version 2.2, the first 2-bytes of every GUID are now automatically assigned to the OMG-specified Vendor ID.
Previous releases on POSIX platforms created threads with no names. In this release, if thread naming is supported, a POSIX thread created with the RTI Connext DDS Micro OSAPI_Thread_new() function will have its thread name set.
[RTI Issue ID MICRO-638]
The README.txt file for Android did not clarify that is it necessary to install the NDK tool-chain as a standalone toolchain. This has been fixed.
[RTI Issue ID MICRO-807]
In previous releases of RTI Connext DDS Micro, the CPP/HelloWorld_dpde example overwrote the RTIMEHOME environment variable, making it impossible for developers to point it to any custom value.
This error was fixed and the example can now be compiled with any valid value of RTIMEHOME.
[RTI Issue ID MICRO-834]
Previously, if a multicast address was specified as a discovery or user_traffic address, it was not correctly ignored by transports that did not support multicast. Consequently, an application may have failed to create a DomainParticipant. This has been fixed in this release.
[RTI Issue ID MICRO-1153]
When a discovery message was received with a non-standard locator, such as for an unsupported transport, rather than just ignore the locator, the entire discovery message was discarded. This incorrect behavior prevented discovery of the entity that sent the discovery message. This issue has been fixed in this release.
[RTI Issue ID MICRO-1270]
In RTI Connext DDS Micro, a newly matched reliable DataReader will send an initial ACKNACK submessage to the matching DataWriter in order to expedite reliable communication. The initial ACKNACK is zero-valued, and a DataWriter receiving it will not resend any samples but instead will send a HEARTBEAT that the DataReader will respond with a proper ACKNACK.
In the previous release, however, a DataWriter receiving this initial ACKNACK did not respond with a HEARTBEAT. Consequently, reliable resend of historical samples did not start as soon as it should have, and instead would start with the next HEARTBEAT sent by the DataWriter, either a periodic HEARTBEAT or a piggyback HEARTBEAT sent with newly written samples. This issue has been fixed in this release.
[RTI Issue ID MICRO-1443]
When a DataReader's read or take APIs are called, depending on the input parameters of the sample sequence and sample-info sequence, the DataReader may loan to the caller its memory containing sample and sample-info entries. A resource limit, DATA_READER_RESOURCE_LIMITS max_outstanding_reads, sets the maximum number of samples (and corresponding sample-info entries) that may be loaned.
In previous releases, when max_oustanding_reads was exceeded, the read/take APIs incorrectly returned DDS_RETCODE_NO_DATA instead of DDS_RETCODE_OUT_OF_RESOURCES. This bug has been fixed in this release.
[RTI Issue ID MICRO-1460]
Previously, given a DataReader with RESOURCE_LIMITS max_samples_per_instance equal to HISTORY depth, when the DataReader exceeded its depth (or max_samples_per_instance), it incorrectly did not replace the oldest historical sample with the newest sample. Instead, the oldest historical sample was kept in the queue, and subsequent calls to read() could return it. Note, calls to take() would remove all taken sample from the queue.
This issue has been fixed in this release.
[RTI Issue ID MICRO-1463]
When EXCLUSIVE_OWNERSHIP was used, a disposed instance could incorrectly be updated by a DataWriter with a lower strength than the DataWriter that disposed the instance, even if that DataWriter had not unregistered the instance. This has been corrected: when an instance is disposed, a lower strength DataWriter is not allowed to update the instance as long as the DataWriter that disposed the instance is still registered as an updater for the instance. Only when the DataWriter unregisters from the instance can a lower strength DataWriter update the instance again.
[RTI Issue ID MICRO-1464]
The previous version of rtiddsgen shipped with RTI Connext DDS Micro contained a bug which prevented the numerical constants assigned to an enum's values to be correctly handled in the generated code.
This error has been fixed and IDL enum types are now correctly translated into C/C++ data types with the correct constants.
[RTI Issue ID MICRO-1483]
RTI Connext DDS Micro relied on gethostbyname() to resolve hostnames. However, if a name resolver was not available it was possible to specify illegal names.
This has been corrected and only legal names, as defined by RFC-952 and RFC-1123, are resolved.
[RTI Issue ID MICRO-1489]
The DDS sequence APIs for the built-in DDS types, such as DDS_LongSeq etc, were missing. The workaround was to use CDR_<Foo>Seq instead.
This issue has been corrected in this release, with the missing sequence APIs now included.
[RTI Issue ID MICRO-1493]
In the previous release, given a DataReader receiving samples from a DataWriter, after the DataWriter had written approximately (2^32) - max_samples_per_remote_writer number of samples, no more samples from that DataWriter would be received by the DataReader. Instead, every subsequent sample from the DataWriter would be rejected. This was caused by an incorrect update of an internal counter of the DataReader.
[RTI Issue ID MICRO-1500]
It was not possible to change the priority of POSIX threads created in previous releases of RTI Connext DDS Micro. Instead, a POSIX thread inherited the priority of its parent. This has been fixed in this release.
[RTI Issue ID MICRO-1502]
Previously, RTPS DATA submessages with the K-flag set (indicating a serialized key payload) were not processed and instead dropped by a DataReader. This has been fixed and such DATA submessages are now processed and accepted.
[RTI Issue ID MICRO-1511]
RTI Connext DDS Micro 2.4.5 is the baseline for the DO-178C Level A certifiable version of RTI Connext DDS Micro. Please note that while RTI Connext DDS Micro features a subset of RTI Connext DDS Micro the documentation is shared between the two products. In particular, note that APIs supported by RTI Connext DDS Micro is clearly marked.
A Certification Package for RTI Connext DDS Micro 2.4.5 is only available on the following platform:
For other platforms, please contant RTI Support (suppo) rt@r ti.co m
The OS API functions OSAPI_System_generate_uuid and OSAPI_Timer_update_timeout have had their signatures changed. These must be taken into account when porting your platform to this version.
Generated code from rtiddsgen has been updated. Consequently, users using this version of RTI Connext DDS Micro must use the new rtiddsgen to regenerate files for existing types.
Samples written with a period between one and two deadline periods may have incorrectly not triggered the deadline missed status on the DataWriter and/or DataReader.
[RTI Issue ID MICRO-1426]
Failures within the functions DDS_DataWriter_register_instance and DDS_DataWriter_assert_liveliness may have resulted in a blocked application, where no further communication occurred. This problem has been fixed in this release.
[RTI Issue ID MICRO-1283, MICRO-1284]
In the previous release, it was not possible to get the instance handle for a topic. This has been fixed.
[RTI Issue ID MICRO-1215]
In the previous release, a reliable DataWriter may have responded to a reliable DataReader's negative acknowledgement by sending samples the DataReader already received. This resending of redundant samples has been fixed in this release.
[RTI Issue ID MICRO-1197]
Previously, Qos policies that are based on DDS_Duration, such as deadline and liveliness, had a limit of 24 days. This has been changed to a limit of 24855 days.
[RTI Issue ID MICRO-1176]
Generated code from rtiddsgen has been updated. Consequently, users using this version of RTI Connext DDS Micro must use the new rtiddsgen to regenerate files for existing types.
A DataReaderListener on_before_sample_commit callback function is provided in each HelloWorld example to show how to drop or accept a received sample. This release fixes a problem where the sample_info parameter was not provided for each example on_before_sample_commit callback. Previously, without the parameter, a received sample was incorrectly accepted when it should have been dropped.
[RTI Issue ID MICRO-1177]
Given a DataWriter or DataReader communicating with multiple remote endpoints, when there are two remote endpoints remaining and one of them is removed, communication with the last remaining endpoint will stop due to a bug that caused the last endpoint to be undiscovered.
[RTI Issue ID MICRO-1114]
The FooSeq.max and FooSeq.copy functions in C++ lead to a double free on sequence elements. This was most notable when using the read/take APIs and copying data. This has been fixed.
[RTI Issue ID MICRO-1133]
The max entity name is 255 bytes. However, the internal array used to reprint the entity name did not take into account the NUL termination, limiting the max entity name to 254 bytes.
[RTI Issue ID MICRO-1129]
When a discovered participant is disposed or its lease duration expires it is removed from a participant. However, not all resources where freed and if the remote_participant resource limit where exhausted and a new participant was created it would not be discovered. This has been fixed in this release.
[RTI Issue ID MICRO-1134]
An error in the resource handling of the read() function caused resources to no be reusable upon calling return_loan(). Thus new samples was rejected. This error has been corrected. The take() API is not affected by this API.
[RTI Issue ID MICRO-1089]
Previously, the default liveliness kind was DDS_MANUAL_BY_TOPIC_LIVELINESS_QOS. To comply with the DDS standard, in this release the default liveliness kind has been changed to DDS_AUTOMATIC_LIVELINESS_QOS.
[RTI Issue ID MICRO-1061]
RTI Connext DDS Micro has been verified for FACE conformance. See this user guide to learn how to build RTI Connext DDS Micro using the FACE conformance test tools.
A DomainParticipant can receive a discovery message from another DomainParticipant that is either reachable or unreachable from its initial peers list. Previously, these messages were always received. However, an application may want to restrict the list of discoverable DomainParticipants to ones reachable from its peers list.
To enable that capability, accept_unknown_peers has been added as a configurable boolean field of DDS_DiscoveryQosPolicy. When set DDS_BOOLEAN_FALSE, only DomainParticipants reachable from the peers list can be discovered, and when set DDS_BOOLEAN_TRUE, all DomainParticipants can be discovered.
[RTI Issue ID MICRO-971]
The rtiddsgen version shipped with this release of RTI Connext Micro introduces a new command line argument, "-micro", which enables users to explicitly target RTI Connext Micro when using the code generation tool.
Previously this was implicitly implied by the use of values "microC" or "microC++" for command line argument "-language". This prevented rtiddsgen to be able to produce an help output specific for RTI Connext Micro. This functionality is now available to users, who may use arguments "-micro - help" to visualize a list of all command line arguments supported by rtiddsgen when tar- geting RTI Connext Micro.
[RTI Issue ID MICRO-779]
The new version of rtiddsgen that is shipped with RTI Connext DDS Micro introduces new values for the "-language" command line argument, which should be adopted by users instead of the previously supported "microC" and "microC++".
In order to generated custom data-types support code that can be used with RTI Connext DDS Micro, user shall specify the following command line options.
[RTI Issue ID MICRO-79]
The provided CMake configuration for building RTI Connext DDS Micro from source code has been updated:
[RTI Issue ID MICRO-112, MICRO-770, MICRO-805]
This release officially introduces full support of DDS_WaitSet and DDS_Condition APIs also for C++ users of RTI Connext DDS Micro.
The following operations are officially supported:
[RTI Issue ID MICRO-685]
A new code example, HelloWorld_dpde_waitset, has been added to the set of examples shipped with RTI Connext DDS Micro.
This example is based on the preexisting HelloWorld_dpde example and it exemplifies the use of the recently introduced DDS_WaitSet and DDS_Condition APIs.
By leveraging a few pre-processor macros, the example also provides an equivalent implementation of its behavior using traditional listeners on DDS entities. Users may switch between one implementation and the other by modifying values of these macro and by recompiling the example's source code.
[RTI Issue ID MICRO-708]
Operations of the DDS API which grant users access to data structures describing the current internal information about a particular entity status have now been fully implemented and they are officially supported by RTI Connext Micro's C++ API.
The following methods have been introduced:
[RTI Issue ID MICRO-784]
Support for operations allowing the setting and retrieval of listener objects from DDS entities has been extended and it is now fully available to users of RTI Connext Micro's C++ API.
The following methods have been implemented and they are now fully supported as part of the C++ API:
The new version of rtiddsgen that is shipped with RTI Connext DDS Micro now generates two new additional operation which can be used by users to more easily register a data-type on a DDS_DomainParticipant. In particular, these operation allow the specification of an empty (null) type name at registration time. The default name associated with the type will be used in this case.
The new operations are generated only for top-level data-types which are the only ones usable for the creation of a DDS_Topic.
[RTI Issue ID MICRO-796]
DataReaderListener.on_before_sample_commit() now provides sample info of the sample being filtered in a new parameter, sample_info.
[RTI Issue ID MICRO-809]
The DDS_SampleLostStatus type has two new fields:
The kind (of type DDS_SampleLostStatusKind) indicates why a sample was lost. For samples lost for any reason other than DDS_SAMPLE_LOST_BY_DATAWRITER, sample_info gives additional information about the sample.
[RTI Issue ID MICRO-919]
The new version of rtiddsgen shipped with RTI Connext DDS Micro introduces official support for the "-namespace" command line argument when the tool is used for the genera- tion of C++ type support code. If the option is specified on the command line, IDL modules will be translated into C++ namespaces instead of being used as prefixes to the name of data-types defined within them.
[RTI Issue ID MICRO-153]
Previous version of rtiddsgen that were shipped with RTI Connext DDS Micro included, in the generated code for user-specified data-types, several support operations which were not required by data-types which cannot be used as top-level types for a DDS_Topic.
These redundant operation have now been removed from the generation outcome and they are only produced for top-level types.
[RTI Issue ID MICRO-678]
For VxWorks platforms, when initializing an application, RTI Connext DDS Micro set the real-time clock (i.e. clock_settime) to a predefined value. This could have interfered with user configured time, thus this release no longer sets the real-time clock.
[RTI Issue ID MICRO-692]
Support for IDL copy directives (such as "//@copy", "//@copy-c", ...) has been improved and the following copy directives are now fully supported in user-provided IDL files:
[RTI Issue ID MICRO-740]
The DDS_Duration_t datatype was not correctly encoded by RTI Connext DDS Micro when sent over the wire. Specifically, the nanoseconds field of Duration_t was not correctly encoded. This was not a problem between RTI Connext DDS Micro applications, but when inter-operating with RTI Connext DDS applications, the durations of Liveliness lease_duration and Deadline period were misinterpreted and resulted in incorrect timing. A workaround was to multiply the nanoseconds field of the RTI Connext Micro application's durations by 4 when communication with RTI Connext DDS.
[RTI Issue ID MICRO-768]
A problem existed on platforms using POSIX threads (e.g. Linux) where taking a semaphore with a timeout may have woken up prematurely. This could have resulted premature wake-up for Waitsets.
[RTI Issue ID MICRO-772]
A bug has been fixed in the code generation templates, used by rtiddsgen to produce support code used by the C++ API for user-defined custom data-types. This bug caused erroneous code to be generated for non top-level data-types in the resulting source files. This code prevented the generated source code from being successfully compiled.
These additional and unnecessary parts have now been removed.
[RTI Issue ID MICRO-777, MICRO-778]
The operation DDS_Topic_get_inconsistent_topic_status has been added to RTI Connext Micro's C API and it is now fully supported.
[RTI Issue ID MICRO-783]
A bug has been fixed which prevented a DDS_StatusCondition instance, associated with a DDS_DataReader, DDS_Subscriber, or DDS_DomainParticipant, from correctly transitioning its trigger value from true to false when state DDS_DATA_AVAILABLE_STATUS was consumed and deactivated in the associated DDS entity.
This behavior caused the wait() operation of any DDS_WaitSet, that had the DDS_StatusCondition instance attached to it, to always immediately return successfully, after the DDS_StatusCondition's trigger value had been transitioned to active. Note that it was still possible for the condition's trigger value to transition to false state if another of the enabled statuses transitioned to false in the associated DDS entity, causing the DDS_StatusCondition to properly update its state according to the DDS entity's one.
[RTI Issue ID MICRO-786]
The operation DDS_WaitSet_get_conditions has now been fully implemented and it can be now used to access the list of DDS_Conditions attached to a DDS_WaitSet instance.
[RTI Issue ID MICRO-788]
A reliable DataReader with KEEP_LAST history may have stopped receiving new samples, after previous samples were received out of order. This was due to a bug where there were no available resources of the DataReader to receive samples that would allow the out of order samples to be presented in order to the application.
[RTI Issue ID MICRO-790]
RTI Connext Micro is designed not to allocate memory dynamically after an entity has been created and enabled. However, a bug in the implementation for Dynamic Partici- pant, Static Endpoint (DPSE) discovery resulted in the dynamic allocation of memory during participant discovery. The memory allocated was to increase the maximum size of sequences for storing received participant discovery data. This release has been fixed to do this allocation during initialization.
[RTI Issue ID MICRO-803]
Previously, an application would crash when DDS_DomainParticipantFactory_lookup_participant() was called before the first invo- cation of DDS_DomainParticipantFactory_get_instance(). This was caused by improper initialization of the DomainParticipantFactory and has been fixed in this release.
[RTI Issue ID MICRO-819]
Logging verbosity is configured by calling OSAPI_Log_set_verbosity(). It should be configurable at any time. However, a bug existed where the first call to DDS_DomainParticipantFactory_get_instance() reset the log verbosity to OSAPI_LOGKIND_ERROR. This caused calls to OSAPI_Log_set_verbosity() for verbos- ity not equal OSAPI_LOGKIND_ERROR to be ineffective when called before the first DDS_DomainParticipantFactory_get_instance().
[RTI Issue ID MICRO-820]
Given a DataReader and a DDS status handled by both the DataReaderListener and a Waitset, the Waitset's wait operation may not have correctly woken up, resulting in a timeout. For example, having DDS_DATA_AVAILABLE_STATUS handled by both the listener's on_data_available callback and as an enabled status of a StatusCondition attached to a Waitset could have resulted in the Waitset waiting to timeout even though data was actually available. As a workaround, you may have disabled the listener and instead relied only on the Waitset. This workaround is no longer needed.
[RTI Issue ID MICRO-969]
RTI Connext Micro supports two built-in transports: UDP and Intra, where Intra only transports data between endpoints belonging to the same DomainParticipant. With both transports enabled (which is the default setting), a bug introduced in Connext Micro 2.3.1 caused written samples to be sent over only one transport. This could result in samples not being received by a remote DomainParticipant, where samples are sent over Intra but not over UDP.
[RTI Issue ID MICRO-866]
When using static endpoint discovery (DPSE), RTI Connext Micro incorrectly enforced a requirement that the object_id for statically asserted remote endpoints must be unique across all remote endpoints, as opposed to just between remote endpoints within the same participant. This restriction has been removed.
[RTI Issue ID MICRO-211]
The participant discovery messages sent by a Connext Micro application using the Dynamic-Participant Static-Endpoint (DPSE) discovery plugin contained an incorrect value for the Built-in Endpoint Mask parameter. The bits of the mask indicate which built-in discovery endpoints are enabled, and for DPSE the bits corresponding to the participant built-in writer and reader were not set. This could cause other DDS implementations not to discover, communicate, or correctly update statuses with Connext Micro using DPSE. This problem has been fixed in this release.
[RTI Issue ID MICRO-974]
RTI Connext Micro does not yet provide documentation for all non-DDS modules. The internal modules missing documentation include the run-time (RT), the writer and reader history queues (wh_sm, rh_sm), RTPS, and NETIO.
The Android platform (armv7leAndroidR8Dgcc4.7) does not support C++ APIs in this release.
A Waitset’s delete() operation is not safe for concurrent use when other threads may be calling any operations of the Waitset. In general, access to a WaitSet should be guaranteed to have ceased before its delete() operation is called.
Type DDS_InstanceHandle_t is the only data type of Connext Micro's public API whose operations have not yet been exposed as C++ methods. For this reasons, users must rely on its C API, which is already available when including the C++ API header.