This is Unofficial EPICS BASE Doxygen Site
pvaClientMultiChannel.h
Go to the documentation of this file.
1 /* pvaClientMultiChannel.h */
11 #ifndef PVACLIENTMULTICHANNEL_H
12 #define PVACLIENTMULTICHANNEL_H
13 
14 #ifdef epicsExportSharedSymbols
15 # define pvaClientMultiChannelEpicsExportSharedSymbols
16 # undef epicsExportSharedSymbols
17 #endif
18 
19 #include <pv/ntmultiChannel.h>
20 #include <pv/createRequest.h>
21 
22 #ifdef pvaClientMultiChannelEpicsExportSharedSymbols
23 # define epicsExportSharedSymbols
24 # undef pvaClientMultiChannelEpicsExportSharedSymbols
25 #endif
26 
27 
28 #include <pv/pvaClient.h>
29 
30 
31 namespace epics { namespace pvaClient {
32 
33 
35 typedef std::tr1::shared_ptr<PvaClientMultiChannel> PvaClientMultiChannelPtr;
37 typedef std::tr1::shared_ptr<PvaClientMultiGetDouble> PvaClientMultiGetDoublePtr;
39 typedef std::tr1::shared_ptr<PvaClientMultiPutDouble> PvaClientMultiPutDoublePtr;
41 typedef std::tr1::shared_ptr<PvaClientMultiMonitorDouble> PvaClientMultiMonitorDoublePtr;
42 
44 typedef std::tr1::shared_ptr<PvaClientNTMultiGet> PvaClientNTMultiGetPtr;
46 typedef std::tr1::shared_ptr<PvaClientNTMultiPut> PvaClientNTMultiPutPtr;
48 typedef std::tr1::shared_ptr<PvaClientNTMultiMonitor> PvaClientNTMultiMonitorPtr;
50 typedef std::tr1::shared_ptr<PvaClientNTMultiData> PvaClientNTMultiDataPtr;
51 
52 
54 
61  public std::tr1::enable_shared_from_this<PvaClientMultiChannel>
62 {
63 public:
72  static PvaClientMultiChannelPtr create(
73  PvaClientPtr const &pvaClient,
75  std::string const & providerName = "pva",
76  size_t maxNotConnected=0
77  );
93  epics::pvData::Status connect(double timeout=5);
97  bool allConnected();
101  bool connectionChange();
109  PvaClientChannelArray getPvaClientChannelArray();
113  PvaClientPtr getPvaClient();
118  PvaClientMultiGetDoublePtr createGet();
123  PvaClientMultiPutDoublePtr createPut();
128  PvaClientMultiMonitorDoublePtr createMonitor();
133  PvaClientNTMultiPutPtr createNTPut();
139  PvaClientNTMultiGetPtr createNTGet(
140  std::string const &request = "field(value,alarm,timeStamp)");
146  PvaClientNTMultiMonitorPtr createNTMonitor(
147  std::string const &request= "field(value,alarm,timeStamp)");
148 private:
150  PvaClientPtr const &pvaClient,
152  std::string const & providerName,
153  size_t maxNotConnected);
154  void checkConnected();
155 
156  PvaClientPtr pvaClient;
158  std::string providerName;
159  size_t maxNotConnected;
160 
161  size_t numChannel;
163 
164  size_t numConnected;
165  PvaClientChannelArray pvaClientChannelArray;
167  epics::pvData::CreateRequest::shared_pointer createRequest;
168 };
169 
174  public std::tr1::enable_shared_from_this<PvaClientMultiGetDouble>
175 {
176 
177 public:
179 
186  static PvaClientMultiGetDoublePtr create(
187  PvaClientMultiChannelPtr const &pvaClientMultiChannel,
188  PvaClientChannelArray const &pvaClientChannelArray);
189 
191 
195  void connect();
204  PvaClientMultiGetDoublePtr getPtrSelf()
205  {
206  return shared_from_this();
207  }
208 private:
210  PvaClientMultiChannelPtr const &pvaClientMultiChannel,
211  PvaClientChannelArray const &pvaClientChannelArray);
212 
213  PvaClientMultiChannelPtr pvaClientMultiChannel;
214  PvaClientChannelArray pvaClientChannelArray;
215  size_t nchannel;
217 
219  std::vector<PvaClientGetPtr> pvaClientGet;
220  bool isGetConnected;
221 };
222 
227  public std::tr1::enable_shared_from_this<PvaClientMultiPutDouble>
228 {
229 
230 public:
232 
238  static PvaClientMultiPutDoublePtr create(
239  PvaClientMultiChannelPtr const &pvaClientMultiChannel,
240  PvaClientChannelArray const &pvaClientChannelArray);
245  void connect();
249  void put(epics::pvData::shared_vector<double> const &data);
253  PvaClientMultiPutDoublePtr getPtrSelf()
254  {
255  return shared_from_this();
256  }
257 private:
259  PvaClientMultiChannelPtr const &pvaClientMultiChannel,
260  PvaClientChannelArray const &pvaClientChannelArray);
261 
262  PvaClientMultiChannelPtr pvaClientMultiChannel;
263  PvaClientChannelArray pvaClientChannelArray;
264  size_t nchannel;
266 
267  std::vector<PvaClientPutPtr> pvaClientPut;
268  bool isPutConnected;
269 };
270 
275  public std::tr1::enable_shared_from_this<PvaClientMultiMonitorDouble>
276 {
277 
278 public:
280 
286  static PvaClientMultiMonitorDoublePtr create(
287  PvaClientMultiChannelPtr const &pvaClientMultiChannel,
288  PvaClientChannelArray const &pvaClientChannelArray);
293  void connect();
300  bool poll();
307  bool waitEvent(double secondsToWait);
316  PvaClientMultiMonitorDoublePtr getPtrSelf()
317  {
318  return shared_from_this();
319  }
320 private:
322  PvaClientMultiChannelPtr const &pvaClientMultiChannel,
323  PvaClientChannelArray const &pvaClientChannelArray);
324 
325  PvaClientMultiChannelPtr pvaClientMultiChannel;
326  PvaClientChannelArray pvaClientChannelArray;
327  size_t nchannel;
329 
331  std::vector<PvaClientMonitorPtr> pvaClientMonitor;
332  bool isMonitorConnected;
333 };
334 
339  public std::tr1::enable_shared_from_this<PvaClientNTMultiGet>
340 {
341 
342 public:
351  static PvaClientNTMultiGetPtr create(
352  PvaClientMultiChannelPtr const &pvaClientMultiChannel,
353  PvaClientChannelArray const &pvaClientChannelArray,
354  epics::pvData::PVStructurePtr const & pvRequest);
355 
360  void connect();
366  void get(bool valueOnly = true);
371  PvaClientNTMultiDataPtr getData();
375  PvaClientNTMultiGetPtr getPtrSelf()
376  {
377  return shared_from_this();
378  }
379 private:
382  PvaClientMultiChannelPtr const &pvaClientMultiChannel,
383  PvaClientChannelArray const &pvaClientChannelArray,
384  epics::pvData::PVStructurePtr const & pvRequest);
385 
386  PvaClientMultiChannelPtr pvaClientMultiChannel;
387  PvaClientChannelArray pvaClientChannelArray;
389  size_t nchannel;
391 
392 
393  PvaClientNTMultiDataPtr pvaClientNTMultiData;
394  std::vector<PvaClientGetPtr> pvaClientGet;
395  bool isConnected;
396 };
397 
402  public std::tr1::enable_shared_from_this<PvaClientNTMultiPut>
403 {
404 
405 public:
413  static PvaClientNTMultiPutPtr create(
414  PvaClientMultiChannelPtr const &pvaClientMultiChannel,
415  PvaClientChannelArray const &pvaClientChannelArray);
416 
421  void connect();
430  void put();
434  PvaClientNTMultiPutPtr getPtrSelf()
435  {
436  return shared_from_this();
437  }
438 private:
440  PvaClientMultiChannelPtr const &pvaClientMultiChannel,
441  PvaClientChannelArray const &pvaClientChannelArray);
442 
443  PvaClientMultiChannelPtr pvaClientMultiChannel;
444  PvaClientChannelArray pvaClientChannelArray;
445  size_t nchannel;
447 
450  std::vector<PvaClientPutPtr> pvaClientPut;
451  bool isConnected;
452 };
453 
458  public std::tr1::enable_shared_from_this<PvaClientNTMultiMonitor>
459 {
460 
461 public:
469  static PvaClientNTMultiMonitorPtr create(
470  PvaClientMultiChannelPtr const &pvaClientMultiChannel,
471  PvaClientChannelArray const &pvaClientChannelArray,
472  epics::pvData::PVStructurePtr const & pvRequest);
477  void connect();
485  bool poll(bool valueOnly = true);
492  bool waitEvent(double secondsToWait);
497  PvaClientNTMultiDataPtr getData();
501  PvaClientNTMultiMonitorPtr getPtrSelf()
502  {
503  return shared_from_this();
504  }
505 private:
508  PvaClientMultiChannelPtr const &pvaClientMultiChannel,
509  PvaClientChannelArray const &pvaClientChannelArray,
510  epics::pvData::PVStructurePtr const & pvRequest);
511 
512  PvaClientMultiChannelPtr pvaClientMultiChannel;
513  PvaClientChannelArray pvaClientChannelArray;
515  size_t nchannel;
517  PvaClientNTMultiDataPtr pvaClientNTMultiData;
518  std::vector<PvaClientMonitorPtr> pvaClientMonitor;
519  bool isConnected;
520 };
521 
526  public std::tr1::enable_shared_from_this<PvaClientNTMultiData>
527 {
528 
529 public:
540  static PvaClientNTMultiDataPtr create(
542  PvaClientMultiChannelPtr const &pvaClientMultiChannel,
543  PvaClientChannelArray const &pvaClientChannelArray,
544  epics::pvData::PVStructurePtr const & pvRequest);
546 
551  size_t getNumber();
552 
556  void startDeltaTime();
562  void endDeltaTime(bool valueOnly = true);
567  epics::pvData::TimeStamp getTimeStamp();
572  epics::nt::NTMultiChannelPtr getNTMultiChannel();
576  PvaClientNTMultiDataPtr getPtrSelf()
577  {
578  return shared_from_this();
579  }
580 private:
583  PvaClientMultiChannelPtr const &pvaNTMultiChannel,
584  PvaClientChannelArray const &pvaClientChannelArray,
585  epics::pvData::PVStructurePtr const & pvRequest);
586  void setPVStructure(
587  epics::pvData::PVStructurePtr const &pvStructure,size_t index);
588 
589  PvaClientMultiChannelPtr pvaClientMultiChannel;
590  PvaClientChannelArray pvaClientChannelArray;
591  size_t nchannel;
593 
594  std::vector<epics::pvData::PVStructurePtr> topPVStructure;
595  bool gotAlarm;
596  bool gotTimeStamp;
597 
598  epics::pvData::StructureConstPtr ntMultiChannelStructure;
606  epics::pvData::Alarm alarm;
607  epics::pvData::TimeStamp timeStamp;;
608  epics::pvData::PVTimeStamp pvTimeStamp;
609  friend class PvaClientNTMultiGet;
610  friend class PvaClientNTMultiPut;
612 };
613 
614 
615 }}
616 
617 #endif /* PVACLIENTMULTICHANNEL_H */
std::tr1::shared_ptr< PvaClient > PvaClientPtr
Definition: pvaClient.h:46
double timeout
Definition: pvutils.cpp:25
PvaClientMultiMonitorDoublePtr getPtrSelf()
Monitor the shared pointer to self.
epics::pvData::shared_vector< PvaClientChannelPtr > PvaClientChannelArray
PvaMultiChannel is a synchronous interface for accessing multiple channels.
Definition: link.h:174
std::string request
Methods for manipulating alarm.
Definition: alarm.h:105
std::tr1::shared_ptr< detail::SharedPut > put
pvd::Status status
TODO only here because of the Lockable.
Definition: ntaggregate.cpp:16
std::tr1::shared_ptr< const Structure > StructureConstPtr
Definition: pvIntrospect.h:162
Provides channelGet to multiple channels where each channel has a numeric scalar value field...
PvaClientNTMultiDataPtr getPtrSelf()
Get the shared pointer to self.
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...
PVStructure::shared_pointer createRequest(std::string const &request)
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< const Union > UnionConstPtr
Definition: pvIntrospect.h:170
#define POINTER_DEFINITIONS(clazz)
Definition: sharedPtr.h:198
PvaClientMultiPutDoublePtr getPtrSelf()
Get the shared pointer to self.
epicsMutex mutex
Definition: pvAccess.cpp:71
std::tr1::shared_ptr< PvaClientNTMultiPut > PvaClientNTMultiPutPtr
Methods for accessing a timeStamp structure.
Definition: pvTimeStamp.h:38
#define epicsShareClass
Definition: shareLib.h:206
std::tr1::shared_ptr< PVStructure > PVStructurePtr
Definition: pvData.h:87
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
std::tr1::shared_ptr< NTMultiChannel > NTMultiChannelPtr
PvaClientNTMultiPutPtr getPtrSelf()
Get the shared pointer to self.
PvaClientNTMultiGetPtr getPtrSelf()
Get the shared pointer to self.
PvaClientMultiGetDoublePtr getPtrSelf()
Get the shared pointer to self.
epicsMutex Mutex
Definition: lock.h:28
Provides NTMultiChannel data for both PvaClientNTMultiGet and PvaClientNTMultiMonitor.
Methods for manipulating timeStamp.
Definition: timeStamp.h:43
std::tr1::shared_ptr< PvaClientMultiPutDouble > PvaClientMultiPutDoublePtr