14 #include <epicsMath.h> 16 #define epicsExportSharedSymbols 25 namespace epics {
namespace pvaClient {
35 PvaClientNTMultiPut::PvaClientNTMultiPut(
38 : pvaClientMultiChannel(pvaClientMultiChannel),
39 pvaClientChannelArray(pvaClientChannelArray),
40 nchannel(pvaClientChannelArray.
size()),
45 if(PvaClient::getDebug()) cout<<
"PvaClientNTMultiPut::PvaClientNTMultiPut()\n";
49 PvaClientNTMultiPut::~PvaClientNTMultiPut()
51 if(PvaClient::getDebug()) cout<<
"PvaClientNTMultiPut::~PvaClientNTMultiPut()\n";
54 void PvaClientNTMultiPut::connect()
56 pvaClientPut.resize(nchannel);
58 for(
size_t i=0;
i<nchannel; ++
i)
61 pvaClientPut[
i] = pvaClientChannelArray[
i]->createPut();
62 pvaClientPut[
i]->issueConnect();
65 for(
size_t i=0;
i<nchannel; ++
i)
69 if(status.
isOK())
continue;
70 string message = string(
"channel ") +pvaClientChannelArray[
i]->getChannelName()
71 +
" PvaChannelPut::waitConnect " + status.
getMessage();
72 throw std::runtime_error(message);
75 for(
size_t i=0;
i<nchannel; ++
i)
78 pvaClientPut[
i]->issueGet();
81 for(
size_t i=0;
i<nchannel; ++
i)
85 if(status.
isOK())
continue;
86 string message = string(
"channel ") +pvaClientChannelArray[
i]->getChannelName()
87 +
" PvaChannelPut::waitGet " + status.
getMessage();
88 throw std::runtime_error(message);
93 for(
size_t i=0;
i<nchannel; ++
i)
96 value[
i] = pvaClientPut[
i]->getData()->getValue();
98 builder->add(
"value",
value[i]->getField());
99 unionValue[
i] = pvDataCreate->createPVUnion(builder->createUnion());
102 this->isConnected =
true;
107 if(!isConnected) connect();
113 if(!isConnected) connect();
115 for(
size_t i=0;
i<nchannel; ++
i)
118 value[
i]->copy(*unionValue[i]->
get());
119 pvaClientPut[
i]->issuePut();
123 if(status.
isOK())
continue;
124 string message = string(
"channel ") +pvaClientChannelArray[
i]->getChannelName()
125 +
" PvaChannelPut::waitPut " + status.
getMessage();
126 throw std::runtime_error(message);
std::tr1::shared_ptr< detail::SharedPut > put
TODO only here because of the Lockable.
Provides channelPut to multiple channels where the value field of each channel is presented as a unio...
std::tr1::shared_ptr< FieldBuilder > FieldBuilderPtr
const std::string & getMessage() const
std::tr1::shared_ptr< PVDataCreate > PVDataCreatePtr
std::tr1::shared_ptr< PVUnion > PVUnionPtr
std::tr1::shared_ptr< PvaClientNTMultiPut > PvaClientNTMultiPutPtr
size_t size() const
Number of elements visible through this vector.
FORCE_INLINE const FieldCreatePtr & getFieldCreate()
std::tr1::shared_ptr< PVField > PVFieldPtr
std::tr1::shared_ptr< FieldCreate > FieldCreatePtr
std::tr1::shared_ptr< PvaClientMultiChannel > PvaClientMultiChannelPtr
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()