DDS Topics Reference

This page documents the DDS topics used in the GVA architecture.

Topic Overview

Topic Name Domain Description
Registration 0 System registration and heartbeat
Alarms 0 Alarm raising and management
UacmParameter 0 UACM parameter data
UacmStatus 0 Subsystem health status
DisplayData 0 External app display data
KeyEvent 0 Soft key events
SoftKeyConfig 0 Soft key configuration
AppActivation 0 Application activation events

Registration Topic

IDL Definition

module GVA {
    enum SystemType {
        HMI,
        BMS,
        WEAPON,
        NAVIGATION,
        COMMUNICATION,
        SENSOR,
        POWER,
        APPLICATION,
        SERVICE,
        OTHER
    };

    enum RegistrationStatus {
        ONLINE,
        OFFLINE,
        DEGRADED,
        TIMEOUT,
        UNKNOWN
    };

    struct Registration {
        @key string systemId;
        string systemName;
        SystemType systemType;
        RegistrationStatus status;
        sequence<string> capabilities;
        long long timestamp;
    };
};

QoS Profile

<qos_profile name="Registration">
    <durability>
        <kind>TRANSIENT_LOCAL</kind>
    </durability>
    <reliability>
        <kind>RELIABLE</kind>
    </reliability>
    <liveliness>
        <kind>AUTOMATIC</kind>
        <lease_duration>
            <sec>10</sec>
        </lease_duration>
    </liveliness>
</qos_profile>

Alarms Topic

IDL Definition

module GVA {
    enum AlarmSeverity {
        CRITICAL,
        WARNING,
        ADVISORY
    };

    enum AlarmState {
        ACTIVE,
        ACKNOWLEDGED,
        CLEARED
    };

    struct Alarm {
        @key string alarmId;
        string sourceSystem;
        string alarmCode;
        AlarmSeverity severity;
        AlarmState state;
        string message;
        long long raisedTime;
        long long ackTime;
        long long clearedTime;
        map<string, string> metadata;
    };
};

QoS Profile

<qos_profile name="Alarms">
    <durability>
        <kind>TRANSIENT_LOCAL</kind>
    </durability>
    <reliability>
        <kind>RELIABLE</kind>
    </reliability>
    <history>
        <kind>KEEP_ALL</kind>
    </history>
</qos_profile>

UACM Parameter Topic

IDL Definition

module GVA {
    enum DataQuality {
        GOOD,
        SUSPECT,
        BAD,
        STALE
    };

    struct UacmParameter {
        @key string parameterId;
        string subsystemId;
        float value;
        string unit;
        DataQuality quality;
        long long timestamp;
    };
};

QoS Profile

<qos_profile name="UacmParameter">
    <durability>
        <kind>VOLATILE</kind>
    </durability>
    <reliability>
        <kind>BEST_EFFORT</kind>
    </reliability>
    <history>
        <kind>KEEP_LAST</kind>
        <depth>1</depth>
    </history>
</qos_profile>

UACM Status Topic

IDL Definition

module GVA {
    enum HealthStatus {
        GREEN,
        AMBER,
        RED,
        UNKNOWN
    };

    struct UacmStatus {
        @key string subsystemId;
        string name;
        HealthStatus health;
        sequence<string> faults;
        map<string, float> parameters;
        float usageHours;
        long long timestamp;
    };
};

QoS Profile

<qos_profile name="UacmStatus">
    <durability>
        <kind>TRANSIENT_LOCAL</kind>
    </durability>
    <reliability>
        <kind>RELIABLE</kind>
    </reliability>
    <history>
        <kind>KEEP_LAST</kind>
        <depth>1</depth>
    </history>
</qos_profile>

Display Data Topic

IDL Definition

module GVA {
    enum DrawCommandType {
        CLEAR,
        RECT,
        FILLED_RECT,
        LINE,
        TEXT,
        IMAGE,
        ARC,
        POLYGON
    };

    struct DrawCommand {
        DrawCommandType type;
        int x;
        int y;
        int width;
        int height;
        unsigned long color;
        string text;
        string imageId;
        int lineWidth;
        sequence<int> points;
    };

    struct DisplayData {
        @key string applicationId;
        int width;
        int height;
        sequence<DrawCommand> commands;
        long long timestamp;
    };
};

QoS Profile

<qos_profile name="DisplayData">
    <durability>
        <kind>VOLATILE</kind>
    </durability>
    <reliability>
        <kind>RELIABLE</kind>
    </reliability>
    <history>
        <kind>KEEP_LAST</kind>
        <depth>1</depth>
    </history>
</qos_profile>

Key Event Topic

IDL Definition

module GVA {
    enum KeyState {
        PRESSED,
        RELEASED
    };

    struct KeyEvent {
        string applicationId;
        int keyId;
        KeyState state;
        long long timestamp;
    };
};

QoS Profile

<qos_profile name="KeyEvent">
    <durability>
        <kind>VOLATILE</kind>
    </durability>
    <reliability>
        <kind>RELIABLE</kind>
    </reliability>
</qos_profile>

Soft Key Config Topic

IDL Definition

module GVA {
    struct SoftKeyConfig {
        @key string applicationId;
        sequence<string, 6> keys;
        sequence<boolean, 6> enabled;
    };
};

QoS Profile

<qos_profile name="SoftKeyConfig">
    <durability>
        <kind>TRANSIENT_LOCAL</kind>
    </durability>
    <reliability>
        <kind>RELIABLE</kind>
    </reliability>
</qos_profile>

App Activation Topic

IDL Definition

module GVA {
    struct AppActivation {
        @key string applicationId;
        boolean active;
        long long timestamp;
    };
};

QoS Profile

<qos_profile name="AppActivation">
    <durability>
        <kind>VOLATILE</kind>
    </durability>
    <reliability>
        <kind>RELIABLE</kind>
    </reliability>
</qos_profile>

Using Topics in Code

C++ Example

#include <dds/dds.hpp>
#include <ldm10/Registration.hpp>

// Create participant
dds::domain::DomainParticipant participant(0);

// Create topic
dds::topic::Topic<GVA::Registration> topic(participant, "Registration");

// Create publisher
dds::pub::Publisher publisher(participant);
dds::pub::DataWriter<GVA::Registration> writer(publisher, topic);

// Create subscriber
dds::sub::Subscriber subscriber(participant);
dds::sub::DataReader<GVA::Registration> reader(subscriber, topic);

// Write data
GVA::Registration reg;
reg.systemId("MY_SYSTEM");
reg.status(GVA::RegistrationStatus::ONLINE);
writer.write(reg);

// Read data
auto samples = reader.take();
for (const auto& sample : samples) {
    if (sample.info().valid()) {
        std::cout << sample.data().systemId() << std::endl;
    }
}

Domain Configuration

The standard GVA domain is 0. Configure in your DDS XML:

<domain id="0">
    <participant_qos>
        <transport_builtin>
            <mask>UDPV4</mask>
        </transport_builtin>
    </participant_qos>
</domain>