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

Provides channelGet to multiple channels where each channel has a numeric scalar value field. More...

#include "pvaClientMultiChannel.h"

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

Public Member Functions

 POINTER_DEFINITIONS (PvaClientMultiGetDouble)
 
 ~PvaClientMultiGetDouble ()
 
void connect ()
 Create a channelGet for each channel. More...
 
epics::pvData::shared_vector< double > get ()
 Get the data. More...
 
PvaClientMultiGetDoublePtr getPtrSelf ()
 Get the shared pointer to self. More...
 

Static Public Member Functions

static PvaClientMultiGetDoublePtr create (PvaClientMultiChannelPtr const &pvaClientMultiChannel, PvaClientChannelArray const &pvaClientChannelArray)
 Create a PvaClientMultiGetDouble. More...
 

Detailed Description

Provides channelGet to multiple channels where each channel has a numeric scalar value field.

Definition at line 173 of file pvaClientMultiChannel.h.

Constructor & Destructor Documentation

epics::pvaClient::PvaClientMultiGetDouble::~PvaClientMultiGetDouble ( )

Definition at line 49 of file pvaClientMultiGetDouble.cpp.

50 {
51  if(PvaClient::getDebug()) cout<< "PvaClientMultiGetDouble::~PvaClientMultiGetDouble()\n";
52 }
static bool getDebug()
Is debug set?
Definition: pvaClient.cpp:97

Member Function Documentation

void epics::pvaClient::PvaClientMultiGetDouble::connect ( )

Create a channelGet for each channel.

Definition at line 54 of file pvaClientMultiGetDouble.cpp.

55 {
56  shared_vector<epics::pvData::boolean> isConnected = pvaClientMultiChannel->getIsConnected();
57  string request = "value";
58  for(size_t i=0; i<nchannel; ++i)
59  {
60  if(isConnected[i]) {
61  pvaClientGet[i] = pvaClientChannelArray[i]->createGet(request);
62  pvaClientGet[i]->issueConnect();
63  }
64  }
65  for(size_t i=0; i<nchannel; ++i)
66  {
67  if(isConnected[i]) {
68  Status status = pvaClientGet[i]->waitConnect();
69  if(status.isOK()) continue;
70  string message = string("channel ") + pvaClientChannelArray[i]->getChannelName()
71  + " PvaChannelGet::waitConnect " + status.getMessage();
72  throw std::runtime_error(message);
73  }
74  }
75  isGetConnected = true;
76 }
std::string request
pvd::Status status
int i
Definition: scan.c:967
const std::string & getMessage() const
Definition: status.h:80
bool isOK() const
Definition: status.h:95
PvaClientMultiGetDoublePtr epics::pvaClient::PvaClientMultiGetDouble::create ( PvaClientMultiChannelPtr const &  pvaClientMultiChannel,
PvaClientChannelArray const &  pvaClientChannelArray 
)
static

Create a PvaClientMultiGetDouble.

Parameters
pvaClientMultiChannelThe interface to PvaClientMultiChannel.
pvaClientChannelArrayThe PvaClientChannel array.
Returns
The interface.

Definition at line 27 of file pvaClientMultiGetDouble.cpp.

30 {
31  PvaClientMultiGetDoublePtr pvaClientMultiGetDouble(
32  new PvaClientMultiGetDouble(pvaMultiChannel,pvaClientChannelArray));
33  return pvaClientMultiGetDouble;
34 }
std::tr1::shared_ptr< PvaClientMultiGetDouble > PvaClientMultiGetDoublePtr
epics::pvData::shared_vector< double > epics::pvaClient::PvaClientMultiGetDouble::get ( )

Get the data.

Returns
The double[] where each element is the value field of the corresponding channel.

Definition at line 78 of file pvaClientMultiGetDouble.cpp.

79 {
80  if(!isGetConnected) connect();
81  shared_vector<epics::pvData::boolean> isConnected = pvaClientMultiChannel->getIsConnected();
82 
83  for(size_t i=0; i<nchannel; ++i)
84  {
85  if(isConnected[i]) {
86  pvaClientGet[i]->issueGet();
87  }
88  }
89  for(size_t i=0; i<nchannel; ++i)
90  {
91  if(isConnected[i]) {
92  Status status = pvaClientGet[i]->waitGet();
93  if(status.isOK()) continue;
94  string message = string("channel ") + pvaClientChannelArray[i]->getChannelName()
95  + " PvaChannelGet::waitGet " + status.getMessage();
96  throw std::runtime_error(message);
97  }
98  }
99 
100  for(size_t i=0; i<nchannel; ++i)
101  {
102  if(isConnected[i])
103  {
104  PVStructurePtr pvStructure = pvaClientGet[i]->getData()->getPVStructure();
105  doubleValue[i] = getConvert()->toDouble(pvStructure->getSubField<PVScalar>("value"));
106  } else {
107  doubleValue[i] = epicsNAN;
108  }
109  }
110  return doubleValue;
111 }
PVScalar is the base class for each scalar field.
Definition: pvData.h:272
pvd::Status status
int i
Definition: scan.c:967
const std::string & getMessage() const
Definition: status.h:80
float epicsNAN
Definition: epicsMath.cpp:35
std::tr1::shared_ptr< PVStructure > PVStructurePtr
Definition: pvData.h:87
void connect()
Create a channelGet for each channel.
bool isOK() const
Definition: status.h:95
PvaClientMultiGetDoublePtr epics::pvaClient::PvaClientMultiGetDouble::getPtrSelf ( )
inline

Get the shared pointer to self.

Returns
The shared pointer.

Definition at line 204 of file pvaClientMultiChannel.h.

205  {
206  return shared_from_this();
207  }
epics::pvaClient::PvaClientMultiGetDouble::POINTER_DEFINITIONS ( PvaClientMultiGetDouble  )

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