This is Unofficial EPICS BASE Doxygen Site
epics::pvaClient::PvaClientNTMultiData Class Reference

Provides NTMultiChannel data for both PvaClientNTMultiGet and PvaClientNTMultiMonitor. More...

#include "pvaClientMultiChannel.h"

+ Inheritance diagram for epics::pvaClient::PvaClientNTMultiData:
+ Collaboration diagram for epics::pvaClient::PvaClientNTMultiData:

Public Member Functions

 POINTER_DEFINITIONS (PvaClientNTMultiData)
 
 ~PvaClientNTMultiData ()
 
size_t getNumber ()
 Get the number of channels. More...
 
void startDeltaTime ()
 Set the timeStamp base for computing deltaTimes. More...
 
void endDeltaTime (bool valueOnly=true)
 Update NTMultiChannel fields. More...
 
epics::pvData::TimeStamp getTimeStamp ()
 Get the time when the last get was made. More...
 
epics::nt::NTMultiChannelPtr getNTMultiChannel ()
 Get the NTMultiChannel. More...
 
PvaClientNTMultiDataPtr getPtrSelf ()
 Get the shared pointer to self. More...
 

Static Public Member Functions

static PvaClientNTMultiDataPtr create (epics::pvData::UnionConstPtr const &u, PvaClientMultiChannelPtr const &pvaClientMultiChannel, PvaClientChannelArray const &pvaClientChannelArray, epics::pvData::PVStructurePtr const &pvRequest)
 Create a PvaClientNTMultiData. More...
 

Friends

class PvaClientNTMultiGet
 
class PvaClientNTMultiPut
 
class PvaClientNTMultiMonitor
 

Detailed Description

Provides NTMultiChannel data for both PvaClientNTMultiGet and PvaClientNTMultiMonitor.

Definition at line 525 of file pvaClientMultiChannel.h.

Constructor & Destructor Documentation

epics::pvaClient::PvaClientNTMultiData::~PvaClientNTMultiData ( )

Definition at line 82 of file pvaClientNTMultiData.cpp.

83 {
84  if(PvaClient::getDebug()) cout<< "PvaClientNTMultiData::~PvaClientNTMultiData()\n";
85 }
static bool getDebug()
Is debug set?
Definition: pvaClient.cpp:97

Member Function Documentation

PvaClientNTMultiDataPtr epics::pvaClient::PvaClientNTMultiData::create ( epics::pvData::UnionConstPtr const &  u,
PvaClientMultiChannelPtr const &  pvaClientMultiChannel,
PvaClientChannelArray const &  pvaClientChannelArray,
epics::pvData::PVStructurePtr const &  pvRequest 
)
static

Create a PvaClientNTMultiData.

Normally only called by PvaClientNTMultiGet and PvaClientNTMultiMonitor.

Parameters
uThe union interface for the value field of each channel.
pvaClientMultiChannelThe interface to PvaClientMultiChannel.
pvaClientChannelArrayThe PvaClientChannel array.
pvRequestThe pvRequest for each channel.

Definition at line 25 of file pvaClientNTMultiData.cpp.

30 {
32  new PvaClientNTMultiData(u,pvaMultiChannel,pvaClientChannelArray,pvRequest));
33 }
std::tr1::shared_ptr< PvaClientNTMultiData > PvaClientNTMultiDataPtr
void epics::pvaClient::PvaClientNTMultiData::endDeltaTime ( bool  valueOnly = true)

Update NTMultiChannel fields.

Parameters
valueOnlyuse only value for union.

Definition at line 124 of file pvaClientNTMultiData.cpp.

125 {
126  for(size_t i=0; i<nchannel; ++i)
127  {
128  PVStructurePtr pvst = topPVStructure[i];
129  if(!pvst) {
130  unionValue[i] = PVUnionPtr();
131  } else if(unionValue[i]) {
132  if(valueOnly) {
133  PVFieldPtr pvValue = pvst->getSubField("value");
134  if(pvValue) {
135  unionValue[i]->set(pvst->getSubField("value"));
136  } else {
137  unionValue[i] = PVUnionPtr();
138  }
139  } else {
140  unionValue[i]->set(pvst);
141  }
142  if(gotAlarm)
143  {
144  PVIntPtr pvSeverity = pvst->getSubField<PVInt>("alarm.severity");
145  PVIntPtr pvStatus = pvst->getSubField<PVInt>("alarm.status");
146  PVStringPtr pvMessage = pvst->getSubField<PVString>("alarm.message");
147  if(pvSeverity&&pvStatus&&pvMessage) {
148  severity[i] = pvSeverity->get();
149  status[i] = pvStatus->get();
150  message[i] = pvMessage->get();
151  } else {
152  severity[i] = undefinedAlarm;
154  message[i] = "no alarm field";
155  }
156  }
157  if(gotTimeStamp)
158  {
159  PVLongPtr pvEpoch = pvst->getSubField<PVLong>("timeStamp.secondsPastEpoch");
160  PVIntPtr pvNano = pvst->getSubField<PVInt>("timeStamp.nanoseconds");
161  PVIntPtr pvTag = pvst->getSubField<PVInt>("timeStamp.userTag");
162  if(pvEpoch&&pvNano&&pvTag) {
163  secondsPastEpoch[i] = pvEpoch->get();
164  nanoseconds[i] = pvNano->get();
165  userTag[i] = pvTag->get();
166  }
167  }
168  }
169  }
170 }
std::tr1::shared_ptr< PVInt > PVIntPtr
Definition: pvData.h:507
pvd::Status status
int i
Definition: scan.c:967
std::tr1::shared_ptr< PVLong > PVLongPtr
Definition: pvData.h:508
PVString is special case, since it implements SerializableArray.
Definition: pvData.h:521
std::tr1::shared_ptr< PVUnion > PVUnionPtr
Definition: pvData.h:107
std::tr1::shared_ptr< PVStructure > PVStructurePtr
Definition: pvData.h:87
std::tr1::shared_ptr< PVString > PVStringPtr
Definition: pvData.h:540
Class that holds the data for each possible scalar type.
Definition: pvData.h:54
std::tr1::shared_ptr< PVField > PVFieldPtr
Definition: pvData.h:66
NTMultiChannelPtr epics::pvaClient::PvaClientNTMultiData::getNTMultiChannel ( )

Get the NTMultiChannel.

Returns
The value.

Definition at line 178 of file pvaClientNTMultiData.cpp.

179 {
180  PVStructurePtr pvStructure = getPVDataCreate()->createPVStructure(ntMultiChannelStructure);
181  NTMultiChannelPtr ntMultiChannel = NTMultiChannel::wrap(pvStructure);
182  ntMultiChannel->getChannelName()->replace(pvaClientMultiChannel->getChannelNames());
184  for(size_t i=0; i<nchannel; ++i) val[i] = unionValue[i];
185  ntMultiChannel->getValue()->replace(freeze(val));
186  shared_vector<epics::pvData::boolean> connected = pvaClientMultiChannel->getIsConnected();
187  shared_vector<epics::pvData::boolean> isConnected(nchannel);
188  for(size_t i=0; i<nchannel; ++i) isConnected[i] = connected[i];
189  ntMultiChannel->getIsConnected()->replace(freeze(isConnected));
190  if(gotAlarm)
191  {
192  shared_vector<int32> sev(nchannel);
193  for(size_t i=0; i<nchannel; ++i) sev[i] = severity[i];
194  ntMultiChannel->getSeverity()->replace(freeze(sev));
195  shared_vector<int32> sta(nchannel);
196  for(size_t i=0; i<nchannel; ++i) sta[i] = status[i];
197  ntMultiChannel->getStatus()->replace(freeze(sta));
198  shared_vector<string> mes(nchannel);
199  for(size_t i=0; i<nchannel; ++i) mes[i] = message[i];
200  ntMultiChannel->getMessage()->replace(freeze(mes));
201  }
202  if(gotTimeStamp)
203  {
204  shared_vector<int64> sec(nchannel);
205  for(size_t i=0; i<nchannel; ++i) sec[i] = secondsPastEpoch[i];
206  ntMultiChannel->getSecondsPastEpoch()->replace(freeze(sec));
207  shared_vector<int32> nano(nchannel);
208  for(size_t i=0; i<nchannel; ++i) nano[i] = nanoseconds[i];
209  ntMultiChannel->getNanoseconds()->replace(freeze(nano));
210  shared_vector<int32> tag(nchannel);
211  for(size_t i=0; i<nchannel; ++i) tag[i] = userTag[i];
212  ntMultiChannel->getUserTag()->replace(freeze(tag));
213  }
214  return ntMultiChannel;
215 }
pvd::Status status
int i
Definition: scan.c:967
std::tr1::shared_ptr< PVStructure > PVStructurePtr
Definition: pvData.h:87
std::tr1::shared_ptr< NTMultiChannel > NTMultiChannelPtr
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()
Definition: pvData.h:1648
size_t epics::pvaClient::PvaClientNTMultiData::getNumber ( )

Get the number of channels.

Returns
The number of channels.

Definition at line 94 of file pvaClientNTMultiData.cpp.

95 {
96  return nchannel;
97 }
PvaClientNTMultiDataPtr epics::pvaClient::PvaClientNTMultiData::getPtrSelf ( )
inline

Get the shared pointer to self.

Returns
The shared pointer.

Definition at line 576 of file pvaClientMultiChannel.h.

577  {
578  return shared_from_this();
579  }
TimeStamp epics::pvaClient::PvaClientNTMultiData::getTimeStamp ( )

Get the time when the last get was made.

Returns
The timeStamp.

Definition at line 172 of file pvaClientNTMultiData.cpp.

173 {
174  pvTimeStamp.get(timeStamp);
175  return timeStamp;
176 }
void get(TimeStamp &timeStamp) const
Definition: pvTimeStamp.cpp:61
epics::pvaClient::PvaClientNTMultiData::POINTER_DEFINITIONS ( PvaClientNTMultiData  )
void epics::pvaClient::PvaClientNTMultiData::startDeltaTime ( )

Set the timeStamp base for computing deltaTimes.

Definition at line 99 of file pvaClientNTMultiData.cpp.

100 {
101  for(size_t i=0; i<nchannel; ++i)
102  {
103  topPVStructure[i] = PVStructurePtr();
104  if(gotAlarm)
105  {
106  alarm.setSeverity(noAlarm);
107  alarm.setStatus(noStatus);
108  alarm.setMessage("");
109  severity[i] = invalidAlarm;
111  message[i] = "not connected";
112  }
113  if(gotTimeStamp)
114  {
115  timeStamp.getCurrent();
116  secondsPastEpoch[i] = 0;
117  nanoseconds[i] = 0;
118  userTag[i] = 0;
119  }
120  }
121 }
pvd::Status status
int i
Definition: scan.c:967
void setMessage(std::string const &value)
Definition: alarm.h:121
void setSeverity(AlarmSeverity value)
Definition: alarm.h:132
std::tr1::shared_ptr< PVStructure > PVStructurePtr
Definition: pvData.h:87
void setStatus(AlarmStatus value)
Definition: alarm.h:143

Friends And Related Function Documentation

friend class PvaClientNTMultiGet
friend

Definition at line 609 of file pvaClientMultiChannel.h.

friend class PvaClientNTMultiMonitor
friend

Definition at line 611 of file pvaClientMultiChannel.h.

friend class PvaClientNTMultiPut
friend

Definition at line 610 of file pvaClientMultiChannel.h.


The documentation for this class was generated from the following files: