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: