CARMA C++
SzaMonitorSystemMap.h
Go to the documentation of this file.
1 // $Id: SzaMonitorSystemMap.h,v 1.5 2012/08/14 22:03:11 eml Exp $
2 
3 #ifndef SZA_ANTENNA_CORBA_SZAMONITORSYSTEMMAP_H
4 #define SZA_ANTENNA_CORBA_SZAMONITORSYSTEMMAP_H
5 
18 
19 #include "carma/szaarrayutils/arraytemplate.h"
20 #include "carma/szaarrayutils/arraymap.h"
21 
23 #include "carma/szautil/BitMask.h"
24 #include "carma/szautil/String.h"
25 
26 #define MAX_CARMA_STRING_LENGTH 80
27 #define MP_PACK_FN(fn) void (fn)(carma::monitor::MonitorPoint* mp, unsigned nSamp, sza::util::ArrayDataFrameManager* dfm, \
28  ArrRegMap* aregmap, RegMapBlock* blk, void* ptr)
29 
30 namespace sza {
31  namespace antenna {
32  namespace corba {
33 
34  class SzaMonitorSystemMap {
35  public:
36 
37  //=======================================================================
38  // Struct to encapsulate a single register (CARMA monitor point)
39  //=======================================================================
40 
41  struct SzaBlkTemp {
42  SzaBlkTemp();
43  void packData(sza::util::BitMask& bitMask);
44  void addRegister(carma::monitor::MonitorPoint* mp);
45 
47  ArrRegMap* aregmap_;
48  RegMapBlock* blk_;
49  sza::util::ArrayDataFrameManager* dfm_;
50  unsigned nSamp_;
51  MP_PACK_FN(*packFn_);
52  void* ptr_;
53  };
54 
55  //=======================================================================
56  // Struct to encapsulate a board of registers (container of CARMA
57  // monitor points)
58  //=======================================================================
59 
60  struct SzaBrdTemp {
61  SzaBrdTemp();
62  virtual ~SzaBrdTemp();
63 
64  // Method for adding a register associated with a CARMA monitor point
65 
66  void addRegister(std::string blockName, carma::monitor::MonitorPoint* mp, ArrayMap* szaArrayMap=0);
67 
68  // Method for adding a register not associated with a CARMA monitor point
69 
70  void addRegister(std::string blockName, unsigned flags, unsigned nEl1, unsigned nEl2, std::string units="unknown");
71 
72  unsigned nBlock_;
73  std::map<std::string, SzaBlkTemp*> blockMap_;
74  std::vector<RegBlockTemp> blockVec_;
75  };
76 
77  //=======================================================================
78  // Struct to encapsulate a group of boards (container of containers)
79  //=======================================================================
80 
81  struct SzaRegmapTemp {
82 
83  // The number of boards encountered
84 
85  unsigned nBoard_;
86  std::map<std::string, SzaBrdTemp*> boardMap_;
87 
88  SzaRegmapTemp();
89  virtual ~SzaRegmapTemp();
90  void addRegister(std::string boardName, std::string blockName, carma::monitor::MonitorPoint* mp, ArrayMap* szaArrayMap=0);
91 
92  // Method for adding a register not associated with a CARMA monitor point
93 
94  void addRegister(std::string boardName, std::string blockName, unsigned flags,
95  unsigned nEl1, unsigned nEl2, std::string units="unknown");
96  };
97 
98  //=======================================================================
99  // Methods of SzaMonitorSystemMap itself
100  //=======================================================================
101 
102  // True when this object has been initialized from the CARMA monitor
103  // hierarchy
104 
105  bool initialized_;
106 
107  // The number of register maps in this array map
108 
109  unsigned nRegmap_;
110 
111  // The map of register maps encountered in the CARMA monitor stream
112 
113  std::map<std::string, SzaRegmapTemp*> regmapMap_;
114 
115  // The array template that corresponds to this hierarchy
116 
117  ArrayTemplate arrayTemplate_;
118  bool arrayTemplateIsInitialized_;
119 
120  // An array map generated from arrayTemplate_
121 
122  ArrayMap* arrayMap_;
123  bool registerPointersAreInitialized_;
124 
125  unsigned nSlAnt_;
126  unsigned nSlBase_;
127  unsigned iSlBandStart_;
128  unsigned nSlBandMax_;
129 
130  unsigned nWbAnt_;
131  unsigned nWbBase_;
132  unsigned iWbBandStart_;
133  unsigned nWbBandMax_;
134 
135  unsigned nChan_;
136 
137  unsigned nAntTotal_;
138 
139  ArrayMap* szaArrayMap_;
140 
141  // The total number of validity flags required to represent
142  // validity states for all registers in this map. Note that
143  // this is not in general equal to the total number of
144  // registers, since multi-element registers can have a single
145  // validity flag (strings) or multiple validity flags.
146 
147  unsigned nValidityFlags_;
148  unsigned nRegs_;
149 
150  sza::util::BitMask validityBitMask_;
151 
152  //------------------------------------------------------------
153  // Methods of SzaMonitorSystemMap
154  //------------------------------------------------------------
155 
156  SzaMonitorSystemMap();
157  virtual ~SzaMonitorSystemMap();
158 
159  static RegMapBlock* getSzaBlock(ArrayMap* arrayMap, sza::util::String& regmapName, sza::util::String& boardName,
160  sza::util::String& blockName);
161 
162  static bool addSzaFlags(carma::monitor::MonitorPoint* mp, unsigned& flags, ArrayMap* szaArrayMap=0);
163  static void addCarmaFlags(carma::monitor::MonitorPoint* mp, unsigned& flags);
164 
165  static void parseIntoRegisterStrings(carma::monitor::MonitorPoint* mp,
166  sza::util::String& regmapName,
167  sza::util::String& boardName,
168  sza::util::String& blockName);
169 
170  void constructArrayMapFromCarmaMonitorSystem(std::vector<carma::monitor::MonitorPoint*>& mpVec);
171 
172  void addWbCorrelatorRegisters(bool coherenceMonitor=false);
173  void addSlCorrelatorRegisters(bool coherenceMonitor=false);
174 
175  void addCorrelatorBoard(std::string regmapName, std::string boardName, unsigned nAnt, bool coherenceMonitor);
176 
177  ArrayMap* getArrayMap();
178  ArrayTemplate* getArrayTemplate();
179  ArrayTemplate* getFakeArrayTemplate();
180 
181  void print();
182  void setupRegisterPointers(sza::util::ArrayDataFrameManager& dfm);
183  void packData();
184  unsigned initializeValidityBitMask();
185  void initializeValidityBitIndices();
186  unsigned char* getValidityPtr();
187 
188  static MP_PACK_FN(packBool);
189  static MP_PACK_FN(packByte);
190  static MP_PACK_FN(packShort);
191  static MP_PACK_FN(packInt);
192  static MP_PACK_FN(packFloat);
193  static MP_PACK_FN(packComplexFloat);
194  static MP_PACK_FN(packDouble);
195  static MP_PACK_FN(packString);
196 
197  // Method for adding a register not associated with a CARMA monitor point
198 
199  void addRegister(std::string regmapName, std::string boardName, std::string blockName, unsigned flags,
200  unsigned nEl1=1, unsigned nEl2=0, std::string units="unknown");
201 
202  unsigned longestStringLen_;
203 
204  private:
205 
206  void addRegister(std::string regmapName, std::string boardName, std::string blockName,
208 
209  void generateArrayTemplate();
210  void generateArrayMap();
211 
212  static unsigned carmaMpToNel(carma::monitor::MonitorPoint* mp);
213  static unsigned carmaMpToFlags(carma::monitor::MonitorPoint* mp, ArrayMap* szaArrayMap);
214 
215  }; // End class SzaMonitorSystemMap
216 
217  } // End namespace corba
218  } // End namespace antenna
219 } // End namespace sza
220 
221 
222 
223 #endif // End #ifndef SZA_ANTENNA_CORBA_SZAMONITORSYSTEMMAP_H
An iterator to recursively extract MonitorPoints from MonitorContainers.
Classes that provide the pecializations of monitor points and sense poiints for different datatypes...
Tagged: Tue Mar 6 16:39:02 PST 2012.
The monitor system base class.
Tagged: Sat Mar 20 05:20:30 UTC 2004.
Abstract base class for a monitor point.
Definition: MonitorPoint.h:68
......................................................................
Definition: arraytemplate.h:27
Tagged: Wed May 12 09:30:13 PDT 2004.