RTI Connext Micro  Version 2.4.4.0
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Release Notes

2.4.4

What's New

Updated Generated Code from rtiddsgen

Generated code from rtiddsgen has been updated. Consequently, users using this version of RTI Connext Micro must use the new rtiddsgen to regenerate files for existing types.

What's Fixed

Missing Parameter in Sample Filtering Callback of HelloWorld Example Resulted in Incorrectly Unfiltered Samples

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]

Communication With Endpoint Incorrectly Stopped After Shutdown of Other Endpoint

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]

Double Free by C++ Foo Sequence Functions

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]

Entity Name's Maximum Length Was Not 255 Bytes

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]

Re-discovery of Participants May Fail

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]

Accessing Samples with read() Resulted in New Samples Being Rejected

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]

Default Value of DDS_LivelinessQosPolicy Kind Was DDS_MANUAL_BY_TOPIC_LIVELINESS_QOS

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]

2.4.3

What's New

FACE Conformance

RTI Connext Micro has been verified for FACE conformance. See this user guide to learn how to build RTI Connext Micro using the FACE conformance test tools.

2.4.2

New Features

Configurable Discovery of Unknown Peers

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]

2.4.1

New Features

New -micro option for rtiddsgen

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]

New language options for generating code for RTI Connext Micro using rtiddsgen

The new version of rtiddsgen that is shipped with RTI Connext 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 Micro, user shall specify the following command line options.

  • Target language C
    • -micro -language C
  • Target language C++
    • -micro -language C++

[RTI Issue ID MICRO-79]

CMake Configuration for Buildable Source

The provided CMake configuration for building RTI Connext Micro from source code has been updated:

  • Configuration options have been simplified, including selecting a target operating system, and for including C++ API support
  • Output libraries are now identical to pre-built shipped libraries of RTI Connext Micro The previous configuration instead produced a single library.

[RTI Issue ID MICRO-112, MICRO-770, MICRO-805]

DDS_WaitSet and DDS_Condition APIs For C++

This release officially introduces full support of DDS_WaitSet and DDS_Condition APIs also for C++ users of RTI Connext Micro.

The following operations are officially supported:

  • DDSWaitSet::DDSWaitSet()
  • DDSWaitSet::wait()
  • DDSWaitSet::attach_condition()
  • DDSWaitSet::detach_condition()
  • DDSWaitSet::get_conditions()
  • DDSCondition::get_trigger_value()
  • DDSGuardCondition::DDSGuardCondition()
  • DDSGuardCondition::set_trigger_value()
  • DDSStatusCondition::set_enabled_statuses()
  • DDSStatusCondition::get_enabled_statuses()
  • DDSStatusCondition::get_entity()

[RTI Issue ID MICRO-685]

New HelloWorld_dpde_waitset Example

A new code example, HelloWorld_dpde_waitset, has been added to the set of examples shipped with RTI Connext 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]

Access to Status of DDS Entities by C++ APIs

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:

  • DDSDataReader::get_sample_rejected_status
  • DDSDataReader::get_sample_lost_status
  • DDSDataReader::get_subscription_matched_status
  • DDSDataReader::get_requested_incompatible_qos_status
  • DDSDataReader::get_requested_deadline_missed_status -
  • DDSDataReader::get_instance_replaced_status
  • DDSDataReader::get_liveliness_changed_status
  • DDSDataWriter::get_publication_matched_status
  • DDSDataWriter::get_offered_incompatible_qos_status
  • DDSDataWriter::get_offered_deadline_missed_status
  • DDSDataWriter::get_liveliness_lost_status
  • DDSTopic::get_inconsistent_topic_status

[RTI Issue ID MICRO-784]

Improved support for listeners of DDS entities in C++ API

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:

  • DDSDomainParticipant::set_listener
  • DDSDomainParticipant::get_listener
  • DDSSubscriber::set_listener
  • DDSSubscriber::get_listener
  • DDSPublisher::set_listener
  • DDSPublisher::get_listener
  • DDSTopic::set_listener
  • DDSTopic::get_listener
  • DDSDataWriter::set_listener
  • DDSDataReader::set_listener

New Operations FooTypeSupport_register/unregister_type for User Data-Types

The new version of rtiddsgen that is shipped with RTI Connext 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]

Sample Info Provided With DataReaderListener's Sample Filter Callback

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]

More Information Provided in DDS_SampleLostStatus Type

The DDS_SampleLostStatus type has two new fields:

  • kind
  • sample_info

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]

What's Fixed

Full Support of -namespace Option for rtiddsgen

The new version of rtiddsgen shipped with RTI Connext 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]

Redundant Code Not Generated for Non Top-Level Types

Previous version of rtiddsgen that were shipped with RTI Connext 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]

Setting Real-Time Clock for VxWorks Platform

For VxWorks platforms, when initializing an application, RTI Connext 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]

IDL Copy Directives Now Supported by rtiddsgen

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:

  • //
  • //-declaration o //-c
  • //-c-declaration

[RTI Issue ID MICRO-740]

Incompatible Encoding of DDS_Duration_t with RTI Connext DDS

The DDS_Duration_t datatype was not correctly encoded by RTI Connext 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 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]

Premature Wakeup from Semaphore Take for POSIX Platforms

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]

Failed Compilation of C++ Generated Code from rtiddsgen

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. The 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]

DDS_Topic_get_inconsistent_topic_status in C API

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]

DDS_StatusCondition's Trigger Value Not Updated When DDS_DATA_AVAILABLE_STATUS Is Reset

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]

DDS_WaitSet_get_conditions Supported by C API

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]

Reliable, Keep-Last DataReader May Stop Receiving Samples

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]

Memory Dynamically Allocated By DPSE After Initialization

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]

Application Crashed When Looking Up DomainParticipant

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]

Setting Log Verbosity May Have Been Ineffective

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]

Waitset’s Wait may have Incorrectly Timed Out when Listener also Installed

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]

Data not Received due to Samples not being Sent by all Transports

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]

Static Endpoint Discovery Restrictively Required Unique Object IDs Across All Remote Endpoints

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]

Possible Non-Discovery or Non-Communication between Connext Micro using DPSE and a Non-Micro Application

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]

Known Issues

Incomplete Documentation for non-DDS APIs

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.

C++ APIs Not Supported for Android Platform

The Android platform (armv7leAndroidR8Dgcc4.7) does not support C++ APIs in this release.

Waitset Delete Not Safe For Concurrent Use

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.


RTI Connext Micro Version 2.4.4.0 Copyright © Thu Apr 30 2015 Real-Time Innovations, Inc