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