This is Unofficial EPICS BASE Doxygen Site
searchTimer.h
Go to the documentation of this file.
1 /*************************************************************************\
2 * Copyright (c) 2002 The University of Chicago, as Operator of Argonne
3 * National Laboratory.
4 * Copyright (c) 2002 The Regents of the University of California, as
5 * Operator of Los Alamos National Laboratory.
6 * EPICS BASE is distributed subject to a Software License Agreement found
7 * in file LICENSE that is included with this distribution.
8 \*************************************************************************/
9 
10 //
11 //
12 //
13 // L O S A L A M O S
14 // Los Alamos National Laboratory
15 // Los Alamos, New Mexico 87545
16 //
17 // Copyright, 1986, The Regents of the University of California.
18 //
19 //
20 // Author Jeffrey O. Hill
21 // johill@lanl.gov
22 // 505 665 1831
23 //
24 
25 #ifndef INC_searchTimer_H
26 #define INC_searchTimer_H
27 
28 #include "epicsMutex.h"
29 #include "epicsGuard.h"
30 #include "epicsTimer.h"
31 
32 #include "libCaAPI.h"
33 #include "caProto.h"
34 #include "netiiu.h"
35 
37 public:
38  virtual ~searchTimerNotify () = 0;
39  virtual void boostChannel (
41  virtual void noSearchRespNotify (
42  epicsGuard < epicsMutex > &, nciu &, unsigned ) = 0;
43  virtual double getRTTE ( epicsGuard < epicsMutex > & ) const = 0;
44  virtual void updateRTTE ( epicsGuard < epicsMutex > &, double rtte ) = 0;
45  virtual bool datagramFlush (
47  const epicsTime & currentTime ) = 0;
49  epicsGuard < epicsMutex > & ) const = 0;
50 };
51 
52 class searchTimer : private epicsTimerNotify {
53 public:
54  searchTimer (
55  class searchTimerNotify &, epicsTimerQueue &,
56  const unsigned index, epicsMutex &,
57  bool boostPossible );
58  virtual ~searchTimer ();
59  void start ( epicsGuard < epicsMutex > & );
60  void shutdown (
61  epicsGuard < epicsMutex > & cbGuard,
62  epicsGuard < epicsMutex > & guard );
63  void moveChannels (
65  void installChannel (
67  void uninstallChan (
69  void uninstallChanDueToSuccessfulSearchResponse (
71  ca_uint32_t respDatagramSeqNo, bool seqNumberIsValid,
72  const epicsTime & currentTime );
73  void show ( unsigned level ) const;
74 private:
75  tsDLList < nciu > chanListReqPending;
76  tsDLList < nciu > chanListRespPending;
77  epicsTime timeAtLastSend;
78  epicsTimer & timer;
79  searchTimerNotify & iiu;
80  epicsMutex & mutex;
81  double framesPerTry; /* # of UDP frames per search try */
82  double framesPerTryCongestThresh; /* one half N tries w congest */
83  unsigned retry;
84  unsigned searchAttempts; /* num search tries after last timer experation */
85  unsigned searchResponses; /* num search resp after last timer experation */
86  const unsigned index;
87  ca_uint32_t dgSeqNoAtTimerExpireBegin;
88  ca_uint32_t dgSeqNoAtTimerExpireEnd;
89  const bool boostPossible;
90  bool stopped;
91 
92  expireStatus expire ( const epicsTime & currentTime );
93  double period ( epicsGuard < epicsMutex > & ) const;
94  searchTimer ( const searchTimer & ); // not implemented
95  searchTimer & operator = ( const searchTimer & ); // not implemented
96 };
97 
98 #endif // ifdef INC_searchTimer_H
virtual ca_uint32_t datagramSeqNumber(epicsGuard< epicsMutex > &) const =0
virtual bool datagramFlush(epicsGuard< epicsMutex > &, const epicsTime &currentTime)=0
unsigned int ca_uint32_t
Definition: caProto.h:76
virtual ~searchTimerNotify()=0
epicsMutex mutex
Definition: pvAccess.cpp:71
APIs for the epicsMutex mutual exclusion semaphore.
virtual void boostChannel(epicsGuard< epicsMutex > &, nciu &)=0
virtual void noSearchRespNotify(epicsGuard< epicsMutex > &, nciu &, unsigned)=0
virtual double getRTTE(epicsGuard< epicsMutex > &) const =0
Definition: nciu.h:127
virtual void updateRTTE(epicsGuard< epicsMutex > &, double rtte)=0