|
|
|
|
@@ -37,7 +37,7 @@
|
|
|
|
|
<h1>EPICS ntCPP</h1>
|
|
|
|
|
<!-- Maturity: Working Draft or Request for Comments, or Recommendation, and date. -->
|
|
|
|
|
|
|
|
|
|
<h2 class="nocount">EPICS v4 Working Group, Working Draft, 01-Oct-2014</h2>
|
|
|
|
|
<h2 class="nocount">EPICS v4 Working Group, Working Draft, 09-Oct-2014</h2>
|
|
|
|
|
|
|
|
|
|
<dl>
|
|
|
|
|
<dt>Latest version:</dt>
|
|
|
|
|
@@ -80,7 +80,7 @@ V4 control system programming environment:<br />
|
|
|
|
|
|
|
|
|
|
<h2 class="nocount">Status of this Document</h2>
|
|
|
|
|
|
|
|
|
|
<p>This is the 01-Oct-2014 version of the C++ implementation of pvData.
|
|
|
|
|
<p>This is the 09-Oct-2014 version of the C++ implementation of pvData.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -112,9 +112,9 @@ pvDataCPP.html
|
|
|
|
|
<dt>NTScalarArray</dt>
|
|
|
|
|
<dd>This has a value field that has type scalarArray</dd>
|
|
|
|
|
<dt>NTNameValue</dt>
|
|
|
|
|
<dd>This has a field names that is a string array
|
|
|
|
|
and a field values that has type scalarArray.
|
|
|
|
|
Each names[i] is associated with values[i].
|
|
|
|
|
<dd>This has a field name that is a string array
|
|
|
|
|
and a field value that has type scalarArray.
|
|
|
|
|
Each name[i] is associated with value[i].
|
|
|
|
|
</dd>
|
|
|
|
|
<dt>NTTable</dt>
|
|
|
|
|
<dd>This has a string array field named labels
|
|
|
|
|
@@ -196,11 +196,11 @@ public:
|
|
|
|
|
<dt>createEnumerated</dt>
|
|
|
|
|
<dd>Create an introspection interface for an enumerated structure.</dd>
|
|
|
|
|
<dt>createTimeStamp</dt>
|
|
|
|
|
<dd>Create an interspection interface for a timeStamp structure.</dd>
|
|
|
|
|
<dd>Create an introspection interface for a timeStamp structure.</dd>
|
|
|
|
|
<dt>createAlarm</dt>
|
|
|
|
|
<dd>Create an interspection interface for an alarm structure.</dd>
|
|
|
|
|
<dd>Create an introspection interface for an alarm structure.</dd>
|
|
|
|
|
<dt>createDisplay</dt>
|
|
|
|
|
<dd>Create an introsepecion interface for a display structure.</dd>
|
|
|
|
|
<dd>Create an introspection interface for a display structure.</dd>
|
|
|
|
|
<dt>createControl</dt>
|
|
|
|
|
<dd>Create an introspection interface for a control structure.</dd>
|
|
|
|
|
<dt>createEnumeratedArray</dt>
|
|
|
|
|
@@ -216,7 +216,7 @@ public:
|
|
|
|
|
<h2>Property Field Definitions</h2>
|
|
|
|
|
<h3>Definition: value</h3>
|
|
|
|
|
<p>Often a property field is associated with another field.
|
|
|
|
|
This other field is refered to as the value field.
|
|
|
|
|
This other field is referred to as the value field.
|
|
|
|
|
Usually the value field will have the field name "value".
|
|
|
|
|
An example is:</p>
|
|
|
|
|
<pre>
|
|
|
|
|
@@ -233,9 +233,11 @@ to report problems to the client.
|
|
|
|
|
An alarm attached to a substructure of the top level structure is normally
|
|
|
|
|
associated with a value field.
|
|
|
|
|
An alarm field attached to the top level structure can be used for either:
|
|
|
|
|
</p>
|
|
|
|
|
<ol>
|
|
|
|
|
<li>If the top level structure has a value field then it is an alarm
|
|
|
|
|
for that field.
|
|
|
|
|
</li>
|
|
|
|
|
<li>To report other problems to the client.</li>
|
|
|
|
|
</ol>
|
|
|
|
|
<p>If alarms do appear at multiple levels then an alarm is always
|
|
|
|
|
@@ -269,7 +271,7 @@ structure alarm
|
|
|
|
|
string message
|
|
|
|
|
</pre>
|
|
|
|
|
<p>Clients and Servers should use <b>alarm.h</b> and <b>pvAlarm.h</b> which are
|
|
|
|
|
provided by pvDataCPP intead of directly using the alarm structure itself.
|
|
|
|
|
provided by pvDataCPP instead of directly using the alarm structure itself.
|
|
|
|
|
In particular severity and status are defined as:</p>
|
|
|
|
|
<pre>
|
|
|
|
|
enum AlarmSeverity {
|
|
|
|
|
@@ -288,9 +290,11 @@ There can be multiple timeStamp fields.
|
|
|
|
|
A timeStamp associated with a substructure is usually associated with
|
|
|
|
|
a value field.
|
|
|
|
|
An timeStamp field attached to the top level structure can be used for either:
|
|
|
|
|
</p>
|
|
|
|
|
<ol>
|
|
|
|
|
<li>If the top level structure has a value field then it can be the
|
|
|
|
|
timeStamp for that field.
|
|
|
|
|
</li>
|
|
|
|
|
<li>The time when the server executed.</li>
|
|
|
|
|
</ol>
|
|
|
|
|
<p>NTNDArray is an example that has two top level timeStamp field with different
|
|
|
|
|
@@ -304,7 +308,7 @@ structure timeStamp
|
|
|
|
|
int userTag
|
|
|
|
|
</pre>
|
|
|
|
|
<p>Clients and Servers should use <b>timeStamp.h</b> and <b>pvTimeStamp.h</b>
|
|
|
|
|
which are provided by pvDataCPP intead of directly using the timeStamp structure itself.
|
|
|
|
|
which are provided by pvDataCPP instead of directly using the timeStamp structure itself.
|
|
|
|
|
Note that <b>timeStamp.h</b> provides many methods for manipulating time.
|
|
|
|
|
</p>
|
|
|
|
|
<p>The meaning of the fields is:</p>
|
|
|
|
|
@@ -326,7 +330,7 @@ structure control
|
|
|
|
|
double minStep
|
|
|
|
|
</pre>
|
|
|
|
|
<p>Servers should use <b>control.h</b> and <b>pvControl.h</b> which are
|
|
|
|
|
provided by pvDataCPP intead of directly using the control structure itself.
|
|
|
|
|
provided by pvDataCPP instead of directly using the control structure itself.
|
|
|
|
|
Note that <b>control.h</b> provides many methods for manipulating time.
|
|
|
|
|
</p>
|
|
|
|
|
<h3>display</h3>
|
|
|
|
|
@@ -369,7 +373,7 @@ structure
|
|
|
|
|
</pre>
|
|
|
|
|
<p><b>NOTE:</b> NTField, described above, has support for checking to see if
|
|
|
|
|
a structure is an alarmLimit structure but no other support for alarmLimit.</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
PVData has support named <b>valueAlarm</b> instead of <b>alarmLimit</b>
|
|
|
|
|
(alarmLimit is identical to valueAlarm for type double).
|
|
|
|
|
For numeric types the field names are the same but the type
|
|
|
|
|
@@ -394,8 +398,9 @@ PVData can be used to generate a valueAlarm field as an extra field.
|
|
|
|
|
<dd>The introspection instance for the data structure associated with the type.</dd>
|
|
|
|
|
<dt>PVStructure</dt>
|
|
|
|
|
<dd>The data instance for the data structure associated with the type.</dd>
|
|
|
|
|
<dt>NTXXX</dt>
|
|
|
|
|
<dt>NTType</dt>
|
|
|
|
|
<dd>The instance for the NT type.
|
|
|
|
|
For example <b>NTScalar</b>
|
|
|
|
|
</dd>
|
|
|
|
|
</dl>
|
|
|
|
|
<p>Each bulder also has a number of additional methods for optional fields
|
|
|
|
|
@@ -417,7 +422,7 @@ This has methods to do the following:</p>
|
|
|
|
|
<h2>Normative Type NTScalar</h2>
|
|
|
|
|
<p>This has the following fields:</p>
|
|
|
|
|
<pre>
|
|
|
|
|
ev4:nt/NTScalar:1.0
|
|
|
|
|
epics:nt/NTScalar:1.0
|
|
|
|
|
double value // mandatory and can be any numeric type
|
|
|
|
|
string descriptor // optional
|
|
|
|
|
alarm_t alarm // optional
|
|
|
|
|
@@ -494,13 +499,13 @@ where
|
|
|
|
|
a unique name that is not the name of any mandatory or possible optional field.</dd>
|
|
|
|
|
</dl>
|
|
|
|
|
<p>An NTScalaBuilder can be used to create multiple PVStructure and/or NTScalar instances.
|
|
|
|
|
Each time createPVScalar is called it clears all interval data after the PVStructure
|
|
|
|
|
Each time createPVScalar is called it clears all internal data after the PVStructure
|
|
|
|
|
is created.</p>
|
|
|
|
|
<h4>NTScalarBuilder Examples</h4>
|
|
|
|
|
<p>An example of creating an NTScalar instance is:</p>
|
|
|
|
|
<pre>
|
|
|
|
|
NTScalarBuilderPtr builder = NTScalar::createBuilder();
|
|
|
|
|
NTScalarPtr ntScalar = builder->
|
|
|
|
|
NTScalarPtr ntScalar = builder->
|
|
|
|
|
value(pvInt)->
|
|
|
|
|
addDescriptor()->
|
|
|
|
|
addAlarm()->
|
|
|
|
|
@@ -525,7 +530,7 @@ NTScalarPtr ntScalar = builder->create();
|
|
|
|
|
<p><b>ntscalar.h</b> defines the following:</p>
|
|
|
|
|
<pre>
|
|
|
|
|
class NTScalar;
|
|
|
|
|
typedef std::tr1::shared_ptr<NTScalar> NTScalarPtr;
|
|
|
|
|
typedef std::tr1::shared_ptr<NTScalar> NTScalarPtr;
|
|
|
|
|
|
|
|
|
|
class NTScalar
|
|
|
|
|
{
|
|
|
|
|
@@ -549,7 +554,7 @@ public:
|
|
|
|
|
PVStructurePtr getControl() const;
|
|
|
|
|
PVFieldPtr getValue() const;
|
|
|
|
|
template<typename PVT>
|
|
|
|
|
std::tr1::shared_ptr<PV> getValue() const
|
|
|
|
|
std::tr1::shared_ptr<PVT> getValue() const
|
|
|
|
|
private:
|
|
|
|
|
}
|
|
|
|
|
</pre>
|
|
|
|
|
@@ -557,12 +562,13 @@ where
|
|
|
|
|
<dl>
|
|
|
|
|
<dt>wrap</dt>
|
|
|
|
|
<dd>Given a pvStructure this creates an NTScalar that warps it.
|
|
|
|
|
It calls <b>isCompatible</b> returns a null PVScalar if <b>isCompatible</b> returns false.
|
|
|
|
|
<br \>
|
|
|
|
|
It calls <b>isCompatible</b>.
|
|
|
|
|
It returns a null PVScalar if <b>isCompatible</b> returns false.
|
|
|
|
|
<br />
|
|
|
|
|
The primary use of wrap is by pvAccess client code.
|
|
|
|
|
The server creates a pvStructure that is valid for an NTScalar
|
|
|
|
|
and passes it to the client.
|
|
|
|
|
The client can call wrap to create an NTScalar for it;s own use.
|
|
|
|
|
The client can call wrap to create an NTScalar for it's own use.
|
|
|
|
|
An example is:
|
|
|
|
|
<pre>
|
|
|
|
|
void myCallback(PVStructurePtr const & pvStructure)
|
|
|
|
|
@@ -574,7 +580,7 @@ void myCallback(PVStructurePtr const & pvStructure)
|
|
|
|
|
...
|
|
|
|
|
}
|
|
|
|
|
</pre>
|
|
|
|
|
<dd>
|
|
|
|
|
</dd>
|
|
|
|
|
<dt>wrapUnsafe</dt>
|
|
|
|
|
<dd>Given a pvStructure this creates an NTScalar that warps it.
|
|
|
|
|
It does not check that the introspection interface is compatible.
|
|
|
|
|
@@ -596,11 +602,11 @@ An example is:
|
|
|
|
|
PVTimeStamp pvTimeStamp;
|
|
|
|
|
TimeStamp timeStamp;
|
|
|
|
|
|
|
|
|
|
ntscalar-&attachTimeStamp(pvTimeStamp);
|
|
|
|
|
ntscalar->attachTimeStamp(pvTimeStamp);
|
|
|
|
|
pvTimeStamp.get(timeStamp);
|
|
|
|
|
TimeStamp current;
|
|
|
|
|
current.getCurrent();
|
|
|
|
|
double diff = TimeStamp::diff(timeStamp,current); // timeStamp = current
|
|
|
|
|
double diff = TimeStamp::diff(timeStamp,current); // timeStamp - current
|
|
|
|
|
</pre>
|
|
|
|
|
</dd>
|
|
|
|
|
<dt>attachAlarm</dt>
|
|
|
|
|
@@ -613,7 +619,7 @@ An example is:
|
|
|
|
|
PVAlarm pvAlarm;
|
|
|
|
|
Alarm alarm;
|
|
|
|
|
|
|
|
|
|
ntscalar-&attachAlarm(pvAlarm);
|
|
|
|
|
ntscalar->attachAlarm(pvAlarm);
|
|
|
|
|
pvAlarm.get(alarm);
|
|
|
|
|
int severity = alarm.getSeverity();
|
|
|
|
|
int status = alarm.getStatus();
|
|
|
|
|
@@ -656,11 +662,11 @@ string message = alarm.getMessage();
|
|
|
|
|
<dd>Returns the value field.</dd>
|
|
|
|
|
</dl>
|
|
|
|
|
<h2>Normative Type NTScalarArray</h2>
|
|
|
|
|
<p>This class is similar to <b>NTScalarArray</b> except that the value
|
|
|
|
|
<p>This class is similar to <b>NTScalar</b> except that the value
|
|
|
|
|
field is a scalar array field instead of just a scalar.</p>
|
|
|
|
|
<p>This has the following fields:</p>
|
|
|
|
|
<pre>
|
|
|
|
|
ev4:nt/NTScalarArray:1.0
|
|
|
|
|
epics:nt/NTScalarArray:1.0
|
|
|
|
|
double[] value // mandatory and can be any numeric type
|
|
|
|
|
string descriptor // optional
|
|
|
|
|
alarm_t alarm // optional
|
|
|
|
|
@@ -711,7 +717,7 @@ private:
|
|
|
|
|
</pre>
|
|
|
|
|
where
|
|
|
|
|
<dl>
|
|
|
|
|
<dt>value</dt>
|
|
|
|
|
<dt>arrayValue</dt>
|
|
|
|
|
<dd>This determines the element type for the value field.
|
|
|
|
|
This must be specified or createStructure will throw an exception.</dd>
|
|
|
|
|
<dt>addDescriptor</dt>
|
|
|
|
|
@@ -738,7 +744,7 @@ where
|
|
|
|
|
<p><b>ntscalarArray.h</b> defines the following:</p>
|
|
|
|
|
<pre>
|
|
|
|
|
class NTScalarArray;
|
|
|
|
|
typedef std::tr1::shared_ptr<NTScalarArray> NTScalarArrayPtr;
|
|
|
|
|
typedef std::tr1::shared_ptr<NTScalarArray> NTScalarArrayPtr;
|
|
|
|
|
|
|
|
|
|
class NTScalarArray
|
|
|
|
|
{
|
|
|
|
|
@@ -771,7 +777,7 @@ where
|
|
|
|
|
<dt>wrap</dt>
|
|
|
|
|
<dd>Given a pvStructure this creates an NTScalarArray that warps it.
|
|
|
|
|
It calls <b>isCompatible</b> returns a null PVScalarArray if <b>isCompatible</b> returns false.
|
|
|
|
|
<dd>
|
|
|
|
|
</dd>
|
|
|
|
|
<dt>wrapUnsafe</dt>
|
|
|
|
|
<dd>Given a pvStructure this creates an NTScalarArray that warps it.
|
|
|
|
|
It does not check that the introspection interface is compatible.
|
|
|
|
|
@@ -832,9 +838,9 @@ where
|
|
|
|
|
|
|
|
|
|
<h2>Normative Type NTNameValue</h2>
|
|
|
|
|
<pre>
|
|
|
|
|
ev4:nt/NTNameValue:1.0
|
|
|
|
|
string[] names // mandatory
|
|
|
|
|
double[] values // madatory, can be any type, must be same length as names
|
|
|
|
|
epics:nt/NTNameValue:1.0
|
|
|
|
|
string[] name // mandatory
|
|
|
|
|
double[] value // madatory, can be any type, must be same length as name
|
|
|
|
|
string descriptor // optional
|
|
|
|
|
alarm_t alarm // optional
|
|
|
|
|
int severity
|
|
|
|
|
@@ -896,7 +902,7 @@ where
|
|
|
|
|
<h3>NTNameValue</h3>
|
|
|
|
|
<pre>
|
|
|
|
|
class NTNameValue;
|
|
|
|
|
typedef std::tr1::shared_ptr<NTNameValue> NTNameValuePtr;
|
|
|
|
|
typedef std::tr1::shared_ptr<NTNameValue> NTNameValuePtr;
|
|
|
|
|
|
|
|
|
|
class NTNameValue
|
|
|
|
|
{
|
|
|
|
|
@@ -911,11 +917,12 @@ public:
|
|
|
|
|
|
|
|
|
|
bool attachTimeStamp(PVTimeStamp &pvTimeStamp) const;
|
|
|
|
|
bool attachAlarm(PVAlarm &pvAlarm) const;
|
|
|
|
|
PVStringPtr getDescriptor() const;
|
|
|
|
|
PVStructurePtr getPVStructure() const;
|
|
|
|
|
PVStructurePtr getTimeStamp() const;
|
|
|
|
|
PVStructurePtr getAlarm() const;
|
|
|
|
|
PVStringArrayPtr getNames() const;
|
|
|
|
|
PVFieldPtr getValues() const;
|
|
|
|
|
PVStringArrayPtr getName() const;
|
|
|
|
|
PVFieldPtr getValue() const;
|
|
|
|
|
template<typename PVT>
|
|
|
|
|
std::tr1::shared_ptr<PV> getValue() const
|
|
|
|
|
private:
|
|
|
|
|
@@ -926,7 +933,7 @@ where
|
|
|
|
|
<dt>wrap</dt>
|
|
|
|
|
<dd>Given a pvStructure this creates an NTNameValue that warps it.
|
|
|
|
|
It calls <b>isCompatible</b> returns a null NTNameValue if <b>isCompatible</b> returns false.
|
|
|
|
|
<dd>
|
|
|
|
|
</dd>
|
|
|
|
|
<dt>wrapUnsafe</dt>
|
|
|
|
|
<dd>Given a pvStructure this creates an NTNameValue that warps it.
|
|
|
|
|
It does not check that the introspection interface is compatible.
|
|
|
|
|
@@ -963,15 +970,15 @@ where
|
|
|
|
|
If the alarm was not selected as an optional field
|
|
|
|
|
a null pvStructure is returned.
|
|
|
|
|
</dd>
|
|
|
|
|
<dt>getNames</dt>
|
|
|
|
|
<dd>Returns field names.</dd>
|
|
|
|
|
<dt>getValues</dt>
|
|
|
|
|
<dd>Returns field values.</dd>
|
|
|
|
|
<dt>getName</dt>
|
|
|
|
|
<dd>Returns field name.</dd>
|
|
|
|
|
<dt>getValue</dt>
|
|
|
|
|
<dd>Returns field value.</dd>
|
|
|
|
|
</dl>
|
|
|
|
|
|
|
|
|
|
<h2>Normative Type NTTable</h2>
|
|
|
|
|
<pre>
|
|
|
|
|
ev4:nt/NTTable:1.0
|
|
|
|
|
epics:nt/NTTable:1.0
|
|
|
|
|
string[] labels [column0,column1,column2] // mandatory
|
|
|
|
|
structure value // mandatory;
|
|
|
|
|
double[] column0 [] // name=labels[0]; can be any scalar type
|
|
|
|
|
@@ -1035,7 +1042,7 @@ where
|
|
|
|
|
<h3>NTTable</h3>
|
|
|
|
|
<pre>
|
|
|
|
|
class NTTable;
|
|
|
|
|
typedef std::tr1::shared_ptr<NTTable> NTTablePtr;
|
|
|
|
|
typedef std::tr1::shared_ptr<NTTable> NTTablePtr;
|
|
|
|
|
|
|
|
|
|
class NTTable
|
|
|
|
|
{
|
|
|
|
|
@@ -1066,7 +1073,7 @@ where
|
|
|
|
|
<dt>wrap</dt>
|
|
|
|
|
<dd>Given a pvStructure this creates an NTTable that warps it.
|
|
|
|
|
It calls <b>isCompatible</b> returns a null NTTable if <b>isCompatible</b> returns false.
|
|
|
|
|
<dd>
|
|
|
|
|
</dd>
|
|
|
|
|
<dt>wrapUnsafe</dt>
|
|
|
|
|
<dd>Given a pvStructure this creates an NTTable that warps it.
|
|
|
|
|
It does not check that the introspection interface is compatible.
|
|
|
|
|
@@ -1189,7 +1196,7 @@ where
|
|
|
|
|
<h3>NTMultiChannel</h3>
|
|
|
|
|
<pre>
|
|
|
|
|
class NTMultiChannel;
|
|
|
|
|
typedef std::tr1::shared_ptr<NTMultiChannel> NTMultiChannelPtr;
|
|
|
|
|
typedef std::tr1::shared_ptr<NTMultiChannel> NTMultiChannelPtr;
|
|
|
|
|
|
|
|
|
|
class NTMultiChannel
|
|
|
|
|
{
|
|
|
|
|
@@ -1204,6 +1211,7 @@ public:
|
|
|
|
|
|
|
|
|
|
bool attachTimeStamp(PVTimeStamp &pvTimeStamp) const;
|
|
|
|
|
bool attachAlarm(PVAlarm &pvAlarm) const;
|
|
|
|
|
PVStringPtr getDescriptor() const;
|
|
|
|
|
PVStructurePtr getPVStructure() const;
|
|
|
|
|
PVStructurePtr getTimeStamp() const;
|
|
|
|
|
PVStructurePtr getAlarm() const;
|
|
|
|
|
@@ -1216,9 +1224,6 @@ public:
|
|
|
|
|
PVLongArrayPtr getSecondsPastEpoch() const;
|
|
|
|
|
PVIntArrayPtr getNanoseconds() const;
|
|
|
|
|
PVIntArrayPtr getUserTag() const;
|
|
|
|
|
PVStringPtr getDescriptor() const;
|
|
|
|
|
template<typename PVT>
|
|
|
|
|
std::tr1::shared_ptr<PV> getValue() const
|
|
|
|
|
private:
|
|
|
|
|
}
|
|
|
|
|
</pre>
|
|
|
|
|
@@ -1227,7 +1232,7 @@ where
|
|
|
|
|
<dt>wrap</dt>
|
|
|
|
|
<dd>Given a pvStructure this creates an NTMultiChannel that warps it.
|
|
|
|
|
It calls <b>isCompatible</b> returns a null NTMultiChannel if <b>isCompatible</b> returns false.
|
|
|
|
|
<dd>
|
|
|
|
|
</dd>
|
|
|
|
|
<dt>wrapUnsafe</dt>
|
|
|
|
|
<dd>Given a pvStructure this creates an NTMultiChannel that warps it.
|
|
|
|
|
It does not check that the introspection interface is compatible.
|
|
|
|
|
@@ -1286,13 +1291,13 @@ where
|
|
|
|
|
|
|
|
|
|
<h2>Normative Type NTNDArray</h2>
|
|
|
|
|
<pre>
|
|
|
|
|
ev4:nt/NTNDArray:1.0
|
|
|
|
|
epics:nt/NTNDArray:1.0
|
|
|
|
|
union value //mandatory
|
|
|
|
|
long compressedSize //mandatory
|
|
|
|
|
long uncompressedSize //mandatory
|
|
|
|
|
codec_t codec //mandatory
|
|
|
|
|
string name
|
|
|
|
|
any parameters
|
|
|
|
|
long compressedSize //mandatory
|
|
|
|
|
long uncompressedSize //mandatory
|
|
|
|
|
dimension_t[] dimension //mandatory
|
|
|
|
|
dimension_t[]
|
|
|
|
|
dimension_t
|
|
|
|
|
@@ -1306,9 +1311,9 @@ ev4:nt/NTNDArray:1.0
|
|
|
|
|
long secondsPastEpoch
|
|
|
|
|
int nanoseconds
|
|
|
|
|
int userTag
|
|
|
|
|
ev4:nt/NTAttribute:1.0[] attribute //mandatory
|
|
|
|
|
ev4:nt/NTAttribute:1.0[]
|
|
|
|
|
ev4:nt/NTAttribute:1.0
|
|
|
|
|
epics:nt/NTAttribute:1.0[] attribute //mandatory
|
|
|
|
|
epics:nt/NTAttribute:1.0[]
|
|
|
|
|
epics:nt/NTAttribute:1.0
|
|
|
|
|
string name
|
|
|
|
|
any value
|
|
|
|
|
string description
|
|
|
|
|
@@ -1377,7 +1382,7 @@ where
|
|
|
|
|
<h3>NTNDArray</h3>
|
|
|
|
|
<pre>
|
|
|
|
|
class NTNDArray;
|
|
|
|
|
typedef std::tr1::shared_ptr<NTNDArray> NTNDArrayPtr;
|
|
|
|
|
typedef std::tr1::shared_ptr<NTNDArray> NTNDArrayPtr;
|
|
|
|
|
|
|
|
|
|
class NTNDArray
|
|
|
|
|
{
|
|
|
|
|
@@ -1390,20 +1395,21 @@ public:
|
|
|
|
|
static bool isComparible(PVStructurePtr const &pvStructure);
|
|
|
|
|
static NTNDArrayBuilderPtr createBuilder();
|
|
|
|
|
|
|
|
|
|
PVStringPtr getDescriptor() const;
|
|
|
|
|
bool attachTimeStamp(PVTimeStamp &pvTimeStamp) const;
|
|
|
|
|
bool attachDataTimeStamp(PVTimeStamp &pvTimeStamp) const;
|
|
|
|
|
bool attachAlarm(PVAlarm &pvAlarm) const;
|
|
|
|
|
PVStructurePtr getPVStructure() const;
|
|
|
|
|
PVUnionPtr getValue() const;
|
|
|
|
|
PVStructurePtr getCodec() const;
|
|
|
|
|
PVLongPtr getCompressedDataSize() const;
|
|
|
|
|
PVLongPtr getUncompressedDataSize() const;
|
|
|
|
|
PVStructurePtr getCodec() const;
|
|
|
|
|
PVStructureArrayPtr getAttribute() const;
|
|
|
|
|
PVStructureArrayPtr getDimension() const;
|
|
|
|
|
PVIntPtr getUniqueId() const;
|
|
|
|
|
PVStructurePtr getTimeStamp() const;
|
|
|
|
|
PVStructurePtr getDataTimeStamp() const;
|
|
|
|
|
PVStringPtr getDescriptor() const;
|
|
|
|
|
PVStructurePtr getTimeStamp() const;
|
|
|
|
|
PVStructurePtr getAlarm() const;
|
|
|
|
|
PVStructurePtr getDisplay() const;
|
|
|
|
|
private:
|
|
|
|
|
@@ -1414,7 +1420,7 @@ where
|
|
|
|
|
<dt>wrap</dt>
|
|
|
|
|
<dd>Given a pvStructure this creates an NTNDArray that warps it.
|
|
|
|
|
It calls <b>isCompatible</b> returns a null NTNDArray if <b>isCompatible</b> returns false.
|
|
|
|
|
<dd>
|
|
|
|
|
</dd>
|
|
|
|
|
<dt>wrapUnsafe</dt>
|
|
|
|
|
<dd>Given a pvStructure this creates an NTNDArray that warps it.
|
|
|
|
|
It does not check that the introspection interface is compatible.
|
|
|
|
|
@@ -1442,6 +1448,23 @@ where
|
|
|
|
|
</dd>
|
|
|
|
|
<dt>getPVStructure</dt>
|
|
|
|
|
<dd>Returns the pvStructure that NTNDArray wraps.</dd>
|
|
|
|
|
<dt>getValue</dt>
|
|
|
|
|
<dd>Returns the value field.</dd>
|
|
|
|
|
<dt>getCodec</dt>
|
|
|
|
|
<dd>Returns the severity of each channel.</dd>
|
|
|
|
|
<dt>getCompressedDataSize</dt>
|
|
|
|
|
<dd>Returns the name of each channel.</dd>
|
|
|
|
|
<dt>getUncompressedDataSize</dt>
|
|
|
|
|
<dd>Returns connection state of each channel.</dd>
|
|
|
|
|
<dt>getAttribute</dt>
|
|
|
|
|
<dd>Returns the status of each channel.</dd>
|
|
|
|
|
<dt>getDimension</dt>
|
|
|
|
|
<dd>Returns the message of each channel.</dd>
|
|
|
|
|
<dt>getUniqueId</dt>
|
|
|
|
|
<dd>Returns the secondsPastEpoch of each channel.</dd>
|
|
|
|
|
<dt>getDataTimeStamp</dt>
|
|
|
|
|
<dd>Returns the data timeStamp.
|
|
|
|
|
</dd>
|
|
|
|
|
<dt>getDescriptor</dt>
|
|
|
|
|
<dd>Get the descriptor.</dd>
|
|
|
|
|
<dt>getTimeStamp</dt>
|
|
|
|
|
@@ -1459,20 +1482,6 @@ where
|
|
|
|
|
If the display was not selected as an optional field
|
|
|
|
|
a null pvStructure is returned.
|
|
|
|
|
</dd>
|
|
|
|
|
<dt>getValue</dt>
|
|
|
|
|
<dd>Returns the value field.</dd>
|
|
|
|
|
<dt>getCompressedDataSize</dt>
|
|
|
|
|
<dd>Returns the name of each channel.</dd>
|
|
|
|
|
<dt>getUncompressedDataSize</dt>
|
|
|
|
|
<dd>Returns connection state of each channel.</dd>
|
|
|
|
|
<dt>getCodec</dt>
|
|
|
|
|
<dd>Returns the severity of each channel.</dd>
|
|
|
|
|
<dt>getAttribute</dt>
|
|
|
|
|
<dd>Returns the status of each channel.</dd>
|
|
|
|
|
<dt>getDimension</dt>
|
|
|
|
|
<dd>Returns the message of each channel.</dd>
|
|
|
|
|
<dt>getUniqueId</dt>
|
|
|
|
|
<dd>Returns the secondsPastEpoch of each channel.</dd>
|
|
|
|
|
</dl>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|