13 #include <epicsMath.h> 15 #define epicsExportSharedSymbols 24 namespace epics {
namespace pvaClient {
33 return pvaClientMultiPutDouble;
36 PvaClientMultiPutDouble::PvaClientMultiPutDouble(
39 : pvaClientMultiChannel(pvaClientMultiChannel),
40 pvaClientChannelArray(pvaClientChannelArray),
41 nchannel(pvaClientChannelArray.
size()),
45 if(PvaClient::getDebug()) cout<<
"PvaClientMultiPutDouble::PvaClientMultiPutDouble()\n";
50 PvaClientMultiPutDouble::~PvaClientMultiPutDouble()
52 if(PvaClient::getDebug()) cout<<
"PvaClientMultiPutDouble::~PvaClientMultiPutDouble()\n";
56 void PvaClientMultiPutDouble::connect()
59 for(
size_t i=0;
i<nchannel; ++
i)
62 pvaClientPut[
i] = pvaClientChannelArray[
i]->createPut();
63 pvaClientPut[
i]->issueConnect();
66 for(
size_t i=0;
i<nchannel; ++
i)
70 if(status.
isOK())
continue;
71 string message = string(
"channel ") + pvaClientChannelArray[
i]->getChannelName()
72 +
" PvaChannelPut::waitConnect " + status.
getMessage();
73 throw std::runtime_error(message);
76 isPutConnected =
true;
81 if(!isPutConnected) connect();
82 if(data.
size()!=nchannel) {
83 throw std::runtime_error(
"data has wrong size");
86 for(
size_t i=0;
i<nchannel; ++
i)
91 getConvert()->fromDouble(pvValue,data[i]);
92 pvaClientPut[
i]->issuePut();
96 if(status.
isOK())
continue;
97 string message = string(
"channel ") + pvaClientChannelArray[
i]->getChannelName()
98 +
" PvaChannelPut::waitPut " + status.
getMessage();
99 throw std::runtime_error(message);
PVScalar is the base class for each scalar field.
std::tr1::shared_ptr< detail::SharedPut > put
TODO only here because of the Lockable.
Provides channelPut to multiple channels where each channel has a numeric scalar value field...
const std::string & getMessage() const
std::tr1::shared_ptr< PvaClientPut > PvaClientPutPtr
std::tr1::shared_ptr< PVScalar > PVScalarPtr
size_t size() const
Number of elements visible through this vector.
std::tr1::shared_ptr< PVStructure > PVStructurePtr
std::tr1::shared_ptr< PvaClientMultiChannel > PvaClientMultiChannelPtr
std::tr1::shared_ptr< PvaClientMultiPutDouble > PvaClientMultiPutDoublePtr