My Project
 All Classes Files Functions Variables Enumerations Enumerator Friends Macros Pages
ArrayMapDataFrameManager.h
Go to the documentation of this file.
1 #ifndef GCP_UTIL_ARRAYMAPDATAFRAMEMANAGER_H
2 #define GCP_UTIL_ARRAYMAPDATAFRAMEMANAGER_H
3 
11 #include <string>
12 
13 #include "gcp/control/code/unix/libunix_src/specific/specificregs.h"
14 
15 #include "gcp/util/common/DataFrameManager.h"
16 #include "gcp/util/common/RegMapDataFrameManager.h"
17 #include "gcp/util/common/RegRange.h"
18 #include "gcp/util/common/Complex.h"
19 
20 namespace gcp {
21  namespace util {
22 
23  class CoordRange;
24  class Date;
25  class RegDescription;
26  class BoardDataFrameManager;
27 
29  public:
30 
34  virtual ~ArrayMapDataFrameManager();
35 
39  void operator=(DataFrameManager& manager);
40 
44  virtual void operator=(ArrayMapDataFrameManager& manager);
45 
52 
56  void writeRegMap(ArrRegMap* aregmap,
57  RegMapDataFrameManager& fm, bool lockFrame);
58 
59  void writeRegMap(std::string regmap,
60  RegMapDataFrameManager& fm, bool lockFrame);
61 
65  void readRegMap(ArrRegMap* aregmap, RegMapDataFrameManager& fm);
66  void readRegMap(std::string regmap, RegMapDataFrameManager& fm);
67 
68  // Copy the contents of a BoardDataFrameManager to the
69  // appropriate place in the array map.
70 
72  bool lockFrame);
73 
75  bool lockFrame);
76 
77  //-------------------------------------------------------------
78  // Methods to pack a named register.
79  //-------------------------------------------------------------
80 
81  void writeReg(std::string regmap, std::string board, std::string name,
82  unsigned char* data, CoordRange* range=0);
83 
84  void writeReg(std::string regmap, std::string board, std::string name,
85  signed char* data, CoordRange* range=0);
86 
87  void writeReg(std::string regmap, std::string board, std::string name,
88  bool* data, CoordRange* range=0);
89 
90  void writeReg(std::string regmap, std::string board, std::string name,
91  unsigned short* data, CoordRange* range=0);
92 
93  void writeReg(std::string regmap, std::string board, std::string name,
94  signed short* data, CoordRange* range=0);
95 
96  void writeReg(std::string regmap, std::string board, std::string name,
97  unsigned int* data, CoordRange* range=0);
98 
99  void writeReg(std::string regmap, std::string board, std::string name,
100  signed int* data, CoordRange* range=0);
101 
102  void writeReg(std::string regmap, std::string board, std::string name,
103  float* data, CoordRange* range=0);
104 
105  void writeReg(std::string regmap, std::string board, std::string name,
106  double* data, CoordRange* range=0);
107 
108  void writeReg(std::string regmap, std::string board, std::string name,
109  RegDate::Data* data, CoordRange* range=0);
110 
111  void writeReg(std::string regmap, std::string board, std::string name,
112  Complex<float>::Data* data, CoordRange* range=0);
113 
114  //-------------------------------------------------------------
115  // Methods to pack single-valued registers.
116  //-------------------------------------------------------------
117 
118  void writeReg(std::string regmap, std::string board, std::string name,
119  unsigned char data, CoordRange* range=0);
120 
121  void writeReg(std::string regmap, std::string board, std::string name,
122  signed char data, CoordRange* range=0);
123 
124  void writeReg(std::string regmap, std::string board, std::string name,
125  bool data, CoordRange* range=0);
126 
127  void writeReg(std::string regmap, std::string board, std::string name,
128  unsigned short data, CoordRange* range=0);
129 
130  void writeReg(std::string regmap, std::string board, std::string name,
131  signed short data, CoordRange* range=0);
132 
133  void writeReg(std::string regmap, std::string board, std::string name,
134  unsigned int data, CoordRange* range=0);
135 
136  void writeReg(std::string regmap, std::string board, std::string name,
137  signed int data, CoordRange* range=0);
138 
139  void writeReg(std::string regmap, std::string board, std::string name,
140  float data, CoordRange* range=0);
141 
142  void writeReg(std::string regmap, std::string board, std::string name,
143  double data, CoordRange* range=0);
144 
145  void writeReg(std::string regmap, std::string board, std::string name,
146  RegDate::Data data, CoordRange* range=0);
147 
148  void writeReg(std::string regmap, std::string board, std::string name,
149  Complex<float>::Data data, CoordRange* range=0);
150 
151  //-------------------------------------------------------------
152  // Methods to pack a named register.
153  //-------------------------------------------------------------
154 
155  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
156  unsigned char* data, CoordRange* range=0);
157 
158  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
159  signed char* data, CoordRange* range=0);
160 
161  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
162  bool* data, CoordRange* range=0);
163 
164  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
165  unsigned short* data, CoordRange* range=0);
166 
167  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
168  signed short* data, CoordRange* range=0);
169 
170  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
171  unsigned int* data, CoordRange* range=0);
172 
173  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
174  signed int* data, CoordRange* range=0);
175 
176  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
177  float* data, CoordRange* range=0);
178 
179  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
180  double* data, CoordRange* range=0);
181 
182  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
183  RegDate::Data* data, CoordRange* range=0);
184 
185  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
186  Complex<float>::Data* data, CoordRange* range=0);
187 
188  //-------------------------------------------------------------
189  // Methods to pack a single-valued register.
190  //-------------------------------------------------------------
191 
192  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
193  unsigned char data, CoordRange* range=0);
194 
195  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
196  signed char data, CoordRange* range=0);
197 
198  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
199  bool data, CoordRange* range=0);
200 
201  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
202  unsigned short data, CoordRange* range=0);
203 
204  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
205  signed short data, CoordRange* range=0);
206 
207  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
208  unsigned int data, CoordRange* range=0);
209 
210  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
211  signed int data, CoordRange* range=0);
212 
213  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
214  float data, CoordRange* range=0);
215 
216  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
217  double data, CoordRange* range=0);
218 
219  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
220  RegDate::Data data, CoordRange* range=0);
221 
222  void writeReg(ArrRegMap* aregmap, RegMapBlock* blk,
223  Complex<float>::Data data, CoordRange* range=0);
224 
225  //------------------------------------------------------------
226  // Methods to read a named register
227  //------------------------------------------------------------
228 
229  void readReg(std::string regmap, std::string board, std::string name,
230  unsigned char* data, CoordRange* range=0);
231 
232  void readReg(std::string regmap, std::string board, std::string name,
233  signed char* data, CoordRange* range=0);
234 
235  void readReg(std::string regmap, std::string board, std::string name,
236  bool* data, CoordRange* range=0);
237 
238  void readReg(std::string regmap, std::string board, std::string name,
239  unsigned short* data, CoordRange* range=0);
240 
241  void readReg(std::string regmap, std::string board, std::string name,
242  signed short* data, CoordRange* range=0);
243 
244  void readReg(std::string regmap, std::string board, std::string name,
245  unsigned int* data, CoordRange* range=0);
246 
247  void readReg(std::string regmap, std::string board, std::string name,
248  signed int* data, CoordRange* range=0);
249 
250  void readReg(std::string regmap, std::string board, std::string name,
251  float* data, CoordRange* range=0);
252 
253  void readReg(std::string regmap, std::string board, std::string name,
254  double* data, CoordRange* range=0);
255 
256  void readReg(std::string regmap, std::string board, std::string name,
257  RegDate::Data* data, CoordRange* range=0);
258 
259  void readReg(std::string regmap, std::string board, std::string name,
260  Complex<float>::Data* data, CoordRange* range=0);
261 
262  //------------------------------------------------------------
263  // Methods to read a named register
264  //------------------------------------------------------------
265 
266  void readReg(ArrRegMap* aregmap, RegMapBlock* blk,
267  unsigned char* data, CoordRange* range=0);
268 
269  void readReg(ArrRegMap* aregmap, RegMapBlock* blk,
270  signed char* data, CoordRange* range=0);
271 
272  void readReg(ArrRegMap* aregmap, RegMapBlock* blk,
273  bool* data, CoordRange* range=0);
274 
275  void readReg(ArrRegMap* aregmap, RegMapBlock* blk,
276  unsigned short* data, CoordRange* range=0);
277 
278  void readReg(ArrRegMap* aregmap, RegMapBlock* blk,
279  signed short* data, CoordRange* range=0);
280 
281  void readReg(ArrRegMap* aregmap, RegMapBlock* blk,
282  unsigned int* data, CoordRange* range=0);
283 
284  void readReg(ArrRegMap* aregmap, RegMapBlock* blk,
285  signed int* data, CoordRange* range=0);
286 
287  void readReg(ArrRegMap* aregmap, RegMapBlock* blk,
288  float* data, CoordRange* range=0);
289 
290  void readReg(ArrRegMap* aregmap, RegMapBlock* blk,
291  double* data, CoordRange* range=0);
292 
293  void readReg(ArrRegMap* aregmap, RegMapBlock* blk,
294  RegDate::Data* data, CoordRange* range=0);
295 
296  void readReg(ArrRegMap* aregmap, RegMapBlock* blk,
297  Complex<float>::Data* data, CoordRange* range=0);
298 
299  // Return the value of the current register in a range, cast as
300  // a double
301 
302  double getRegVal(RegRange& range, bool lockFrame);
303 
304  // Return the value of the requested register index, cast as a double
305 
306  double getRegVal(RegDescription& desc);
307 
308  // Return true if this frame only contains archived registers
309 
310  inline bool archivedOnly() {return archivedOnly_;};
311 
312  // Return a pointer to the array map
313 
314  inline ArrayMap* arrayMap() {
315  return arrayMap_;
316  }
317 
321  unsigned int getId(unsigned nanoSecondInterval);
322 
323  int byteOffsetInFrameOf(std::string regmap, std::string board,
324  std::string block, Coord* coord=0);
325 
326  // Get a pointer to the start of the register described in a
327  // RegDescription, in our data frame.
328 
329  void* getPtr(RegDescription& desc);
330 
331  protected:
332 
333  ArrayMap* arrayMap_; // The GCP array map
334 
335  bool archivedOnly_; // True if this frame should
336  // contain only archived registers
340  ArrayMapDataFrameManager(bool archivedOnly_=false);
341 
346  int byteOffsetInFrameOf(ArrRegMap* aregmap);
347  int byteOffsetInFrameOf(std::string regmap, std::string board);
348  int byteOffsetInFrameOf(ArrRegMap* aregmap, RegMapBlock* blk,
349  Coord* coord=0);
350 
354  void packData(ArrRegMap* aregmap, RegMapBlock* blk,
355  void* data, CoordRange* range,
356  DataType::Type type, bool lockFrame=true);
357  void packData(std::string regmap, std::string board, std::string block,
358  void* data, CoordRange* range,
359  DataType::Type type, bool lockFrame=true);
360 
364  void unpackData(ArrRegMap* aregmap, RegMapBlock* blk,
365  void* data, CoordRange* range,
366  DataType::Type type, bool lockFrame=true);
367  void unpackData(std::string regmap, std::string board, std::string block,
368  void* data, CoordRange* range,
369  DataType::Type type,bool lockFrame=true);
370 
374  void checkType(std::string regmap, std::string board, std::string block,
375  DataType::Type type,
376  CoordRange* range);
377 
378  void checkType(ArrRegMap* aregmap, RegMapBlock* blk, DataType::Type type,
379  CoordRange* range);
380 
381  public:
385  RegMapBlock* getReg(std::string regmap, std::string board,
386  std::string block);
387 
388  RegMapBlock* findReg(std::string regmap, std::string board,
389  std::string block);
390 
391  ArrRegMap* getArrReg(std::string regmap);
392 
393  private:
397  bool regMapIsPresent(RegMap* regmap);
398 
402  bool boardIsPresent(RegMapBoard* brd);
403 
407  bool boardIsFlagged(ArrRegMap* aregmap, RegMapBoard* brd);
408 
412  bool blockIsPresent(RegMapBlock* blk);
413 
414  }; // End class ArrayMapDataFrameManager
415 
416  } // End namespace util
417 } // End namespace gcp
418 
419 
420 
421 #endif // End #ifndef GCP_UTIL_ARRAYMAPDATAFRAMEMANAGER_H
Definition: BoardDataFrameManager.h:31
double getRegVal(RegRange &range, bool lockFrame)
Definition: ArrayMapDataFrameManager.cc:1907
ArrRegMap * getArrReg(std::string regmap)
Definition: ArrayMapDataFrameManager.cc:435
void writeRegMap(ArrRegMap *aregmap, RegMapDataFrameManager &fm, bool lockFrame)
Definition: ArrayMapDataFrameManager.cc:1567
void * getPtr(RegDescription &desc)
Definition: ArrayMapDataFrameManager.cc:2054
RegMapBlock * findReg(std::string regmap, std::string board, std::string block)
Definition: ArrayMapDataFrameManager.cc:404
void unpackData(ArrRegMap *aregmap, RegMapBlock *blk, void *data, CoordRange *range, DataType::Type type, bool lockFrame=true)
Definition: ArrayMapDataFrameManager.cc:362
Definition: RegDate.h:22
Definition: RegRange.h:24
ArrayMapDataFrameManager(bool archivedOnly_=false)
Definition: ArrayMapDataFrameManager.cc:18
Definition: arraymap.h:63
Definition: Coord.h:21
void operator=(DataFrameManager &manager)
Definition: ArrayMapDataFrameManager.cc:33
Definition: CoordRange.h:20
virtual unsigned int getId()
Definition: DataFrameManager.h:128
void checkType(std::string regmap, std::string board, std::string block, DataType::Type type, CoordRange *range)
RegMapBlock * getReg(std::string regmap, std::string board, std::string block)
Definition: ArrayMapDataFrameManager.cc:411
void readBoard(BoardDataFrameManager &fm, bool lockFrame)
Definition: ArrayMapDataFrameManager.cc:1795
void writeBoard(BoardDataFrameManager &fm, bool lockFrame)
Definition: ArrayMapDataFrameManager.cc:1685
Definition: ArrayMapDataFrameManager.h:28
ArrayMapDataFrameManager & operator+=(ArrayMapDataFrameManager &fm)
Definition: ArrayMapDataFrameManager.cc:153
Definition: logfile.c:14
Definition: DataFrameManager.h:23
void readRegMap(ArrRegMap *aregmap, RegMapDataFrameManager &fm)
Definition: ArrayMapDataFrameManager.cc:1475
void packData(ArrRegMap *aregmap, RegMapBlock *blk, void *data, CoordRange *range, DataType::Type type, bool lockFrame=true)
Definition: ArrayMapDataFrameManager.cc:327
Definition: RegDescription.h:26
virtual ~ArrayMapDataFrameManager()
Definition: ArrayMapDataFrameManager.cc:28
Definition: Complex.h:26
Definition: RegMapDataFrameManager.h:26
Definition: arraymap.h:177