14#define epicsExportSharedSymbols
18using namespace epics::pvData;
19using namespace epics::pvAccess;
20using namespace epics::nt;
23namespace epics {
namespace pvaClient {
29 PVStructurePtr
const & pvRequest)
31 UnionConstPtr u = getFieldCreate()->createVariantUnion();
34 return pvaClientNTMultiGet;
37PvaClientNTMultiGet::PvaClientNTMultiGet(
38 UnionConstPtr
const & u,
41 PVStructurePtr
const & pvRequest)
42: pvaClientMultiChannel(pvaClientMultiChannel),
43 pvaClientChannelArray(pvaClientChannelArray),
45 nchannel(pvaClientChannelArray.size()),
49 pvaClientMultiChannel,
50 pvaClientChannelArray,
64 pvaClientGet.resize(nchannel);
65 shared_vector<epics::pvData::boolean> isConnected = pvaClientMultiChannel->getIsConnected();
66 for(
size_t i=0; i<nchannel; ++i)
69 pvaClientGet[i] = pvaClientChannelArray[i]->createGet(pvRequest);
70 pvaClientGet[i]->issueConnect();
73 for(
size_t i=0; i<nchannel; ++i)
76 Status status = pvaClientGet[i]->waitConnect();
77 if(status.isOK())
continue;
78 string message = string(
"channel ") +pvaClientChannelArray[i]->getChannelName()
79 +
" PvaChannelGet::waitConnect " + status.getMessage();
80 throw std::runtime_error(message);
83 this->isConnected =
true;
89 shared_vector<epics::pvData::boolean> isConnected = pvaClientMultiChannel->getIsConnected();
91 for(
size_t i=0; i<nchannel; ++i)
95 pvaClientGet[i]=pvaClientChannelArray[i]->createGet(pvRequest);
96 pvaClientGet[i]->connect();
98 pvaClientGet[i]->issueGet();
101 for(
size_t i=0; i<nchannel; ++i)
104 Status status = pvaClientGet[i]->waitGet();
105 if(status.isOK())
continue;
106 string message = string(
"channel ") +pvaClientChannelArray[i]->getChannelName()
107 +
" PvaChannelGet::waitGet " + status.getMessage();
108 throw std::runtime_error(message);
111 pvaClientNTMultiData->startDeltaTime();
112 for(
size_t i=0; i<nchannel; ++i)
115 pvaClientNTMultiData->setPVStructure(pvaClientGet[i]->
getData()->getPVStructure(),i);
118 pvaClientNTMultiData->endDeltaTime(valueOnly);
123 return pvaClientNTMultiData;
Provides NTMultiChannel data for both PvaClientNTMultiGet and PvaClientNTMultiMonitor.
Provides channelGet to multiple channels where the value field of each channel is presented as a unio...
void get(bool valueOnly=true)
Get each channel.
~PvaClientNTMultiGet()
Destructor.
void connect()
Connect a channelGet for each channel.
PvaClientNTMultiDataPtr getData()
Get the data from the last get.
static PvaClientNTMultiGetPtr create(PvaClientMultiChannelPtr const &pvaClientMultiChannel, PvaClientChannelArray const &pvaClientChannelArray, epics::pvData::PVStructurePtr const &pvRequest)
static bool getDebug()
Is debug set?
std::tr1::shared_ptr< PvaClientNTMultiGet > PvaClientNTMultiGetPtr
std::tr1::shared_ptr< PvaClientNTMultiData > PvaClientNTMultiDataPtr
epics::pvData::shared_vector< PvaClientChannelPtr > PvaClientChannelArray
std::tr1::shared_ptr< PvaClientMultiChannel > PvaClientMultiChannelPtr