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

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

#include "pvaClientMultiChannel.h"

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

Public Member Functions

 POINTER_DEFINITIONS (PvaClientMultiPutDouble)
 
 ~PvaClientMultiPutDouble ()
 
void connect ()
 Create a channelPut for each channel. More...
 
void put (epics::pvData::shared_vector< double > const &data)
 put data to each channel as a double More...
 
PvaClientMultiPutDoublePtr getPtrSelf ()
 Get the shared pointer to self. More...
 

Static Public Member Functions

static PvaClientMultiPutDoublePtr create (PvaClientMultiChannelPtr const &pvaClientMultiChannel, PvaClientChannelArray const &pvaClientChannelArray)
 Create a PvaClientMultiPutDouble. More...
 

Detailed Description

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

Definition at line 226 of file pvaClientMultiChannel.h.

Constructor & Destructor Documentation

epics::pvaClient::PvaClientMultiPutDouble::~PvaClientMultiPutDouble ( )

Definition at line 50 of file pvaClientMultiPutDouble.cpp.

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

Member Function Documentation

void epics::pvaClient::PvaClientMultiPutDouble::connect ( )

Create a channelPut for each channel.

Definition at line 56 of file pvaClientMultiPutDouble.cpp.

57 {
58  shared_vector<epics::pvData::boolean> isConnected = pvaClientMultiChannel->getIsConnected();
59  for(size_t i=0; i<nchannel; ++i)
60  {
61  if(isConnected[i]) {
62  pvaClientPut[i] = pvaClientChannelArray[i]->createPut();
63  pvaClientPut[i]->issueConnect();
64  }
65  }
66  for(size_t i=0; i<nchannel; ++i)
67  {
68  if(isConnected[i]) {
69  Status status = pvaClientPut[i]->waitConnect();
70  if(status.isOK()) continue;
71  string message = string("channel ") + pvaClientChannelArray[i]->getChannelName()
72  + " PvaChannelPut::waitConnect " + status.getMessage();
73  throw std::runtime_error(message);
74  }
75  }
76  isPutConnected = true;
77 }
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
PvaClientMultiPutDoublePtr epics::pvaClient::PvaClientMultiPutDouble::create ( PvaClientMultiChannelPtr const &  pvaClientMultiChannel,
PvaClientChannelArray const &  pvaClientChannelArray 
)
static

Create a PvaClientMultiPutDouble.

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

Definition at line 27 of file pvaClientMultiPutDouble.cpp.

30 {
31  PvaClientMultiPutDoublePtr pvaClientMultiPutDouble(
32  new PvaClientMultiPutDouble(pvaMultiChannel,pvaClientChannelArray));
33  return pvaClientMultiPutDouble;
34 }
std::tr1::shared_ptr< PvaClientMultiPutDouble > PvaClientMultiPutDoublePtr
PvaClientMultiPutDoublePtr epics::pvaClient::PvaClientMultiPutDouble::getPtrSelf ( )
inline

Get the shared pointer to self.

Returns
The shared pointer.

Definition at line 253 of file pvaClientMultiChannel.h.

254  {
255  return shared_from_this();
256  }
epics::pvaClient::PvaClientMultiPutDouble::POINTER_DEFINITIONS ( PvaClientMultiPutDouble  )
void epics::pvaClient::PvaClientMultiPutDouble::put ( epics::pvData::shared_vector< double > const &  data)

put data to each channel as a double

Parameters
dataThe array of data for each channel.

Definition at line 79 of file pvaClientMultiPutDouble.cpp.

80 {
81  if(!isPutConnected) connect();
82  if(data.size()!=nchannel) {
83  throw std::runtime_error("data has wrong size");
84  }
85  shared_vector<epics::pvData::boolean> isConnected = pvaClientMultiChannel->getIsConnected();
86  for(size_t i=0; i<nchannel; ++i)
87  {
88  if(isConnected[i]) {
89  PVStructurePtr pvTop = pvaClientPut[i]->getData()->getPVStructure();
90  PVScalarPtr pvValue = pvTop->getSubField<PVScalar>("value");
91  getConvert()->fromDouble(pvValue,data[i]);
92  pvaClientPut[i]->issuePut();
93  }
94  if(isConnected[i]) {
95  Status status = pvaClientPut[i]->waitPut();
96  if(status.isOK()) continue;
97  string message = string("channel ") + pvaClientChannelArray[i]->getChannelName()
98  + " PvaChannelPut::waitPut " + status.getMessage();
99  throw std::runtime_error(message);
100  }
101  }
102 }
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
std::tr1::shared_ptr< PVScalar > PVScalarPtr
Definition: pvData.h:77
size_t size() const
Number of elements visible through this vector.
Definition: sharedVector.h:220
std::tr1::shared_ptr< PVStructure > PVStructurePtr
Definition: pvData.h:87
bool isOK() const
Definition: status.h:95
void connect()
Create a channelPut for each channel.

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