CARMA C++
CarmaMonitorPointHandler.h
Go to the documentation of this file.
1 #ifndef SZA_ANTENNA_CORBA_CARMAMONITORPOINTHANDLER_H
2 #define SZA_ANTENNA_CORBA_CARMAMONITORPOINTHANDLER_H
3 
13 #include "carma/szautil/DataType.h"
14 #include "carma/szautil/Directives.h"
16 
17 #include "carma/szaarrayutils/regmap.h"
18 
19 #if DIR_USE_ANT_CORBA
20 #include "carma/antenna/sza/antenna/corba/Corba.h"
22 
24 
25 #include <map>
26 
27 namespace carma {
28  namespace monitor {
29  class SzaSubsystem;
30  };
31 };
32 #endif
33 
34 #define MP_PACK_FN(fn) void (fn)(CarmaMonitorPointHandler::CarmaMonitorPoint& cmp)
35 
36 namespace sza {
37  namespace antenna {
38  namespace corba {
39 
40  class AntennaCorba;
41  class SzaShareCorba;
42 
43  class SzaCanReceivedMonitorPoint {
44  public:
45  std::string boardName_;
46  RegMapBlock* block_;
47  bool valid_;
48 
49  //------------------------------------------------------------
50  // Read the current value of the register managed by this
51  // object
52  //------------------------------------------------------------
53 
54  void read(SzaShareCorba* share);
55 
56  //------------------------------------------------------------
57  // Return true if any MPs for which this is the controlling
58  // monitor point should be written
59  //------------------------------------------------------------
60 
61  bool isValid() {
62  return valid_;
63  }
64 
65  //------------------------------------------------------------
66  // Invalidate this monitor point
67  //------------------------------------------------------------
68 
69  void invalidate(SzaShareCorba* share);
70 
71  //------------------------------------------------------------
72  // Constructor
73  //------------------------------------------------------------
74 
75  SzaCanReceivedMonitorPoint(RegMapBlock* block, std::string boardName) {
76  block_ = block;
77  boardName_ = boardName;
78  valid_ = true;
79  };
80 
81  //------------------------------------------------------------
82  // Copy constructors and = operators
83  //------------------------------------------------------------
84 
85  SzaCanReceivedMonitorPoint(SzaCanReceivedMonitorPoint& mp) {
86  *this = mp;
87  }
88 
89  SzaCanReceivedMonitorPoint(const SzaCanReceivedMonitorPoint& mp) {
90  *this = mp;
91  };
92 
93  void operator=(const SzaCanReceivedMonitorPoint& mp) {
94  *this = (SzaCanReceivedMonitorPoint&) mp;
95  }
96 
97  void operator=(SzaCanReceivedMonitorPoint& mp) {
98  block_ = mp.block_;
99  boardName_ = mp.boardName_;
100  valid_ = mp.valid_;
101  };
102 
103  };
104 
105  class CarmaMonitorPointHandler {
106  public:
107 
108 #if DIR_USE_ANT_CORBA
109  struct CarmaMonitorPoint {
110 
111  SzaShareCorba* share_;
112  RegMapBlock* szaBlock_; // The SZA register corresponding to this CARMA monitor point
113  SzaCanReceivedMonitorPoint* szaControlMp_; // If non-null,
114  // points to the
115  // register block
116  // controlling whether or not
117  // this mp should be written
119  std::vector<carma::monitor::MonitorPoint*> carmaMpVec_;
120  MP_PACK_FN(*packFn_);
121 
122  CarmaMonitorPoint() {
123  share_ = 0;
124  szaBlock_ = 0;
125  szaControlMp_ = 0;
126  carmaMp_ = 0;
127  carmaMpVec_.resize(0);
128  packFn_ = 0;
129  }
130 
131  // To be used only if a) the types are the same, and b) no
132  // unit conversion needs to happen to convert from SZA
133  // monitor point to CARMA monitor point
134 
135  void packData();
136 
137  };
138 #endif
139 
140  // CarmaMonitorPoint constructors
141 
142  CarmaMonitorPointHandler(AntennaCorba* parent);
143  CarmaMonitorPointHandler();
144 
145  // CarmaMonitorPoint desstructor
146 
147  virtual ~CarmaMonitorPointHandler();
148 
149  // Write a CARMA sequence number into the monitor stream
150 
151  void stageCarmaSeqNo(unsigned long seq,
152  sza::util::GenericTaskMsg::CarmaSeqNoType type,
153  bool success);
154 
155  // Write Common monitor points
156 
157  void stageCommonMonitorPoints();
158 
159  // Write Specific monitor points
160 
161  void stageSpecificMonitorPoints();
162 
163  // Stage all other SZA monitor points
164 
165  void stageSzaAllMonitorPoints();
166 
167  // Return the monitor point (if any) controlling whether
168  // another MP should be written
169 
170  SzaCanReceivedMonitorPoint* getControlMp(std::string boardName, std::string blockName);
171 
172  // Write staged monitor points to the monitor stream
173 
174  void writeMonitorPoints();
175 
176  // Initialize internal members of this object
177 
178  void initialize(sza::antenna::corba::AntennaCorba* parent);
179 
180  // Low-level functions to pack data into the monitor stream
181 
182  void packData(RegMapBlock* blk, void* data,
183  sza::util::CoordRange* range, sza::util::DataType::Type type);
184 
185  void packValue(RegMapBlock* blk, void* data,
186  sza::util::CoordRange* range, sza::util::DataType::Type type);
187 
188  static MP_PACK_FN(packBool);
189  static MP_PACK_FN(packChar);
190  static MP_PACK_FN(packUchar);
191  static MP_PACK_FN(packShort);
192  static MP_PACK_FN(packUshort);
193  static MP_PACK_FN(packInt);
194  static MP_PACK_FN(packUint);
195  static MP_PACK_FN(packFloat);
196  static MP_PACK_FN(packDouble);
197  static MP_PACK_FN(packString);
198  static MP_PACK_FN(packUtc);
199 
200  private:
201 
202  void writeTrackingStateMonitorPoints();
203  void writeRxStateMonitorPoint();
204  void writeLoStateMonitorPoint();
205 
206  void extractCommonMonitorPoints();
207  void extractSpecificMonitorPoints();
208  void extractSzaCanRcvdMonitorPoints();
209  void extractAllSzaMonitorPoints();
210 
211  void createMonitorPointMap();
212 
213  void assignMpPackFn(CarmaMonitorPoint& mp);
214 
215  bool newCaltert_;
216 
217  SzaShareCorba* share_;
218 
219  bool initialized_;
220 
221 #if DIR_USE_ANT_CORBA
222 
223  CarmaSeqNum driveSeqNo_;
224  CarmaSeqNum tuneSeqNo_;
225  CarmaSeqNum calSeqNo_;
226  CarmaSeqNum opticsSeqNo_;
227  CarmaSeqNum opticalTelSeqNo_;
228 
229  // An object which will serve as our entry point into the
230  // antenna monitor system
231 
232  carma::monitor::SzaSubsystem* antennaMonitor_;
233 
234  // A map of SZA blocks to CARMA monitor points
235 
236  std::map<RegMapBlock*, carma::monitor::MonitorPoint*> monitorMap_;
237 
238  // Control-system variables
239 
240  CarmaMonitorPoint time_;
241  CarmaMonitorPoint online_;
242  CarmaMonitorPoint antennaInitialized_;
243 
244  // Drive monitor points
245 
246  CarmaMonitorPoint sourcename_;
247  CarmaMonitorPoint rightAscension_;
248  CarmaMonitorPoint declination_;
249  CarmaMonitorPoint errorSky_;
250  CarmaMonitorPoint state_;
251  CarmaMonitorPoint safeState_;
252  CarmaMonitorPoint safeAzLow_;
253  CarmaMonitorPoint safeAzHigh_;
254  CarmaMonitorPoint safeElLow_;
255  CarmaMonitorPoint safeElHigh_;
256  CarmaMonitorPoint mode_;
257 
258  // Track monitor points
259 
260  CarmaMonitorPoint requestedAzimuth_;
261  CarmaMonitorPoint actualAzimuth_;
262  CarmaMonitorPoint errorAzimuth_;
263  CarmaMonitorPoint errorAzimuthSky_;
264  CarmaMonitorPoint azimuthRate_;
265  CarmaMonitorPoint requestedElevation_;
266  CarmaMonitorPoint actualElevation_;
267  CarmaMonitorPoint errorElevation_;
268  CarmaMonitorPoint elevationRate_;
269  CarmaMonitorPoint wrapLogic_;
270  CarmaMonitorPoint emergencyOff_;
271  CarmaMonitorPoint manualSwitch_;
272  CarmaMonitorPoint trackTolerance_;
273 
274  // Point monitor points
275 
276  CarmaMonitorPoint offsetAz_;
277  CarmaMonitorPoint offsetEl_;
278  CarmaMonitorPoint mountOffsetAz_;
279  CarmaMonitorPoint mountOffsetEl_;
280  CarmaMonitorPoint refraction_;
281  CarmaMonitorPoint refractionModel_;
282  CarmaMonitorPoint magnitude_;
283  CarmaMonitorPoint direction_;
284  CarmaMonitorPoint coefChange_;
285 
286  CarmaMonitorPoint optElCollErr_;
287  CarmaMonitorPoint optCrossElCollErr_;
288  CarmaMonitorPoint optSag_;
289 
290  CarmaMonitorPoint rx1cmElCollErr_;
291  CarmaMonitorPoint rx1cmCrossElCollErr_;
292  CarmaMonitorPoint rx1cmSag_;
293 
294  CarmaMonitorPoint rx3mmElCollErr_;
295  CarmaMonitorPoint rx3mmCrossElCollErr_;
296  CarmaMonitorPoint rx3mmSag_;
297 
298  CarmaMonitorPoint rx1mmElCollErr_;
299  CarmaMonitorPoint rx1mmCrossElCollErr_;
300  CarmaMonitorPoint rx1mmSag_;
301 
302  CarmaMonitorPoint selectedApert_;
303 
304  // Limit monitor points
305 
306  CarmaMonitorPoint azSwLimit_;
307  CarmaMonitorPoint elSwLimit_;
308  CarmaMonitorPoint azHwLimit_;
309  CarmaMonitorPoint elHwLimit_;
310  CarmaMonitorPoint azLowSwLimitVal_;
311  CarmaMonitorPoint azHighSwLimitVal_;
312  CarmaMonitorPoint azLowHwLimitVal_;
313  CarmaMonitorPoint azHighHwLimitVal_;
314  CarmaMonitorPoint elLowSwLimitVal_;
315  CarmaMonitorPoint elHighSwLimitVal_;
316  CarmaMonitorPoint elLowHwLimitVal_;
317  CarmaMonitorPoint elHighHwLimitVal_;
318 
319  // LO monitor points
320 
321  CarmaMonitorPoint oscFreq_;
322  CarmaMonitorPoint yigFreq_;
323  CarmaMonitorPoint yigIFLevel_;
324  CarmaMonitorPoint yigError_;
325  CarmaMonitorPoint yigState_;
326  CarmaMonitorPoint yigSweep_;
327  CarmaMonitorPoint loFreq_;
328  CarmaMonitorPoint loSweep_;
329  CarmaMonitorPoint loState_;
330 
331  // Receivers monitor points
332 
333  CarmaMonitorPoint currentRx_;
334  CarmaMonitorPoint rxState_;
335  CarmaMonitorPoint rxTsysState_;
336  CarmaMonitorPoint rxTsys_;
337  CarmaMonitorPoint rxOffsetAz_;
338  CarmaMonitorPoint rxOffsetEl_;
339  CarmaMonitorPoint compressorState_;
340  CarmaMonitorPoint tuneSeqNum_;
341  CarmaMonitorPoint dewarTemp_;
342 
343  // Location monitor points
344 
345  CarmaMonitorPoint latitude_;
346  CarmaMonitorPoint longitude_;
347  CarmaMonitorPoint altitude_;
348 
349  // Optical telescope monitor points
350 
351  CarmaMonitorPoint sizeX_;
352  CarmaMonitorPoint sizeY_;
353  CarmaMonitorPoint offsetX_;
354  CarmaMonitorPoint offsetY_;
355  CarmaMonitorPoint azFov_;
356  CarmaMonitorPoint elFov_;
357  CarmaMonitorPoint imageRotation_;
358  CarmaMonitorPoint cover_;
359  CarmaMonitorPoint centroidSeqNum_;
360 
361  // Optics monitor points
362 
363  CarmaMonitorPoint polarization_;
364  CarmaMonitorPoint opticsSeqNum_;
365 
366  // Calibrator monitor points
367 
368  CarmaMonitorPoint calState_;
369  CarmaMonitorPoint skyTemp_;
370  CarmaMonitorPoint ambTemp_;
371  CarmaMonitorPoint fixedTemp_;
372  CarmaMonitorPoint partialTrans_;
373  CarmaMonitorPoint spillOver_;
374  CarmaMonitorPoint calSeqNum_;
375 
376  // Secondary monitor points
377 
378  CarmaMonitorPoint focusState_;
379  CarmaMonitorPoint focusZ_;
380 
381  // PAM monitor points
382 
383  CarmaMonitorPoint totalPamAtten_;
384  CarmaMonitorPoint inputPamAtten_;
385  CarmaMonitorPoint outputPamAtten_;
386  CarmaMonitorPoint ifTotalPower_;
387 
388  // Varactor monitor points
389 
390  CarmaMonitorPoint varLockStatus_;
391  CarmaMonitorPoint varSweepEnabled_;
392  CarmaMonitorPoint varGunnEnabled_;
393  CarmaMonitorPoint varNoiseMeter_;
394  CarmaMonitorPoint varIfLevel_;
395  CarmaMonitorPoint varLoopGain_;
396  CarmaMonitorPoint varGunnCurrent_;
397 
398  // Bias monitor points
399 
400  CarmaMonitorPoint biasLockStatus_;
401  CarmaMonitorPoint biasSweepStatus_;
402 
403  // A vector of CARMA monitor points corresponding to all SZA
404  // monitor points
405 
406  std::vector<CarmaMonitorPoint> szaSpecificMonitorPoints_;
407 
408  // A vector of registers controlling the writing of other
409  // registers
410 
411  std::vector<SzaCanReceivedMonitorPoint> szaCanRcvdMonitorPoints_;
412 #endif
413 
414  }; // End class CarmaMonitorPointHandler
415 
416  } // End namespace corba
417  } // End namespace antenna
418 } // End namespace sza
419 
420 
421 
422 #endif // End #ifndef SZA_ANTENNA_CORBA_CARMAMONITORPOINTHANDLER_H
Tagged: Tue Jun 22 22:32:16 UTC 2004.
Abstract base class for all monitor points.
Tagged: Fri Nov 14 12:39:34 UTC 2003.
Abstract base class for a monitor point.
Definition: MonitorPoint.h:68
Tagged: Fri Sep 11 15:24:35 PDT 2009.