11 #ifndef PVACLIENTMULTICHANNEL_H 12 #define PVACLIENTMULTICHANNEL_H 14 #ifdef epicsExportSharedSymbols 15 # define pvaClientMultiChannelEpicsExportSharedSymbols 16 # undef epicsExportSharedSymbols 19 #include <pv/ntmultiChannel.h> 20 #include <pv/createRequest.h> 22 #ifdef pvaClientMultiChannelEpicsExportSharedSymbols 23 # define epicsExportSharedSymbols 24 # undef pvaClientMultiChannelEpicsExportSharedSymbols 31 namespace epics {
namespace pvaClient {
61 public std::tr1::enable_shared_from_this<PvaClientMultiChannel>
75 static PvaClientMultiChannelPtr create(
77 epics::pvData::shared_vector<const std::string>
const & channelNames,
78 std::string
const & providerName =
"pva",
79 size_t maxNotConnected=0,
80 epics::pvData::shared_vector<const std::string>
const & providerNames
81 = epics::pvData::shared_vector<const std::string>()
90 epics::pvData::shared_vector<const std::string> getChannelNames();
98 epics::pvData::Status connect(
double timeout=5);
106 bool connectionChange();
110 epics::pvData::shared_vector<epics::pvData::boolean> getIsConnected();
114 PvaClientChannelArray getPvaClientChannelArray();
123 PvaClientMultiGetDoublePtr createGet();
128 PvaClientMultiPutDoublePtr createPut();
133 PvaClientMultiMonitorDoublePtr createMonitor();
138 PvaClientNTMultiPutPtr createNTPut();
144 PvaClientNTMultiGetPtr createNTGet(
145 std::string
const &request =
"field(value,alarm,timeStamp)");
151 PvaClientNTMultiMonitorPtr createNTMonitor(
152 std::string
const &request=
"field(value,alarm,timeStamp)");
156 epics::pvData::shared_vector<const std::string>
const & channelNames,
157 std::string
const & providerName,
158 size_t maxNotConnected,
159 epics::pvData::shared_vector<const std::string>
const & providerNames);
160 void checkConnected();
163 epics::pvData::shared_vector<const std::string> channelNames;
164 std::string providerName;
165 size_t maxNotConnected;
166 epics::pvData::shared_vector<const std::string>
const & providerNames;
169 size_t numProviderNames;
170 epics::pvData::Mutex mutex;
174 PvaClientChannelArray pvaClientChannelArray;
175 epics::pvData::shared_vector<epics::pvData::boolean> isConnected;
176 epics::pvData::CreateRequest::shared_pointer createRequest;
183 public std::tr1::enable_shared_from_this<PvaClientMultiGetDouble>
189 static PvaClientMultiGetDoublePtr create(
190 PvaClientMultiChannelPtr
const &pvaClientMultiChannel,
191 PvaClientChannelArray
const &pvaClientChannelArray);
206 epics::pvData::shared_vector<double>
get();
209 PvaClientMultiChannelPtr
const &pvaClientMultiChannel,
210 PvaClientChannelArray
const &pvaClientChannelArray);
212 PvaClientMultiChannelPtr pvaClientMultiChannel;
213 PvaClientChannelArray pvaClientChannelArray;
215 epics::pvData::Mutex mutex;
217 epics::pvData::shared_vector<double> doubleValue;
218 std::vector<PvaClientGetPtr> pvaClientGet;
226 public std::tr1::enable_shared_from_this<PvaClientMultiPutDouble>
232 static PvaClientMultiPutDoublePtr create(
233 PvaClientMultiChannelPtr
const &pvaClientMultiChannel,
234 PvaClientChannelArray
const &pvaClientChannelArray);
248 void put(epics::pvData::shared_vector<double>
const &data);
252 PvaClientMultiChannelPtr
const &pvaClientMultiChannel,
253 PvaClientChannelArray
const &pvaClientChannelArray);
255 PvaClientMultiChannelPtr pvaClientMultiChannel;
256 PvaClientChannelArray pvaClientChannelArray;
258 epics::pvData::Mutex mutex;
260 std::vector<PvaClientPutPtr> pvaClientPut;
268 public std::tr1::enable_shared_from_this<PvaClientMultiMonitorDouble>
274 static PvaClientMultiMonitorDoublePtr create(
275 PvaClientMultiChannelPtr
const &pvaClientMultiChannel,
276 PvaClientChannelArray
const &pvaClientChannelArray);
300 bool waitEvent(
double secondsToWait);
305 epics::pvData::shared_vector<double>
get();
309 PvaClientMultiChannelPtr
const &pvaClientMultiChannel,
310 PvaClientChannelArray
const &pvaClientChannelArray);
312 PvaClientMultiChannelPtr pvaClientMultiChannel;
313 PvaClientChannelArray pvaClientChannelArray;
315 epics::pvData::Mutex mutex;
317 epics::pvData::shared_vector<double> doubleValue;
318 std::vector<PvaClientMonitorPtr> pvaClientMonitor;
319 bool isMonitorConnected;
326 public std::tr1::enable_shared_from_this<PvaClientNTMultiGet>
332 static PvaClientNTMultiGetPtr create(
333 PvaClientMultiChannelPtr
const &pvaClientMultiChannel,
334 PvaClientChannelArray
const &pvaClientChannelArray,
335 epics::pvData::PVStructurePtr
const & pvRequest);
351 void get(
bool valueOnly =
true);
356 PvaClientNTMultiDataPtr getData();
360 epics::pvData::UnionConstPtr
const & u,
361 PvaClientMultiChannelPtr
const &pvaClientMultiChannel,
362 PvaClientChannelArray
const &pvaClientChannelArray,
363 epics::pvData::PVStructurePtr
const & pvRequest);
365 PvaClientMultiChannelPtr pvaClientMultiChannel;
366 PvaClientChannelArray pvaClientChannelArray;
367 epics::pvData::PVStructurePtr pvRequest;
369 epics::pvData::Mutex mutex;
371 PvaClientNTMultiDataPtr pvaClientNTMultiData;
372 std::vector<PvaClientGetPtr> pvaClientGet;
380 public std::tr1::enable_shared_from_this<PvaClientNTMultiPut>
386 static PvaClientNTMultiPutPtr create(
387 PvaClientMultiChannelPtr
const &pvaClientMultiChannel,
388 PvaClientChannelArray
const &pvaClientChannelArray);
403 epics::pvData::shared_vector<epics::pvData::PVUnionPtr> getValues();
411 PvaClientMultiChannelPtr
const &pvaClientMultiChannel,
412 PvaClientChannelArray
const &pvaClientChannelArray);
414 PvaClientMultiChannelPtr pvaClientMultiChannel;
415 PvaClientChannelArray pvaClientChannelArray;
417 epics::pvData::Mutex mutex;
419 epics::pvData::shared_vector<epics::pvData::PVUnionPtr> unionValue;
420 epics::pvData::shared_vector<epics::pvData::PVFieldPtr> value;
421 std::vector<PvaClientPutPtr> pvaClientPut;
429 public std::tr1::enable_shared_from_this<PvaClientNTMultiMonitor>
435 static PvaClientNTMultiMonitorPtr create(
436 PvaClientMultiChannelPtr
const &pvaClientMultiChannel,
437 PvaClientChannelArray
const &pvaClientChannelArray,
438 epics::pvData::PVStructurePtr
const & pvRequest);
456 bool poll(
bool valueOnly =
true);
463 bool waitEvent(
double secondsToWait);
468 PvaClientNTMultiDataPtr getData();
472 epics::pvData::UnionConstPtr
const & u,
473 PvaClientMultiChannelPtr
const &pvaClientMultiChannel,
474 PvaClientChannelArray
const &pvaClientChannelArray,
475 epics::pvData::PVStructurePtr
const & pvRequest);
477 PvaClientMultiChannelPtr pvaClientMultiChannel;
478 PvaClientChannelArray pvaClientChannelArray;
479 epics::pvData::PVStructurePtr pvRequest;
481 epics::pvData::Mutex mutex;
482 PvaClientNTMultiDataPtr pvaClientNTMultiData;
483 std::vector<PvaClientMonitorPtr> pvaClientMonitor;
491 public std::tr1::enable_shared_from_this<PvaClientNTMultiData>
506 epics::pvData::TimeStamp getTimeStamp();
511 epics::nt::NTMultiChannelPtr getNTMultiChannel();
516 epics::pvData::shared_vector<epics::pvData::boolean> getChannelChangeFlags();
518 static PvaClientNTMultiDataPtr create(
519 epics::pvData::UnionConstPtr
const & u,
520 PvaClientMultiChannelPtr
const &pvaClientMultiChannel,
521 PvaClientChannelArray
const &pvaClientChannelArray,
522 epics::pvData::PVStructurePtr
const & pvRequest);
523 void startDeltaTime();
524 void endDeltaTime(
bool valueOnly =
true);
529 epics::pvData::UnionConstPtr
const & u,
530 PvaClientMultiChannelPtr
const &pvaNTMultiChannel,
531 PvaClientChannelArray
const &pvaClientChannelArray,
532 epics::pvData::PVStructurePtr
const & pvRequest);
534 epics::pvData::PVStructurePtr
const &pvStructure,
size_t index);
536 PvaClientMultiChannelPtr pvaClientMultiChannel;
537 PvaClientChannelArray pvaClientChannelArray;
539 epics::pvData::Mutex mutex;
541 std::vector<epics::pvData::PVStructurePtr> topPVStructure;
545 epics::pvData::shared_vector<epics::pvData::boolean> changeFlags;
546 epics::pvData::StructureConstPtr ntMultiChannelStructure;
547 epics::pvData::shared_vector<epics::pvData::PVUnionPtr> unionValue;
548 epics::pvData::shared_vector<epics::pvData::int32> severity;
549 epics::pvData::shared_vector<epics::pvData::int32> status;
550 epics::pvData::shared_vector<std::string> message;
551 epics::pvData::shared_vector<epics::pvData::int64> secondsPastEpoch;
552 epics::pvData::shared_vector<epics::pvData::int32> nanoseconds;
553 epics::pvData::shared_vector<epics::pvData::int32> userTag;
554 epics::pvData::Alarm alarm;
555 epics::pvData::TimeStamp timeStamp;;
556 epics::pvData::PVTimeStamp pvTimeStamp;
std::tr1::shared_ptr< PvaClient > PvaClientPtr
epics::pvData::shared_vector< PvaClientChannelPtr > PvaClientChannelArray
PvaMultiChannel is a synchronous interface for accessing multiple channels.
Provides channelGet to multiple channels where each channel has a numeric scalar value field...
Provides channelPut to multiple channels where each channel has a numeric scalar value field...
std::tr1::shared_ptr< PvaClientNTMultiGet > PvaClientNTMultiGetPtr
Provides channelPut to multiple channels where the value field of each channel is presented as a unio...
Provides channel monitor to multiple channels where the value field of each channel is presented as a...
Provides channelGet to multiple channels where the value field of each channel is presented as a unio...
std::tr1::shared_ptr< PvaClientNTMultiData > PvaClientNTMultiDataPtr
std::tr1::shared_ptr< PvaClientNTMultiPut > PvaClientNTMultiPutPtr
std::tr1::shared_ptr< PvaClientMultiMonitorDouble > PvaClientMultiMonitorDoublePtr
std::tr1::shared_ptr< PvaClientNTMultiMonitor > PvaClientNTMultiMonitorPtr
std::tr1::shared_ptr< PvaClientMultiGetDouble > PvaClientMultiGetDoublePtr
Provides a monitor to multiple channels where each channel has a numeric scalar value field...
std::tr1::shared_ptr< PvaClientMultiChannel > PvaClientMultiChannelPtr
Provides NTMultiChannel data for both PvaClientNTMultiGet and PvaClientNTMultiMonitor.
std::tr1::shared_ptr< PvaClientMultiPutDouble > PvaClientMultiPutDoublePtr