My Project
 All Classes Files Functions Variables Enumerations Enumerator Friends Macros Pages
PagerMonitor.h
Go to the documentation of this file.
1 // $Id: PagerMonitor.h,v 1.2 2010/02/23 17:19:58 eml Exp $
2 
3 #ifndef GCP_UTIL_PAGERMONITOR_H
4 #define GCP_UTIL_PAGERMONITOR_H
5 
15 #include "gcp/util/common/ArrayDataFrameManager.h"
16 #include "gcp/util/common/MonitorCondition.h"
17 #include "gcp/util/common/MonitorPoint.h"
18 #include "gcp/util/common/MonitorPointManager.h"
19 #include "gcp/util/common/RegDescription.h"
20 
21 #include <string>
22 #include <vector>
23 
24 namespace gcp {
25  namespace util {
26 
39  class PagerMonitor {
40  public:
41 
45  struct RegSpec {
46 
47  RegSpec(std::string name,
48  double min=0, double max=0, bool isDelta=false,
49  unsigned nFrame=PagerMonitor::defaultNframe_,
50  bool isOutOfRange=false);
51 
53  RegDescription& desc, MonitorPoint* mp, bool outOfRange, MonitorPointManager& mpm);
54 
55  RegSpec(RegSpec& regSpec);
56 
57  RegSpec(const RegSpec& regSpec);
58 
59  void operator=(RegSpec& regSpec);
60  void operator=(const RegSpec& regSpec);
61 
62  // Output operator
63 
64  // A pointer to the block descriptor for this register
65 
66  RegMapBlock* block_;
67 
68  // The range of this register
69 
70  CoordRange range_;
71 
72  // A pointer to the start of the data for this register in the
73  // source data frame
74 
75  void* sourcePtr_;
76 
77  // A monitor point associated with this register
78 
79  MonitorPoint* mp_;
80 
81  // Other members needed for external pusposes
82 
83  std::string name_;
84  bool isDelta_;
85  bool isOutOfRange_;
86  unsigned nFrame_;
87  double min_;
88  double max_;
89 
90  // A method for copying this register into the destination
91  // frame
92 
93  void copyRegister();
94  };
95 
99  PagerMonitor();
101 
105  virtual ~PagerMonitor();
106 
107  void setHandler(MONITOR_CONDITION_HANDLER(*handler), void* arg=0);
108 
113  // Add a monitor point to activate the pager when a register
114  // goes out of the specified range
115 
116  std::vector<PagerMonitor::RegSpec>
117  addOutOfRangeMonitorPoint(std::string regSpec,
118  double min, double max,
119  bool delta=false,
120  unsigned nFrame=defaultNframe_,
121  std::string script="");
122 
123  // Add a monitor point to activate the pager when a register
124  // goes into the specified range
125 
126  std::vector<PagerMonitor::RegSpec>
127  addInRangeMonitorPoint(std::string regSpec,
128  double min, double max,
129  bool delta=false,
130  unsigned nFrame=defaultNframe_,
131  std::string script="");
132 
133  // And add monitor points associated with a register
134  // specification
135 
136  std::vector<PagerMonitor::RegSpec>
137  addMonitorPoint(std::string regSpec,
138  DataTypeTruthFn fn,
139  DataType& min,
140  DataType& max,
141  bool delta,
142  unsigned nFrame,
143  bool outOfRange,
144  std::string script="");
145 
146  // Remove a monitor point
147 
148  void remMonitorPoint(std::string regSpec);
149 
150  // A method to call to check registers
151 
152  void checkRegisters();
153 
154  // Reset all monitor points
155 
156  void reset();
157 
158  // Clear this manager of all monitor points
159 
160  void clear();
161 
162  // List all monitor points
163 
164  void list();
165 
166  // Return a list of all monitor points
167 
168  std::vector<PagerMonitor::RegSpec> getRegs();
169 
170  // Return a list of all monitor points
171 
172  std::vector<std::string> getList(bool sort=false);
173 
174  // Return a formatted printout of a single monitor point
175 
176  std::vector<std::string> format(std::string regSpec);
177 
178  // Output operator
179 
180  friend std::ostream& operator<<(std::ostream& os, PagerMonitor& pm);
181  friend std::ostream& operator<<(std::ostream& os, PagerMonitor::RegSpec& rs);
182 
183  // Lock/unlock this object
184 
185  inline void lock() {
186  guard_.lock();
187  }
188 
189  inline void unlock() {
190  guard_.unlock();
191  }
192 
193  // The default number of frames for which the condition must be
194  // met before activating the pager
195 
196  static unsigned defaultNframe_;
197 
198  private:
199 
200  // A pointer to the data frame that is the source of the latest
201  // data
202 
203  ArrayDataFrameManager* source_;
204 
205  // A destination frame, into which pager registers will be
206  // copied. This will be copy constructed from the input data
207  // frame manager.
208 
209  ArrayDataFrameManager dest_;
210 
211  // The monitor point manager
212 
213  MonitorPointManager mpManager_;
214 
215  // A handler to be called when a monitor condition is met
216 
217  MONITOR_CONDITION_HANDLER(*handler_);
218 
219  void* arg_;
220 
221  // A vector of monitor points
222 
223  std::vector<PagerMonitor::RegSpec> registers_;
224 
225  // A mutex variable for protecting this object
226 
227  Mutex guard_;
228 
229  }; // End class PagerMonitor
230 
231  } // End namespace util
232 } // End namespace gcp
233 
234 
235 
236 #endif // End #ifndef GCP_UTIL_PAGERMONITOR_H
Definition: PagerMonitor.h:39
PagerMonitor()
Definition: PagerMonitor.cc:21
void unlock()
Definition: Mutex.cc:104
std::vector< PagerMonitor::RegSpec > addMonitorPoint(std::string regSpec, DataTypeTruthFn fn, DataType &min, DataType &max, bool delta, unsigned nFrame, bool outOfRange, std::string script="")
Definition: PagerMonitor.cc:144
Definition: PagerMonitor.h:45
Definition: ArrayDataFrameManager.h:22
std::vector< std::string > getList(bool sort=false)
Definition: PagerMonitor.cc:391
void remMonitorPoint(std::string regSpec)
Definition: PagerMonitor.cc:223
Definition: MonitorPoint.h:32
Definition: CoordRange.h:20
void lock()
Definition: Mutex.cc:72
std::vector< std::string > format(std::string regSpec)
Definition: PagerMonitor.cc:405
std::vector< PagerMonitor::RegSpec > getRegs()
Definition: PagerMonitor.cc:440
RegSpec(std::string name, double min=0, double max=0, bool isDelta=false, unsigned nFrame=PagerMonitor::defaultNframe_, bool isOutOfRange=false)
Definition: PagerMonitor.cc:276
Definition: DataTypeTruthFn.h:24
void checkRegisters()
Definition: PagerMonitor.cc:42
virtual ~PagerMonitor()
Definition: PagerMonitor.cc:31
std::vector< PagerMonitor::RegSpec > addInRangeMonitorPoint(std::string regSpec, double min, double max, bool delta=false, unsigned nFrame=defaultNframe_, std::string script="")
Definition: PagerMonitor.cc:123
void clear()
Definition: PagerMonitor.cc:374
void copyRegister()
Definition: PagerMonitor.cc:54
std::vector< PagerMonitor::RegSpec > addOutOfRangeMonitorPoint(std::string regSpec, double min, double max, bool delta=false, unsigned nFrame=defaultNframe_, std::string script="")
Definition: PagerMonitor.cc:100
Definition: DataType.h:27
void reset()
Definition: PagerMonitor.cc:366
Definition: RegDescription.h:26
void list()
Definition: PagerMonitor.cc:383
Definition: MonitorPointManager.h:25