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
31namespace epics {
namespace pvaClient {
34class PvaClientMultiChannel;
61 public std::tr1::enable_shared_from_this<PvaClientMultiChannel>
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();
145 std::string
const &request =
"field(value,alarm,timeStamp)");
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;
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>
206 epics::pvData::shared_vector<double> get();
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>
248 void put(epics::pvData::shared_vector<double>
const &data);
258 epics::pvData::Mutex mutex;
260 std::vector<PvaClientPutPtr> pvaClientPut;
268 public std::tr1::enable_shared_from_this<PvaClientMultiMonitorDouble>
300 bool waitEvent(
double secondsToWait);
305 epics::pvData::shared_vector<double> get();
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>
335 epics::pvData::PVStructurePtr
const & pvRequest);
351 void get(
bool valueOnly =
true);
360 epics::pvData::UnionConstPtr
const & u,
363 epics::pvData::PVStructurePtr
const & pvRequest);
367 epics::pvData::PVStructurePtr pvRequest;
369 epics::pvData::Mutex mutex;
372 std::vector<PvaClientGetPtr> pvaClientGet;
380 public std::tr1::enable_shared_from_this<PvaClientNTMultiPut>
403 epics::pvData::shared_vector<epics::pvData::PVUnionPtr> getValues();
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>
438 epics::pvData::PVStructurePtr
const & pvRequest);
456 bool poll(
bool valueOnly =
true);
463 bool waitEvent(
double secondsToWait);
472 epics::pvData::UnionConstPtr
const & u,
475 epics::pvData::PVStructurePtr
const & pvRequest);
479 epics::pvData::PVStructurePtr pvRequest;
481 epics::pvData::Mutex mutex;
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();
519 epics::pvData::UnionConstPtr
const & u,
522 epics::pvData::PVStructurePtr
const & pvRequest);
523 void startDeltaTime();
524 void endDeltaTime(
bool valueOnly =
true);
529 epics::pvData::UnionConstPtr
const & u,
532 epics::pvData::PVStructurePtr
const & pvRequest);
534 epics::pvData::PVStructurePtr
const &pvStructure,
size_t index);
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;
PvaMultiChannel is a synchronous interface for accessing multiple channels.
POINTER_DEFINITIONS(PvaClientMultiChannel)
Provides channelGet to multiple channels where each channel has a numeric scalar value field.
POINTER_DEFINITIONS(PvaClientMultiGetDouble)
Provides a monitor to multiple channels where each channel has a numeric scalar value field.
POINTER_DEFINITIONS(PvaClientMultiMonitorDouble)
Provides channelPut to multiple channels where each channel has a numeric scalar value field.
POINTER_DEFINITIONS(PvaClientMultiPutDouble)
Provides NTMultiChannel data for both PvaClientNTMultiGet and PvaClientNTMultiMonitor.
POINTER_DEFINITIONS(PvaClientNTMultiData)
Provides channelGet to multiple channels where the value field of each channel is presented as a unio...
POINTER_DEFINITIONS(PvaClientNTMultiGet)
Provides channel monitor to multiple channels where the value field of each channel is presented as a...
POINTER_DEFINITIONS(PvaClientNTMultiMonitor)
Provides channelPut to multiple channels where the value field of each channel is presented as a unio...
POINTER_DEFINITIONS(PvaClientNTMultiPut)
std::tr1::shared_ptr< PvaClientNTMultiMonitor > PvaClientNTMultiMonitorPtr
std::tr1::shared_ptr< PvaClientMultiMonitorDouble > PvaClientMultiMonitorDoublePtr
std::tr1::shared_ptr< PvaClientNTMultiGet > PvaClientNTMultiGetPtr
std::tr1::shared_ptr< PvaClientNTMultiData > PvaClientNTMultiDataPtr
std::tr1::shared_ptr< PvaClientMultiGetDouble > PvaClientMultiGetDoublePtr
epics::pvData::shared_vector< PvaClientChannelPtr > PvaClientChannelArray
std::tr1::shared_ptr< PvaClient > PvaClientPtr
std::tr1::shared_ptr< PvaClientMultiChannel > PvaClientMultiChannelPtr
std::tr1::shared_ptr< PvaClientNTMultiPut > PvaClientNTMultiPutPtr
std::tr1::shared_ptr< PvaClientMultiPutDouble > PvaClientMultiPutDoublePtr