DDS Topics Reference¶
This page documents the DDS topics defined in the LDM 10.0.0 reference model (DEF STAN 23-009) and the QoS policies mandated by the GVA Development and Deployment Standards and Guidelines v2.1.
Topic Overview¶
The LDM SDK ships multiple library versions corresponding to UK DEF STAN 23-009 Land Data Model releases:
| Library | LDM Version | IDL Source | Description |
|---|---|---|---|
ldm10 |
10.0.0 | ldm/UK/GVA/v10.0.0/ |
Current reference model (default) |
ldm920 |
9.2.0 | ldm/UK/GVA/v9.2.0/ |
Previous release (final) |
ldm910 |
9.1.0 | ldm/UK/GVA/v9.1.0/ |
Legacy release (final) |
asldm725 |
7.2.5 | — | Astute Systems proprietary variant |
All applications on the same vehicle must share one DDS domain ID. The default domain is 0, configurable at build time (cmake -DLDM_DOMAIN_ID=N ..) or at runtime (--domain=N).
PSM Modules¶
LDM 10.0.0 defines 38 standard PSM modules containing over 1,000 topic constants. Each module is an IDL file under ldm/UK/GVA/v10.0.0/GVA_Reference_Model_Version-10.0.0/GVA/IDL/.
Topic Naming Convention¶
Topic name constants follow the pattern KC_<Class>_TopicName with string values of "<Module>__<Class>":
// Example from Alarms_PSM.idl
const string KC_Alarm_TopicName = "Alarms__Alarm";
const string KC_Alarm_acknowledge_TopicName = "Alarms__Alarm__acknowledge";
- State topics:
"<Module>__<Class>"— ongoing object state - Command topics:
"<Module>__<Class>__<operation>"— operations on objects - Event topics:
"<Module>__CommandResponseType"— command responses - Specification topics:
"<Module>__<Class>_Specification"— non-volatile configuration - CP (Collection Point) topics:
"<Module>__<Class>_CP"— object lifecycle events
Every module defines a KT_CommandResponseType_TopicName for command responses.
Module Summary¶
| # | PSM Module | Topics | Domain |
|---|---|---|---|
| 1 | Acoustic_Detector_PSM | 12 | Defence |
| 2 | Actuators_PSM | 45 | Platform |
| 3 | Alarms_PSM | 18 | Core Services |
| 4 | Ammunition_PSM | 3 | Weapons |
| 5 | Annunciation_PSM | 14 | HMI |
| 6 | Arbitration_PSM | 22 | Core Services |
| 7 | Audio_PSM | 51 | Communications |
| 8 | Automatic_Weapon_PSM | 18 | Weapons |
| 9 | Automotive_Message_Set_Specification_PSM | 6 | Automotive |
| 10 | Battlespace_Objects_PSM | 23 | BMS |
| 11 | Display_Extension_PSM | 62 | HMI |
| 12 | Displays_And_Controls_PSM | 66 | HMI |
| 13 | Distribution_Network_PSM | 19 | Infrastructure |
| 14 | Environmental_Control_PSM | 31 | Platform |
| 15 | Environmental_Sensors_PSM | 28 | Sensors |
| 16 | GVA_Common_PSM | 1 | Common |
| 17 | J1939_Automotive_PSM | 7 | Automotive |
| 18 | Laser_Range_Finder_PSM | 15 | Sensors |
| 19 | Laser_Warning_System_PSM | 8 | Defence |
| 20 | LDM_Common_PSM | 1 | Common |
| 21 | Manual_Weapon_PSM | 12 | Weapons |
| 22 | Mount_PSM | 68 | Weapons |
| 23 | Multimedia_Routing_PSM | 20 | Communications |
| 24 | Navigation_Reference_PSM | 43 | Navigation |
| 25 | Platform_Configuration_PSM | 34 | Core Services |
| 26 | Power_PSM | 47 | Platform |
| 27 | Radar_PSM | 37 | Sensors |
| 28 | Resource_ID_Allocation_PSM | 11 | Core Services |
| 29 | Routes_PSM | 38 | Navigation |
| 30 | Single_Shot_Grenade_Launcher_Array_PSM | 14 | Weapons |
| 31 | States_Modes_PSM | 10 | Platform |
| 32 | Tactical_Effector_PSM | 13 | Defence |
| 33 | Tactical_Object_Derivation_PSM | 10 | BMS |
| 34 | Tactical_Sensor_PSM | 14 | Sensors |
| 35 | Usage_And_Condition_Monitoring_PSM | 67 | Core Services |
| 36 | Video_PSM | 49 | Communications |
| 37 | Video_Tracking_PSM | 39 | Sensors |
| 38 | Weapon_Location_PSM | 27 | Defence |
Key Service Topics¶
The topics most commonly used by LDM SDK applications:
Resource ID Allocation (Registry Service)¶
| Constant | Topic String |
|---|---|
KC_Resource_Registry_TopicName |
Resource_ID_Allocation__Resource_Registry |
KC_Registered_Resource_TopicName |
Resource_ID_Allocation__Registered_Resource |
KC_Resource_Registry_requestResourceId_TopicName |
Resource_ID_Allocation__Resource_Registry__requestResourceId |
KC_Registered_Resource_supplyResourceId_TopicName |
Resource_ID_Allocation__Registered_Resource__supplyResourceId |
KC_Conflicted_Resource_TopicName |
Resource_ID_Allocation__Conflicted_Resource |
KC_Missing_Resource_Mapping_TopicName |
Resource_ID_Allocation__Missing_Resource_Mapping |
Alarms¶
| Constant | Topic String |
|---|---|
KC_Alarm_TopicName |
Alarms__Alarm |
KC_Alarm_Condition_TopicName |
Alarms__Alarm_Condition |
KC_Alarm_acknowledge_TopicName |
Alarms__Alarm__acknowledge |
KC_Alarm_clearAlarm_TopicName |
Alarms__Alarm__clearAlarm |
KC_Alarm_annotate_TopicName |
Alarms__Alarm__annotate |
KC_Alarm_Condition_Specification_TopicName |
Alarms__Alarm_Condition_Specification |
KC_Alarm_Category_Definition_TopicName |
Alarms__Alarm_Category_Definition |
Platform Configuration (UACM)¶
| Constant | Topic String |
|---|---|
KC_Configured_Platform_TopicName |
Platform_Configuration__Configured_Platform |
KC_Configured_Resource_TopicName |
Platform_Configuration__Configured_Resource |
KC_Discoverable_Resource_TopicName |
Platform_Configuration__Discoverable_Resource |
KC_Status_Flag_TopicName |
Platform_Configuration__Status_Flag |
KC_Configured_Platform_setPlatformTime_TopicName |
Platform_Configuration__Configured_Platform__setPlatformTime |
KC_Configured_Platform_setOperatingMode_TopicName |
Platform_Configuration__Configured_Platform__setOperatingMode |
Display Extension (External Apps)¶
| Constant | Topic String |
|---|---|
KC_Display_Extension_TopicName |
Display_Extension__Display_Extension |
KC_Hard_Button_Event_TopicName |
Display_Extension__Hard_Button_Event |
KC_Soft_Button_Event_TopicName |
Display_Extension__Soft_Button_Event |
J1939 Automotive¶
| Constant | Topic String |
|---|---|
KC_Engine_Temperature_TopicName |
J1939_Automotive__Engine_Temperature |
KC_Electronic_Engine_Controller_TopicName |
J1939_Automotive__Electronic_Engine_Controller |
KC_Vehicle_Distance_TopicName |
J1939_Automotive__Vehicle_Distance |
QoS Policies¶
The GVA Development and Deployment Standards and Guidelines v2.1 (DDSG) defines five fixed QoS profiles that all GVA topics must conform to. These profiles are assigned based on the topic's design pattern (stereotype).
Design Patterns¶
Every GVA topic is stereotyped to one of these patterns:
| Pattern | Description | Example Topics |
|---|---|---|
| Service State | Ongoing object state (blue PIM classes) | Alarms__Alarm, Resource_ID_Allocation__Registered_Resource |
| Service Command | Operations on objects (brief relevance) | Alarms__Alarm__acknowledge, ...__requestResourceId |
| Service Event | Command responses, lifecycle events | Alarms__CommandResponseType, ..._CP__objectCreated |
| Alarm | All Alarm module topics | All Alarms_PSM topics |
| Fixed Specification | Non-volatile configuration data (green PIM classes) | Alarms__Alarm_Condition_Specification, ..._Specification |
For Periodic topics (e.g. mount movement at 64 Hz, sensor data), the System Integrator customises Deadline, TimeBasedFilter, and Lifespan to match the interface frequency.
Fixed QoS Profile Settings¶
The key QoS policies and how they differ between patterns:
| QoS Policy | Service State | Service Command | Service Event | Alarm | Specification |
|---|---|---|---|---|---|
| Durability | TRANSIENT_LOCAL | VOLATILE | TRANSIENT_LOCAL | TRANSIENT_LOCAL | TRANSIENT_LOCAL |
| Reliability | RELIABLE | RELIABLE | RELIABLE | RELIABLE | RELIABLE |
| History | KEEP_LAST (1) | KEEP_LAST (1) | KEEP_LAST (1) | KEEP_LAST (1) | KEEP_LAST (1) |
| Lifespan | Infinite | 10 seconds | Infinite | Infinite | Infinite |
| Ownership | SHARED | SHARED | SHARED | SHARED | SHARED |
| Liveliness | AUTOMATIC | AUTOMATIC | AUTOMATIC | AUTOMATIC | AUTOMATIC |
| Deadline | Infinite | Infinite | Infinite | Infinite | Infinite |
| Destination Order | BY_RECEPTION_TIMESTAMP | BY_RECEPTION_TIMESTAMP | BY_RECEPTION_TIMESTAMP | BY_RECEPTION_TIMESTAMP | BY_RECEPTION_TIMESTAMP |
Key Differences
The Service Command pattern is the only one that differs:
- VOLATILE durability — commands are not persisted for late joiners
- 10-second lifespan — stale commands expire automatically, preventing action on old commands after e.g. a power cycle
All other patterns use TRANSIENT_LOCAL durability and Infinite lifespan.
Full QoS Policy Reference¶
Complete policy settings as defined in DDSG v2.1 Table 7, applicable to all five fixed profiles unless noted:
| QoS Policy | Attribute | Value | Applies To |
|---|---|---|---|
| DURABILITY | kind | See table above | Topic, DataWriter, DataReader |
| DURABILITY_SERVICE | history_kind / depth | KEEP_LAST / 1 | Topic |
| DURABILITY_SERVICE | service_cleanup_delay | 0 | Topic |
| PRESENTATION | access_scope | INSTANCE | Publisher, Subscriber |
| PRESENTATION | coherent_access | FALSE | Publisher, Subscriber |
| PRESENTATION | ordered_access | FALSE | Publisher, Subscriber |
| RELIABILITY | kind | RELIABLE | Topic, DataWriter, DataReader |
| RELIABILITY | max_blocking_time | 100 ms | Topic, DataWriter, DataReader |
| HISTORY | kind / depth | KEEP_LAST / 1 | Topic, DataWriter, DataReader |
| LIFESPAN | duration | See table above | Topic, DataWriter |
| OWNERSHIP | kind | SHARED | Topic, DataWriter, DataReader |
| OWNERSHIP_STRENGTH | value | 0 | DataWriter |
| LIVELINESS | kind | AUTOMATIC | Topic, DataWriter, DataReader |
| LIVELINESS | lease_duration | Infinite | Topic, DataWriter, DataReader |
| DEADLINE | period | Infinite | Topic, DataWriter, DataReader |
| LATENCY_BUDGET | duration | 0 | Topic, DataWriter, DataReader |
| TIME_BASED_FILTER | minimum_separation | 0 | DataReader |
| TRANSPORT_PRIORITY | value | 0 | Topic, DataWriter |
| DESTINATION_ORDER | kind | BY_RECEPTION_TIMESTAMP | Topic, DataWriter, DataReader |
| RESOURCE_LIMITS | max_samples / instances | Implementation Decision | Topic, DataWriter, DataReader |
| ENTITY_FACTORY | autoenable_created_entities | TRUE | Publisher, Subscriber, DomainParticipant |
| WRITER_DATA_LIFECYCLE | autodispose_unregistered_instances | FALSE | DataWriter |
| READER_DATA_LIFECYCLE | autopurge_nowriter_samples_delay | Infinite | DataReader |
| READER_DATA_LIFECYCLE | autopurge_disposed_samples_delay | Infinite | DataReader |
QoS Configuration Rules¶
Key rules from DDSG v2.1 Appendix F:
| Rule | Requirement |
|---|---|
| F1 | Registry Service and Platform Configuration topics shall use the fixed QoS profiles |
| F2 | Alarm module topics shall use the fixed QoS profiles |
| F3 | Partitions shall NOT be used — always zero-length |
| F4 | User Data, Topic Data, Group Data — not recommended, always empty |
| F9 | Resources shall set QoS on DDS entities at startup, topic-by-topic from XML configuration |
| F13 | Registration service topics shall use mandated multicast group addresses |
Periodic Pattern QoS¶
For topics published at a fixed frequency (e.g. mount position, sensor data), the System Integrator sets:
| QoS Policy | 64 Hz Example | 8 Hz Example |
|---|---|---|
| Deadline | 15.625 ms | 125 ms |
| TimeBasedFilter | 15.625 ms | 125 ms |
| Lifespan | 15.625 ms | 125 ms |
Modules likely to use periodic QoS: Mount_PSM, Navigation_Reference_PSM, Video_Tracking_PSM.
Using Topics in Code¶
Qt Wrapper Example¶
The LDM SDK generates QtWrapper*PubSub.h classes for Qt-friendly DDS communication:
#include "QtWrapperCAlarmPubSub.h"
// Create a publisher for the Alarm topic
auto publisher = std::make_unique<ldm::pubsub::QtDdsPublisherCAlarm>(
domainId,
P_Alarms_PSM::KC_Alarm_TopicName,
ldm::pubsub::LdmMessagePattern::eCommand);
// Connect to publish signal
connect(publisher.get(),
&ldm::pubsub::QtDdsPublisherCAlarm::OnSamplePublished, ...);
Topic Name Usage¶
Always use the IDL-defined constants rather than hard-coding topic strings:
// Correct — use the constant from the IDL-generated header
P_Alarms_PSM::KC_Alarm_TopicName // "Alarms__Alarm"
// Wrong — never hard-code topic names
"Alarms__Alarm"
See Also¶
- DDS Middleware — middleware selection and configuration
- Topic-to-Service Matrix — which services use which topics
- LDMX — real-time topic monitoring and debugging