Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}
h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}
.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}
.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}
.tabSelected{color:[[ColorPalette::PrimaryDark]];
background:[[ColorPalette::TertiaryPale]];
border-left:1px solid [[ColorPalette::TertiaryLight]];
border-top:1px solid [[ColorPalette::TertiaryLight]];
border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}
#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}
.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}
.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}
#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}
.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}
.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}
.tiddler .defaultCommand {font-weight:bold;}
.shadow .title {color:[[ColorPalette::TertiaryDark]];}
.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}
.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}
.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}
.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}
.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}
.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}
.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}
.imageLink, #displayArea .imageLink {background:transparent;}
.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}
.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}
.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}
.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}
.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}
.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}
body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}
h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}
hr {height:1px;}
a {text-decoration:none;}
dt {font-weight:bold;}
ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}
.txtOptionInput {width:11em;}
#contentWrapper .chkOptionInput {border:0;}
.externalLink {text-decoration:underline;}
.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}
.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}
/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}
#mainMenu .tiddlyLinkExisting,
#mainMenu .tiddlyLinkNonExisting,
#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}
.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}
.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}
#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}
#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}
.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}
#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}
.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}
.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}
.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}
#contentWrapper {display:block;}
#splashScreen {display:none;}
#displayArea {margin:1em 17em 0 14em;}
.toolbar {text-align:right; font-size:.9em;}
.tiddler {padding:1em 1em 0;}
.missing .viewer,.missing .title {font-style:italic;}
.title {font-size:1.6em; font-weight:bold;}
.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}
.tiddler .button {padding:0.2em 0.4em;}
.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}
.footer {font-size:.9em;}
.footer li {display:inline;}
.annotation {padding:0.5em; margin:0.5em;}
* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}
.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}
.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}
.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}
.fieldsetFix {border:0; padding:0; margin:1px 0px;}
.sparkline {line-height:1em;}
.sparktick {outline:0;}
.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}
* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}
.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser
Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])
<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]
----
Also see [[AdvancedOptions]]
The //~OpenDDS Excel ~Real-Time Data (RTD) Server// is built as an ~OpenDDS and a Qt4 application. It uses ~OpenDDS to subscribe to the monitor data and the DDS specified Builtin Topic data. It uses Qt4 as the data store. Building will require setting the ''qt4'' feature for MPC. This can be set in the //%~ACE_ROOT%\include\makeinclude\platform_macros.GNU// configuration file, or set on the individual command lines during the build process (recommended). The following assumes that the //platform_macros.GNU// file does ''not'' have the ''qt4'' feature set, as it is not required for any of the dependent software.
The following steps should be followed:
* Ensure that the [[dependent|Dependencies]] header files and libraries are available.
* Ensure that the build [[environment|Setup]] is setup correctly. Then work within the application directory:
{{{
> cd %DDS_ROOT%\tools\excelRTD
}}}
* Create the project files (replace "vc9" with "vc8" or "vc71" as needed):
{{{
> %ACE_ROOT%\bin\mwc.pl -type vc9 -features qt4=1
}}}
* Build the application using Visual Studio.
The //~OpenDDS Excel RTD Server// will be installed to the $~DDS_ROOT/lib directory and can be registered from there.
Background: #fff
Foreground: #000
PrimaryPale: #eee
PrimaryLight: #ccc
PrimaryMid: #600
PrimaryDark: #600
SecondaryPale: #eee
SecondaryLight: #ccc
SecondaryMid: #999
SecondaryDark: #666
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
Common IDL used to define the data published as Monitor Topics is included here for reference. All of this IDL resides within the ''~OpenDDS::DCPS'' module.
{{{
const long MONITOR_DOMAIN_ID = -999;
const long MONITOR_TRANSPORT_ID = 999;
const string SERVICE_PARTICIPANT_MONITOR_TOPIC = "Service Participant Monitor";
const string DOMAIN_PARTICIPANT_MONITOR_TOPIC = "Domain Participant Monitor";
const string TOPIC_MONITOR_TOPIC = "Topic Monitor";
const string PUBLISHER_MONITOR_TOPIC = "Publisher Monitor";
const string SUBSCRIBER_MONITOR_TOPIC = "Subscriber Monitor";
const string DATA_WRITER_MONITOR_TOPIC = "Data Writer Monitor";
const string DATA_WRITER_PERIODIC_MONITOR_TOPIC = "Data Writer Periodic Monitor";
const string DATA_READER_MONITOR_TOPIC = "Data Reader Monitor";
const string DATA_READER_PERIODIC_MONITOR_TOPIC = "Data Reader Periodic Monitor";
const string TRANSPORT_MONITOR_TOPIC = "Transport Monitor";
struct Statistics {
unsigned long n;
double maximum;
double minimum;
double mean;
double variance;
};
typedef sequence<unsigned long> ULongSeq;
typedef sequence<string> StringSeq;
//typedef sequence<GUID_t> GUIDSeq;
enum ValueEnumType { INTEGER_TYPE, DOUBLE_TYPE, STRING_TYPE,
STATISTICS_TYPE, STRING_LIST_TYPE };
union ValueUnion switch (ValueEnumType) {
case INTEGER_TYPE: long integer_value;
case DOUBLE_TYPE: double double_value;
case STRING_TYPE: string string_value;
case STATISTICS_TYPE: Statistics stat_value;
case STRING_LIST_TYPE: StringSeq string_seq_value;
};
struct NameValuePair {
string name;
ValueUnion value;
};
typedef sequence<NameValuePair> NVPSeq;
enum ReportType {
SERVICE_PARTICIPANT_REPORT_TYPE,
DOMAIN_PARTICIPANT_REPORT_TYPE,
TOPIC_REPORT_TYPE,
PUBLISHER_REPORT_TYPE,
SUBSCRIBER_REPORT_TYPE,
DATA_WRITER_REPORT_TYPE,
DATA_WRITER_PERIODIC_REPORT_TYPE,
DATA_READER_REPORT_TYPE,
DATA_READER_PERIODIC_REPORT_TYPE,
TRANSPORT_REPORT_TYPE
};
union GenericReport switch (ReportType) {
case SERVICE_PARTICIPANT_REPORT_TYPE:
ServiceParticipantReport sp_report;
case DOMAIN_PARTICIPANT_REPORT_TYPE:
DomainParticipantReport dp_report;
case TOPIC_REPORT_TYPE:
TopicReport topic_report;
case PUBLISHER_REPORT_TYPE:
PublisherReport publisher_report;
case SUBSCRIBER_REPORT_TYPE:
SubscriberReport subscriber_report;
case DATA_WRITER_REPORT_TYPE:
DataWriterReport dw_report;
case DATA_WRITER_PERIODIC_REPORT_TYPE:
DataWriterPeriodicReport dw_per_report;
case DATA_READER_REPORT_TYPE:
DataReaderReport dr_report;
case DATA_READER_PERIODIC_REPORT_TYPE:
DataReaderPeriodicReport dr_per_report;
case TRANSPORT_REPORT_TYPE:
TransportReport transport_report;
};
interface ProcessMonitor {
// Pass a name that acts as a global identifier for a given
// entity or individual statistic. Need to define the actual
// format for this name, but concatenating the entity identifiers
// together with "/" separators should work. Passing an empty
// string would retrieve the ServiceParticipant information
// (which would list the Domain Participants).
GenericReport retrieve_report(in string name);
// Allow global enabling disabling of report collection for
// this process.
void enable_report_collection();
void disable_report_collection();
// Allow global enabling/disabling of report publication
// for this process.
void enable_report_publishing();
void diable_report_publishing();
// Set the period between publishing samples
void set_publishing_period(in DDS::Duration_t period);
DDS::Duration_t get_publishing_period();
};
}}}
The information hierarchy displayed in the repository monitor tree view starts with the host at the top level. Each executing process that publishes monitor information will appear within the host on which they are executing. The data displayed is derived from [[Monitor Data Topics|MonitorTopics]] distributed in the ~OpenDDS specific ''~MONITOR_DOMAIN_ID'' and the DDS specification defined Builtin Topic data. The information hierarchy is summarized in the following table. The table includes references to the IDL data defintions for the data that will be displayed.
The Monitor Topics include a variable field that allows the application programmer to extend the topics if desired. Arbitrary name/value pairs can be added to the data for distribution and will be displayed by the //monitor// application. The data is defined in IDL with each topic constructed of portions of the [[common IDL|CommonIdl]] definitions. These IDL definitions are all within the ''~OpenDDS::DCPS'' IDL module. They are all defined within the file located at //$~DDS_ROOT/dds/monitor/monitor.idl//.
The Builtin Topics are defined in the DDS specification. The table below includes links to the specific IDL for the Builtin Topic data for reference. ~OpenDDS uses the IDL defined in //$~DDS_ROOT/dds/~DdsDcpsInfrastructure.idl// for the Builtin Topic definitions.
{{centeredTable{
| Displayed Monitor Information |c
| Type | Contains | Multiplicity | Links to | Data | Description |
|host |process | //n// | n/a |[[Monitor Topic Data|ServiceData]] |Each host with processes publishing ~OpenDDS monitor topics.<br>The value for the tree node is the hostname as it is published in the monitor topics |
|process |~DomainParticipant | //n// | n/a |[[Monitor Topic Data|ServiceData]] |Each process publishing ~OpenDDS monitor topics.<br>The value for the tree node is the process Id value as it is published in the monitor topics |
|~|transport | //n// | n/a |~|~|
|transport |type | 1 | n/a |[[Monitor Topic Data|TransportData]] |Each transport active within a process.<br>The value for the tree node is the ~TransportIndex value for the transport instance in hexadecimal format |
|~DomainParticipant |~DomainId | 1 | n/a |[[Monitor Topic Data|DomainData]],<br>[[Builtin Topic Data|ParticipantBuiltinData]] |Each ~DomainParticipant within a process.<br>The value for the tree node is the 16 byte GUID value for the ~DomainParticipant in a hexadecimal format |
|~|Topic | //n// | n/a |~|~|
|~|Publisher | //n// | n/a |~|~|
|~|Subscriber | //n// | n/a |~|~|
|~|~QoS | 1 | n/a |~|~|
|Topic |Topic name | 1 | n/a |[[Monitor Topic Data|TopicData]],<br>[[Builtin Topic Data|TopicBuiltinData]] |Each Topic within a ~DomainParticipant.<br>The value for the tree node is the 16 byte GUID value for the Topic in a hexadecimal format |
|~|Data type | 1 | n/a |~|~|
|~|~QoS | 1 | n/a |~|~|
|Publisher |transport | 1 |host.process.transport |width: 10em;[[Monitor Topic Data|PublisherData]],<br>[[Builtin Topic Data|PublicationBuiltinData]] |Each Publisher within a ~DomainParticipant.<br>The value for the tree node is the 16 byte GUID value for the Publisher in a hexadecimal format |
|~|writer | //n// | n/a |~|~|
|~|~QoS | 1 | n/a |~|~|
|Subscriber |transport | 1 |host.process.transport |[[Monitor Topic Data|SubscriberData]],<br>[[Builtin Topic Data|SubscriptionBuiltinData]] |Each Subscriber within a ~DomainParticipant.<br>The value for the tree node is the 16 byte GUID value for the Subscriber in a hexadecimal format |
|~|reader | //n// | n/a |~|~|
|~|~QoS | 1 | n/a |~|~|
|Writer |Topic name | 1 |~DomainParticipant.topic.topicname |[[Monitor Topic Data|WriterData]],<br>[[Builtin Topic Data|PublicationBuiltinData]] |Each Writer within a Publisher. The readers are the ~DataReader entities associated with the ~DataWriter entitiy represented by this tree node.<br>The value for the tree node is the 16 byte GUID value for the ~DataWriter in a hexadecimal format |
|~|Reader | //n// |Subscriber.reader |~|~|
|~|~QoS | 1 | n/a |~|~|
|Reader |Topic name | 1 |~DomainParticipant.topic.topicname |[[Monitor Topic Data|ReaderData]],<br>[[Builtin Topic Data|SubscriptionBuiltinData]] |Each Reader within a Subscriber. The writers are the ~DataWriter entities associated with the ~DataReader entitiy represented by this tree node.<br>The value for the tree node is the 16 byte GUID value for the ~DataReader in a hexadecimal format |
|~|Writer | //n// |Publisher.writer |~|~|
|~|~QoS | 1 | n/a |~|~|
}}}
The //links// column in the table indicates which, if any, fields contained by the element are references to data contained at a separate location. For example, each Publisher and Subscriber contains a transport, which is a link to the actual transport described separately and contained within the process.
The //~OpenDDS Excel ~Real-Time Data (RTD) Server// has the same dependencies as the [[OpenDDS|http://www.opendds.org/]] libraries. These include the ''ACE'' and ''TAO'' libraries as well as ~OpenDDS itself. Since the //~OpenDDS Excel RTD Server// is included in the ~OpenDDS distribution, it and the ~OpenDDS versions will be compatible. Follow the [[directions|http://www.opendds.org/building.html]] for building ~OpenDDS to build all of these dependent libraries.
In addition to ~OpenDDS, the //~OpenDDS Excel RTD Server// uses the [[Qt4|http://qt.nokia.com]] GUI libraries and the Windows SDK. The best way to install the ~QT4 libraries is to use whatever package manager or installer your system has available and install the development header files and libraries into system locations. If this is not possible, obtain and install a local copy from the [[Qt4|http://qt.nokia.com/downloads]] website. The Windows SDK is available on the Microsoft Download Center.
* Note the //~OpenDDS Excel RTD Server// uses the ~QT4 GUI libraries not for any GUI functionality but because the monitor tree storage code is shared with the stand-alone Monitor application. This ensures consistent results between the two applications.
The IDL used to define the data published as the ~DomainParticipantReport is included here for reference. This IDL resides within the ''~OpenDDS::DCPS'' module and uses types and values defined in the [[common IDL|CommonIdl]].
{{{
struct DomainParticipantReport {
string host;
long pid;
GUID_t dp_id;
DDS::DomainId_t domain_id;
GUIDSeq topics;
NVPSeq values;
};
}}}
//The ~OpenDDS Excel Add-in// adds a dedicated tab for ~OpenDDS to the Excel ribbon bar. However, the tab won't be visible if a workbook isn't open or the active workbook is an add-in. Under the ~OpenDDS tab are two groups. Repository ~IORs/Endpoints and Repository Monitors.
{{imgcenter{[img[images/openDDSTab.png]]}}}
!Repository ~IORs/Endpoints
The Repository ~IORs/Endpoints Group is for management of ~IORs and endpoints only. It has a drop down list of ~IORs/Endpoints and two buttons: Add and Remove. Selecting the Add button displays the dialog below. Selecting the Remove button removes the current selection in the drop down list.
{{imgcenter{[img[images/addIOR.png]]}}}
!Repository Monitors
The Repository Monitors Group has a drop down list of repository monitors that are in the workbook and four buttons: Add, Remove, Go To, and Snapshot. Selecting the Add button displays the dialog below which in turn adds the monitor tree below that to the worksheet. Selecting the Remove button removes the current selection in the drop down list from the list and the worksheet. Selecting the Go To button activates the cells of the monitor tree that is currently selected in the drop down list.
{{imgcenter{[img[images/addMonitorTree.png]]}}}
{{imgcenter{[img[images/monitorTree.png]]}}}Selecting the Snapshot button snapshots the monitor tree that is currently selected in the drop down list either in-place or in another location in the same workbook by replacing the formulas in the cells with the current values.
{{imgcenter{[img[images/snapshotMonitorTree.png]]}}}
[[Quick Start]]
[[GUI]]
[[Dependencies]]
[[Setup]]
[[Building]]
[[Data]]
The //monitor// application subscribes to all of the available monitor application topics. These topics include static topics as well as dynamic topics. The static topics are published at the beginning and end of the lifetime of the corresponding Entity and the periodic topics are published at a rate determined by the configuration, with a default of once per second. The topics are:
# [[ServiceParticipantReport|ServiceData]] - contains static information about the application process ~ServiceParticipant.
# [[DomainParticipantReport|DomainData]] - contains static information about each active ~DomainParticipant.
# [[TransportReport|TransportData]] - contains static information about each active transport instance.
# [[TopicReport|TopicData]] - contains static information about each active Topic.
# [[PublisherReport|PublisherData]] - contains static information about each active Publisher.
# [[SubscriberReport|SubscriberData]] - contains static information about each active Subscriber.
# [[DataWriterReport|WriterData]] - contains static information about each active writer.
# [[DataWriterPeriodicReport|WriterData]] - contains dynamic information about each active writer.
# [[DataReaderReport|ReaderData]] - contains staticinformation about each active reader.
# [[DataReaderPeriodicReport|ReaderData]] - contains dynamic information about each active reader.
OpenDDS is an open source C++ implementation of the Object Management Group (OMG) Data Distribution Service (DDS). OpenDDS also supports Java bindings through JNI and can be included with JBoss (ESB) frameworks by means of a JMS wrapper. OpenDDS leverages the ADAPTIVE Communication Environment (ACE) to provide a cross platform environment.
OpenDDS is supported by [[Object Computing, Inc.|http://www.objectcomputing.com/]]
<!--{{{-->
<div class='header'>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
<div class='footer'>$Id: userguide.html 4793 2011-07-28 14:45:58Z hudson_d $</div>
</div>
<!--}}}-->
The Builtin Topic data IDL for participants is included here for reference.
{{{
struct ParticipantBuiltinTopicData {
BuiltinTopicKey_t key;
UserDataQosPolicy user_data;
};
}}}
The Builtin Topic data IDL for publications is included here for reference. Publication data includes Quality of Service policy values for both the Publisher and the ~DataWriter Entities that comprise the publication.
{{{
struct PublicationBuiltinTopicData {
BuiltinTopicKey_t key;
BuiltinTopicKey_t participant_key;
string topic_name;
string type_name;
DurabilityQosPolicy durability;
DurabilityServiceQosPolicy durability_service;
DeadlineQosPolicy deadline;
LatencyBudgetQosPolicy latency_budget;
LivelinessQosPolicy liveliness;
ReliabilityQosPolicy reliability;
LifespanQosPolicy lifespan;
UserDataQosPolicy user_data;
OwnershipQosPolicy ownership;
OwnershipStrengthQosPolicy ownership_strength;
DestinationOrderQosPolicy destination_order;
PresentationQosPolicy presentation;
PartitionQosPolicy partition;
TopicDataQosPolicy topic_data;
GroupDataQosPolicy group_data;
};
}}}
<div class='viewer' id='contentWrapper'><small><a href="index.html">Home</a> > %1</small><h1 class='publishLogo'>%0</h1>
<div id='publishContentWrapper'>
<h2>%1</h2>
<ul>%2
</ul>
<small>Published: %6</small>
</div></div>
/***
|''Name:''|Publish Macro|
|''Version:''|2.4.1 (2 July 2008)|
|''Source''|http://jackparke.googlepages.com/jtw.html#PublishMacro ([[del.icio.us|http://del.icio.us/post?url=http://jackparke.googlepages.com/jtw.html%23PublishMacro]])|
|''Author:''|[[Jack]]|
|''Type:''|Macro|
!Description
<<doPublish>> tiddlers tagged with these tags <<option txtPublishTags>> (comma seperated) as HTML pages to the subfolder 'publish' (you must create this). Use the [[PublishTemplateHead]] and [[PublishTemplateBody]] templates to style your pages and the [[PublishIndexTemplate]] to define an index page. For publishing individual tiddlers the [[PublishTemplateBodySingle]] template is used.
!Usage
To publish all tagged tiddlers:
{{{<<doPublish>>}}} <<doPublish>>
To publish a single tiddler, use the {{{<<publishTiddler>>}}} macro or add the "publishTiddler" command to your ViewTemplate
!Template placeholders
|!Placeholder|!Meaning|
|%0|Your SiteTitle "<<tiddler SiteTitle>>"|
|%1|The current tiddler title|
|%2|The rendered tiddler HTML|
|%3|CSV list of tags|
|%4|Tiddler modifier|
|%5|Tiddler modified date|
|%6|Tiddler creation date|
|%7|Tiddler wiki text|
!Revision History
* Original by [[Jack]] 24 May 2006
* Updated 2 Jan 2007
* Refactored 4 Jan 2007
* Small improvements
* Publish single tiddlers
* Template placeholder %7 for tiddler's wiki text
!Code
***/
//{{{
version.extensions.doPublish = {
major: 2,
minor: 4,
revision: 1,
date: new Date("July 2, 2008")
};
config.macros.doPublish = {
label: "publish",
prompt: "Publish Tiddlers as HTML files"
};
if (config.options.txtPublishTags == undefined) config.options.txtPublishTags = "Publish";
config.shadowTiddlers.PublishTemplateHead = '<title>%0 - %1</title>\n<link rel="stylesheet" type="text/css" href="style.css"/>\n<meta name="keywords" content="%3"/>'
config.shadowTiddlers.PublishTemplateBody = '<div class=\'viewer\' id=\'contentWrapper\'><small><a href=\"./publish/index.html\">Home</a> > %1</small><h1>%0</h1>\n<h2>%1</h2>\n%2\n<hr>Tags: %3\n<hr>%4, %5 (created %6)\n</div>\n'
config.shadowTiddlers.PublishTemplateBodySingle = '<h1>%0</h1>\n<h2>%1</h2>\n%2\n<hr>Tags: %3\n<hr>%4, %5 (created %6)\n</div>\n'
config.shadowTiddlers.PublishIndexTemplate = '<div class=\'viewer\' id=\'contentWrapper\'><small><a href="./publish/index.html">Home</a> > %1</small><h1>%0</h1><h2>%1</h2>\n<ul>%2\n</ul>\n<small>Published: %6</small>\n</div>\n';
config.macros.doPublish.handler = function(place)
{
if (!readOnly)
createTiddlyButton(place, this.label, this.prompt,
function() {
doPublish();
return false;
},
null, null, this.accessKey);
}
config.macros.publishTiddler = {
label : 'publish',
prompt : 'Publish this tiddler as an HTML file.',
handler : function(place,macroName,params,wikifier,paramString,tiddler)
{
var btn = createTiddlyButton(place, this.label, this.prompt,
function(e) {
if(!e) var e = window.event;
publishTiddler(this.getAttribute('tiddler'))
return false;
},
null, null, this.accessKey);
btn.setAttribute('tiddler', tiddler.title);
}}
config.commands.publishTiddler = {handler : function(event,src,title) {publishTiddler(title);},text: "publish", tooltip: "Publish this tiddler as HTML"};
function publishTiddler(title) {
//debugger
var PublishFolder = getWikiPath('publish');
var place = document.getElementById(story.container)
var HTMLTemplateHead = store.getTiddlerText("PublishTemplateHead");
var HTMLTemplateBody = store.getTiddlerText("PublishTemplateBodySingle") || store.getTiddlerText("PublishTemplateBody");
HTMLTemplateBody = renderTemplate(HTMLTemplateBody)
HTMLTemplateBody = wiki2Web(HTMLTemplateBody);
var tiddler = store.getTiddler(title);
var tiddlerText = store.getValue(tiddler, 'text');
var tiddlerHTML = wikifyStatic(tiddlerText);
var HTML = '<html>\n\<head>\n' + HTMLTemplateHead + '\n</head>\n<body>\n' + HTMLTemplateBody + '\n</body>\n</html>';
HTML = HTML.format([
wikifyPlain("SiteTitle").htmlEncode(),
tiddler.title.htmlEncode(),
wiki2Web(tiddlerHTML),
tiddler.tags.join(", "),
tiddler.modifier,
tiddler.modified.toLocaleString(),
tiddler.created.toLocaleString(),
tiddlerText
]);
saveFile(PublishFolder + tiddler.title.filenameEncode() + ".html", HTML);
//story.closeTiddler(tiddler.title);
var indexWin = window.open((PublishFolder + title.filenameEncode() + ".html").replace(/\\/g, "/"), null);
indexWin.focus();
}
function doPublish() {
var savedTiddlers = [];
var tiddlers = store.getTiddlers("title");
var place = document.getElementById(story.container)
var HTMLTemplateHead = store.getTiddlerText("PublishTemplateHead");
var HTMLTemplateBody = store.getTiddlerText("PublishTemplateBody");
HTMLTemplateBody = renderTemplate(HTMLTemplateBody)
HTMLTemplateBody = wiki2Web(HTMLTemplateBody);
var PublishTags = config.options.txtPublishTags || "publish";
PublishTags = PublishTags.split(",")
var PublishFolder = getWikiPath('publish');
if (!PublishFolder) return;
var indexFile = "";
var indexFileTemplate = store.getTiddlerText("PublishIndexTemplate");
// This does not allow <<myMacro>> but wants <div macro="myMacro">
indexFileTemplate = renderTemplate(indexFileTemplate)
// This option allows WIKI-syntax but is limited in it's HTML capabilities
//indexFileTemplate = wikifyStatic(indexFileTemplate)
for (var t = 0; t < tiddlers.length; t++) {
var tiddler = tiddlers[t];
if (tiddler.tags.containsAny(PublishTags)) {
var tiddlerText = store.getValue(tiddler, 'text');
var tiddlerHTML = wikifyStatic(tiddlerText);
var HTML = '<html>\n\<head>\n' + HTMLTemplateHead + '\n</head>\n<body>\n' + HTMLTemplateBody + '\n</body>\n</html>';
HTML = HTML.format([
wikifyPlain("SiteTitle").htmlEncode(),
tiddler.title.htmlEncode(),
wiki2Web(tiddlerHTML),
tiddler.tags.join(", "),
tiddler.modifier,
tiddler.modified.toLocaleString(),
tiddler.created.toLocaleString(),
tiddlerText
]);
//saveFile(PublishFolder + tiddler.created.formatString("YYYY0MM0DD") + ".html", HTML);
saveFile(PublishFolder + tiddler.title.filenameEncode() + ".html", HTML);
indexFile += "<li><a href=\"" + tiddler.title.filenameEncode() + ".html" + "\" class=\"tiddlyLink tiddlyLinkExisting\">" + tiddler.title + "</a></li>\n";
story.closeTiddler(tiddler.title);
}
}
indexFileTemplate = '<html>\n\<head>\n' + HTMLTemplateHead + '\n</head>\n<body>\n' + indexFileTemplate + '\n</body>\n</html>';
indexFileTemplate = indexFileTemplate.format([wikifyPlain("SiteTitle").htmlEncode(), wikifyPlain("SiteSubtitle").htmlEncode(), "%2", "", "", "", (new Date()).toLocaleString()])
indexFile = indexFileTemplate.replace("%2", indexFile)
indexFile = wiki2Web(indexFile);
saveFile(PublishFolder + "index.html", indexFile)
saveFile(PublishFolder + "style.css", store.getTiddlerText("StyleSheet") + store.getTiddlerText("StyleSheetLayout") + store.getTiddlerText("StyleSheetColors"))
var indexWin = window.open("file://" + PublishFolder.replace(/\\/g, "/") + "index.html", null);
indexWin.focus();
}
function renderTemplate(html) {
var result = document.createElement("div");
result.innerHTML = html;
applyHtmlMacros(result, null);
var temp = result.innerHTML;
//result.parentNode.removeChild(result);
return temp;
}
// Convert wikified text to html
function wiki2Web(wikiHTML) {
//var regexpLinks = new RegExp("<a tiddlylink=.*?</a>", "img");
var regexpLinks = /<a[^>]+tiddlylink\s*=\s*["']?\s*?([^ "'>]*)\s*["']?[^>]*>[^<]+<\/a>/img;
var result = wikiHTML.match(regexpLinks);
if (result) {
for (i = 0; i < result.length; i++) {
var className = result[i].match(/ class="(.*?)"/i) ? result[i].match(/ class="(.*?)"/i)[1] : "";
var tiddlerName = result[i].match(/ tiddlylink="(.*?)"/i)[1];
var url = tiddlerName.htmlDecode().filenameEncode() + ".html";
var tiddlerLabel = result[i].match(/">(.*?)<\/a>/i)[1];
if (!className.match(/tiddlyLinkNonExisting/i))
wikiHTML = wikiHTML.myReplace(result[i], "<a class=\"" + className + "\" href=\"" + url + "\">" + tiddlerLabel + "</a>");
else
wikiHTML = wikiHTML.myReplace(result[i], "<a class=\"" + className + "\" title=\"Page does not exist\" href=\"#\">" + tiddlerName + "</a>");
}
wikiHTML = wikiHTML.replace(/ href="http:\/\//gi, " target=\"_blank\" href=\"http://");
}
return wikiHTML
}
function getWikiPath(folderName) {
var originalPath = document.location.toString();
if (originalPath.substr(0, 5) != 'file:') {
alert(config.messages.notFileUrlError);
if (store.tiddlerExists(config.messages.saveInstructions))
story.displayTiddler(null, config.messages.saveInstructions);
return;
}
var localPath = getLocalPath(originalPath);
var backSlash = localPath.lastIndexOf('\\') == -1 ? '/': '\\';
var dirPathPos = localPath.lastIndexOf(backSlash);
var subPath = localPath.substr(0, dirPathPos) + backSlash + (folderName ? folderName + backSlash: '');
return subPath;
}
// Replace without regex
String.prototype.myReplace = function(sea, rep) {
var t1 = this.indexOf(sea);
var t2 = parseInt(this.indexOf(sea)) + parseInt(sea.length);
var t3 = this.length;
return this.substring(0, t1) + rep + this.substring(t2, t3)
}
// Convert illegal characters to underscores
String.prototype.filenameEncode = function()
{
return (this.toLowerCase().replace(/[^a-z0-9_-]/g, "_"));
}
//}}}
<div class='viewer' id='contentWrapper'><small><a href="./publish/index.html">Home</a> > %1</small><h1>%0</h1>
<h2>%1</h2>
%2
<hr>Tags: %3
<hr>%4, %5 (created %6)
</div>
<h1>%0</h1>
<h2>%1</h2>
%2
<hr>Tags: %3
<hr>%4, %5 (created %6)
</div>
The IDL used to define the data published as the ~PublisherReport is included here for reference. This IDL resides within the ''~OpenDDS::DCPS'' module and uses types and values defined in the [[common IDL|CommonIdl]].
{{{
struct PublisherReport {
DDS::InstanceHandle_t handle;
GUID_t dp_id;
unsigned long transport_id;
GUIDSeq writers;
NVPSeq values;
};
}}}
//~OpenDDS ~Real-Time Data for Microsoft Excel// allows visualization of an operating ~OpenDDS system. This application can monitor multiple ~OpenDDS repositories at a time by subscribing to both the DDS specification defined Builtin Topics and the ~OpenDDS specific Monitor topics. Repository monitors may be simultaneously running in multiple workbooks in the same and/or separate instances of Excel. However, embedding workbooks containing repository monitors in documents, presentations, etc., is not supported due to limitations in the underlying technology. The content of the monitor tree in this application mirrors the content of the monitor tree portion of the stand-alone ~OpenDDS Monitor application. Additional features of this application include a repository monitor saved on a worksheet will automatically restart when the workbook is opened and a snapshot of a repository monitor can be taken in-place or to another location in the same workbook.
The project is in %~DDS_ROOT%\tools\excelRTD and consists of an Excel add-in and an Excel ~Real-Time Data (RTD) server. The //~OpenDDS Excel Add-in// is %~DDS_ROOT%\tools\excelRTD\~OpenDDS.xlam and contains Visual Basic for Applications (VBA) macros. The //~OpenDDS Excel RTD Server// is installed to %~DDS_ROOT%\lib\~OpenDDS_RTD(d).dll and is the interface between Excel and ~OpenDDS. It is a C++ in-process COM server. To-date, //~OpenDDS ~Real-Time Data for Excel// has only been used with a 32-bit //~OpenDDS Excel RTD Server// and 32-bit version of Excel.
To use //~OpenDDS ~Real-Time Data for Excel//, do the following:
* Make sure that the [[environment|Setup]] is setup correctly for execution.
* Make sure that the //~OpenDDS Excel RTD Server// is [[built|Building]].
* Register the //~OpenDDS Excel RTD Server//:
** This requires administrator rights and you'll get a cryptic error code if you don't normally have them. If you do a "runas" an administrator remember the environment will have to be set up again as it isn't inherited.
{{{
> regsrv32 OpenDDS_RTD(d).dll
}}}
* Start Excel
* Load the //~OpenDDS Excel Add-in//:
** Select the Office button{{img{[img[images/OfficeButton.png]]}}}
*** Select the Excel Options button
**** Select ~Add-Ins
***** Select the Go button next to "Manage: Excel Add-ins"
****** Select the Browse button
******* Browse for ~OpenDDS.xlam > Select it. It will appear on the list of available add-ins and should be checked.
* Add the IOR/Endpoint of a repository:
** On the Ribbon Bar, select the ~OpenDDS tab
*** In the Repository ~IORs/Endpoints Group, select the [Add] option, this will open an "Add Repository IOR/Endpoint" dialog
*** From "Add Repository IOR/Endpoint" dialog, select an IOR/Endpoint, either as a string or file selection or cells on the spreadsheet, accept the selection using the [Ok] pushbutton.
* Add a repository monitor:
** On the Ribbon Bar, select the ~OpenDDS tab
*** In the Repository Monitors Group, select the [Add] option, this will open an "Add Repository Monitor" dialog
*** From "Add Repository Monitor" dialog, select an IOR/Endpoint from the drop down list and a starting cell for the monitor tree and accept the selections using the [Ok] pushbutton.
* Snapshot a repository monitor:
** On the Ribbon Bar, select the ~OpenDDS tab
*** In the Repository Monitors Group, select a repository monitor in the drop down list. This is the monitor that will be used.
*** In the Repository Monitors Group, select the [Snapshot] option, this will open a "Snapshot Monitor" dialog
*** From "Snapshot Monitor" dialog, select the "Select Location" radio button (the default) to select the starting cell of the snapshot. This will result in a snapshot of the data in the monitor tree being created in another location in the spreadsheet. Or select the "In-place" radio button and the result will be the selected monitor tree will be removed and replaced with a snapshot of its data. Then accept the selections using the [Ok] pushbutton.
The IDL used to define the data published as the ~DataReaderReport and the ~DataReaderPeriodicReport is included here for reference. This IDL resides within the ''~OpenDDS::DCPS'' module and uses types and values defined in the [[common IDL|CommonIdl]].
{{{
struct DataReaderAssociation {
GUID_t dw_id;
short state;
};
typedef sequence<DataReaderAssociation> DRAssociations;
struct DataReaderReport {
GUID_t dp_id;
DDS::InstanceHandle_t sub_handle;
GUID_t dr_id;
GUID_t topic_id;
DDS::InstanceHandleSeq instances;
DRAssociations associations;
NVPSeq values;
};
struct DataReaderAssociationPeriodic {
GUID_t dw_id;
unsigned long samples_available;
// Stats latency_stats;
};
typedef sequence<DataReaderAssociationPeriodic> DRAssociationsPeriodic;
struct DataReaderPeriodicReport {
GUID_t dr_id;
DRAssociationsPeriodic associations;
NVPSeq values;
};
}}}
The IDL used to define the data published as the ~ServiceParticipantReport is included here for reference. This IDL resides within the ''~OpenDDS::DCPS'' module and uses types and values defined in the [[common IDL|CommonIdl]].
{{{
struct ServiceParticipantReport {
string host;
long pid;
GUIDSeq domain_participants;
ULongSeq transports;
NVPSeq values;
};
}}}
Establishing the environment for building and executing the //~OpenDDS Excel ~Real-Time Data (RTD) Server// consists of setting specific environment variables. The environment required to use the server is a subset of the environment required to build it.
!Build Environment
The build environment includes the environment needed to build the ACE+TAO+~OpenDDS libraries as well as the additional environment needed to build the //~OpenDDS Excel RTD Server// itself. The ACE+TAO+~OpenDDS build environment is described in the [[OpenDDS build instructions|http://www.opendds.org/building.html]] but is summarized below for reference.
| ACE+TAO+~OpenDDS Build Environment |c
| Variable | Status | Value | Description |
|~ACE_ROOT | Required |Must include the base directory of the ACE software installation. This is typically the ~ACE_wrappers directory where the installation was performed. |This is the base of the ACE installation and all ACE software - header files and libraries - will be located relative to this directory. |
|~TAO_ROOT | Required |Must include the base directory of the TAO software installation. This is typically the ~ACE_wrappers/TAO directory where the installation was performed. |This is the base of the TAO installation and all TAO software - header files and libraries - will be located relative to this directory. |
|~DDS_ROOT | Required |Must include the base directory of the ~OpenDDS software installation. This is typically the directory into which the ~OpenDDS installation was performed. |This is the base of the ~OpenDDS installation and all ~OpenDDS software - header files and libraries - will be located relative to this directory. |
|PATH | Required |Must include the path to the ACE and TAO command executables.<br>Must also include the path to the ~OpenDDS command executables. |This is the path searched for commands to execute. |
|~LD_LIBRARY_PATH | Required |Must include directory with ACE+TAO libraries and directory with ~OpenDDS libraries |This contains the path searched for dynamically linked libraries at compile and load time for the application. All of the libraries that will be linked at compile time must be reachable via either the standard path or be included in directories found in this path. |
In addition to the ACE+TAO+~OpenDDS build environment, additional environment variables are needed for building the //~OpenDDS Excel RTD Server//. These are described in the following table.
| //~OpenDDS Excel RTD Server// Build Environment |c
| Variable | Status | Value | Description |
|QTDIR | Required |Must contain the base of the Qt4 software installation. |This is the base of the Qt4 installation and all Qt4 software - headers and libraries - will be found relative to this directory, with the possible exception noted below for the ~QT4_INCDIR variable. |
|~QT4_INCDIR | Optional |May contain a separate directory where the Qt4 software header files are located. |Some system installations have the include files located under a separate base directory from the libraries. Setting this variable accommodates installations with this feature. |
|~QT_CFG | Optional |Determines library names for Qt. |If your Qt4 installation uses a suffix for the library names (for example, ~QtCore4.lib), set this variable to that suffix (for example, 4). |
!Execution Environment
To use the //~OpenDDS Excel RTD Server//, the following environment variables need to be set:
| //~OpenDDS Excel RTD Server// Execution Environment |c
| Variable | Status | Value | Description |
|PATH | Optional |Should include the path to the application executable. |This is the path searched for commands to execute. If this command path is not set, then a full path (relative or absolute) to the executable must be specified when starting the application. |
|~LD_LIBRARY_PATH | Required |Must include directory with ACE+TAO libraries and directory with ~OpenDDS libraries |This contains the path searched for dynamically linked libraries at load time for the application. All of the libraries that were linked at compile time must be reachable via either the standard path or be included in directories found in this path. |
<<search>><<closeAll>><<permaview>><<newTiddler>><<saveChanges>><<doPublish>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
OpenDDS ~Real-Time Data for Excel
http://www.objectcomputing.com/
{{imgcenter{[img[images/splash.jpg]]}}}
The image is a spectrogram of "~OpenDDS" being spoken aloud. There is no particular reason for using this as the splash image.
a:hover {
text-decoration: none;
}
.publishLogo {
position: relative;
background-color:[[ColorPalette::Background]];
background-image: url(images/opendds.png);
background-position: left;
background-repeat: no-repeat;
color:[[ColorPalette::SecondaryDark]];
padding: 20px 0 5px 72px;
border-bottom: 1px solid [[ColorPalette::SecondaryLight]];
}
.headerForeground {
position: relative;
background-color:[[ColorPalette::Background]];
background-image: url(images/opendds.png);
background-position: left;
background-repeat: no-repeat;
color:[[ColorPalette::SecondaryDark]];
padding: 20px 0 5px 72px;
border-bottom: 1px solid [[ColorPalette::SecondaryLight]];
}
.siteSubtitle {
position: relative;
background-color:[[ColorPalette::Background]];
background-image: url(images/sgram.png);
background-position: right;
background-repeat: no-repeat;
color:[[ColorPalette::SecondaryDark]];
padding: 20px 150px 5px 50px;
border-bottom: 1px solid [[ColorPalette::SecondaryLight]];
}
.headerForeground a {
color:[[ColorPalette::SecondaryDark]];
font-weight: bold;
}
.footer {
border-top: 1px solid [[ColorPalette::SecondaryLight]];
color:[[ColorPalette::SecondaryLight]];
margin-top: 20px;
font-size: 1.1em;
}
.siteTitle {
font-weight: bold;
}
#mainMenu {
padding: 25px 0 0 20px;
}
.toolbar {
float: right;
}
.imgcenter {
display: block;
text-align: center;
margin-left: auto;
margin-right: auto;
}
.viewer div.centeredTable table {
margin: 0 auto;
text-align: left;
}
#publishContentWrapper {margin: 0 5em 0 5em; padding: 0;}
th { border-style: inset;}
td { border-style: inset; vertical-align: top;}
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
a {color:[[ColorPalette::PrimaryMid]];}
a:hover {/*background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];*/}
a img {border:0;}
h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}
.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}
.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}
.tabSelected{color:[[ColorPalette::PrimaryDark]];
background:[[ColorPalette::TertiaryPale]];
border-left:1px solid [[ColorPalette::TertiaryLight]];
border-top:1px solid [[ColorPalette::TertiaryLight]];
border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}
#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}
.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}
.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}
#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}
.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}
.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}
.tiddler .defaultCommand {font-weight:bold;}
.shadow .title {color:[[ColorPalette::TertiaryDark]];}
.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}
.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}
.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}
.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}
.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}
.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}
.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}
.imageLink, #displayArea .imageLink {background:transparent;}
.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}
.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}
.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}
.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}
.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}
.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
The IDL used to define the data published as the ~SubscriberReport is included here for reference. This IDL resides within the ''~OpenDDS::DCPS'' module and uses types and values defined in the [[common IDL|CommonIdl]].
{{{
struct SubscriberReport {
DDS::InstanceHandle_t handle;
GUID_t dp_id;
unsigned long transport_id;
GUIDSeq readers;
NVPSeq values;
};
}}}
The Builtin Topic data IDL for subscriptions is included here for reference. Subscription data includes Quality of Service policy values for both the Subscriber and the ~DataReader Entities that comprise the subscription.
{{{
struct SubscriptionBuiltinTopicData {
BuiltinTopicKey_t key;
BuiltinTopicKey_t participant_key;
string topic_name;
string type_name;
DurabilityQosPolicy durability;
DeadlineQosPolicy deadline;
LatencyBudgetQosPolicy latency_budget;
LivelinessQosPolicy liveliness;
ReliabilityQosPolicy reliability;
OwnershipQosPolicy ownership;
DestinationOrderQosPolicy destination_order;
UserDataQosPolicy user_data;
TimeBasedFilterQosPolicy time_based_filter;
PresentationQosPolicy presentation;
PartitionQosPolicy partition;
TopicDataQosPolicy topic_data;
GroupDataQosPolicy group_data;
};
}}}
The Builtin Topic data IDL for topics is included here for reference.
{{{
struct TopicBuiltinTopicData {
BuiltinTopicKey_t key;
string name;
string type_name;
DurabilityQosPolicy durability;
DurabilityServiceQosPolicy durability_service;
DeadlineQosPolicy deadline;
LatencyBudgetQosPolicy latency_budget;
LivelinessQosPolicy liveliness;
ReliabilityQosPolicy reliability;
TransportPriorityQosPolicy transport_priority;
LifespanQosPolicy lifespan;
DestinationOrderQosPolicy destination_order;
HistoryQosPolicy history;
ResourceLimitsQosPolicy resource_limits;
OwnershipQosPolicy ownership;
TopicDataQosPolicy topic_data;
};
}}}
The IDL used to define the data published as the ~TopicReport is included here for reference. This IDL resides within the ''~OpenDDS::DCPS'' module and uses types and values defined in the [[common IDL|CommonIdl]].
{{{
struct TopicReport {
GUID_t dp_id;
GUID_t topic_id;
string topic_name;
string type_name;
NVPSeq values;
};
}}}
The IDL used to define the data published as the ~TransportReport is included here for reference. This IDL resides within the ''~OpenDDS::DCPS'' module and uses types and values defined in the [[common IDL|CommonIdl]].
{{{
struct TransportReport {
string host;
long pid;
unsigned long transport_id;
string transport_type;
NVPSeq values;
};
}}}
The IDL used to define the data published as the ~DataWriterReport and the ~DataWriterPeriodicReport is included here for reference. This IDL resides within the ''~OpenDDS::DCPS'' module and uses types and values defined in the [[common IDL|CommonIdl]].
{{{
struct DataWriterAssociation {
GUID_t dr_id;
};
typedef sequence<DataWriterAssociation> DWAssociations;
struct DataWriterReport {
GUID_t dp_id;
DDS::InstanceHandle_t pub_handle;
GUID_t dw_id;
GUID_t topic_id;
DDS::InstanceHandleSeq instances;
DWAssociations associations;
NVPSeq values;
};
struct DataWriterAssociationPeriodic {
GUID_t dr_id;
unsigned long sequence_number;
};
typedef sequence<DataWriterAssociationPeriodic> DWAssociationsPeriodic;
struct DataWriterPeriodicReport {
GUID_t dw_id;
unsigned long data_dropped_count;
unsigned long data_delivered_count;
unsigned long control_dropped_count;
unsigned long control_delivered_count;
DWAssociationsPeriodic associations;
NVPSeq values;
};
}}}