My Project
 All Classes Files Functions Variables Enumerations Enumerator Friends Macros Pages
Monitor.h
Go to the documentation of this file.
1 #ifndef GCP_UTIL_MONITOR_H
2 #define GCP_UTIL_MONITOR_H
3 
11 #include <map>
12 #include <string>
13 #include <vector>
14 
15 #include "gcp/control/code/unix/libmonitor_src/monitor_stream.h"
16 
17 #include "gcp/util/common/DataType.h"
18 #include "gcp/util/common/RegDate.h"
19 #include "gcp/util/common/RegDescription.h"
20 #include "gcp/util/common/MonitorDataType.h"
21 
22 namespace gcp {
23  namespace util {
24 
25  class Monitor {
26  public:
27 
31  Monitor(std::string arcDir, std::string calFile, std::string host,
32  std::string start, bool startWasSet,
33  std::string stop, bool stopWasSet,
34  std::string regFile);
35 
39  Monitor(std::string arcDir, std::string calFile,
40  std::string startMjd, std::string stopMjd);
41 
45  Monitor(std::string host, std::string calFile);
46 
50  virtual ~Monitor();
51 
55  void addRegister(std::string regmapName,
56  std::string boardName,
57  std::string regname,
58  RegAspect aspect=REG_PLAIN,
59  MonitorDataType::FormatType=MonitorDataType::FM_UNKNOWN,
60  char* formatString=0,
61  MonitorDataType::FormatType=MonitorDataType::FM_UNKNOWN,
62  CoordRange* range=0);
63 
67  void addRegister(std::string regSpec);
68 
72  gcp::control::MsReadState readNextFrame();
73 
78  void getRegister(std::string regmapName, std::string boardName,
79  std::string regname,
80  unsigned* data, CoordRange* range);
81 
82  void getRegister(std::string regmapName, std::string boardName,
83  std::string regname,
84  int* data, CoordRange* range);
85 
86  void getRegister(std::string regmapName, std::string boardName,
87  std::string regname,
88  unsigned long* data, CoordRange* range);
89 
90  void getRegister(std::string regmapName, std::string boardName,
91  std::string regname,
92  long* data, CoordRange* range);
93 
94  void getRegister(std::string regmapName, std::string boardName,
95  std::string regname,
96  float* data, CoordRange* range);
97 
98  void getRegister(std::string regmapName, std::string boardName,
99  std::string regname,
100  double* data, CoordRange* range);
101 
102  void printDoubleRegs();
103  void printUnsignedIntRegs();
104 
109  void readRegs();
110 
111  unsigned countFrames();
112 
117  std::vector<std::vector<double> > readRegsAsDoubles();
118  std::vector<std::vector<std::vector<MonitorDataType> > > readRegsAsDataTypes();
119 
124  void printRegs();
125  void printRegs2();
126 
131  std::vector<double> getRegsAsDoubles();
132  std::vector<std::vector<MonitorDataType> > getRegsAsDataTypes();
133 
134  std::vector<gcp::util::RegDescription> selectedRegs() {
135  return selectedRegs_;
136  }
137 
138  std::vector<gcp::util::MonitorDataType::FormatType> selectedFormats() {
139  return selectedFormats_;
140  }
141 
142  std::vector<gcp::util::MonitorDataType::FormatType> nativeFormats() {
143  return nativeFormats_;
144  }
145 
149  double getRegAsDouble(MonitorDataType val,
150  RegAspect aspect);
151 
155  void run();
156  void runTest();
157 
162  double* getCalSlotPtr(unsigned iSlot=0);
163 
164  void reinitialize();
165 
166  void printArrayMap(bool arcvhivedOnly);
167  std::vector<std::string> getArrayMapRegisters(bool archivedOnly);
168 
169  ArrayMap* arrayMap() {
170  return ms_->arraymap;
171  }
172 
173  private:
174 
175  enum KeywordType {
176  ADD_REGISTER,
177  READ,
178  UNKNOWN
179  };
180 
181  struct Keyword {
182  std::string keyword;
183  KeywordType type;
184  };
185 
186  static Keyword keywords[];
187  static int nKey_;
188 
189  struct Format {
190  std::string format;
191  MonitorDataType::FormatType type;
192  };
193 
194  static Monitor::Format formats[];
195  static int nFormat_;
196 
197  enum StreamType {
198  MS_FILE = 0x1,
199  MS_NET = 0x2,
200  MS_BOTH = MS_FILE | MS_NET
201  };
202 
203  Monitor::StreamType type_;
204 
205  OutputStream* outputStream_;
206  char fmtString_[100];
207 
209 
210  std::map<std::string, std::map<std::string, std::map<std::string, RegDescription* > > > regMap_;
211 
212  std::map<std::string, std::map<std::string, std::map<std::string, MonitorDataType::FormatType > > > regSelFormat_;
213 
214  std::map<std::string, std::map<std::string, std::map<std::string, MonitorDataType::FormatType > > > regNatFormat_;
215 
216  std::map<std::string, std::map<std::string, std::map<std::string, RegAspect > > > regAspect_;
217 
218  std::vector<RegDescription> selectedRegs_;
219  std::vector<RegAxisRange> regAxisRanges_;
220  std::vector<RegAspect> aspects_;
221  std::vector<MonitorDataType::FormatType> selectedFormats_;
222  std::vector<MonitorDataType::FormatType> nativeFormats_;
223  std::vector<MonitorSelection> selections_;
224  std::vector<std::string> formatStrings_;
225  std::vector<bool> hasFormatString_;
226 
227  std::string calFile_;
228  std::string host_;
229  std::string regFile_;
230  bool readRegSpecFromFile_;
231 
232  bool initialized_;
233 
234  bool hybrid_;
235 
239  void privateConstructor(std::string arcDir, std::string calFile,
240  std::string host,
241  std::string start, bool startWasSet,
242  std::string stop, bool stopWasSet,
243  std::string regFile);
244 
245  void setMonitoringInterval(unsigned interval);
246 
247  void sendMonitoringInterval();
248 
249  void sendRegisterSelection();
250 
251  void loadCalFile();
252 
253  void changeMonitorStream();
254 
255  public:
259  static double parseDateAndTime(std::string utc);
260 
261  static MonitorDataType::FormatType parseFormat(std::string format);
262 
263  private:
267  KeywordType readKeyword(InputStream* stream);
268 
272  MonitorDataType::FormatType readFormat(InputStream* stream);
273  char* readFormatString(InputStream* stream);
274 
278  void skipToNextLine(InputStream* stream);
279 
284  void addRegister(RegDescription& desc, MonitorDataType::FormatType format,
285  char* formatString);
286 
290  void addRegisters(std::vector<RegDescription>& regs,
291  MonitorDataType::FormatType format,
292  char* formatString);
293 
298  void addRegister(InputStream* stream);
299 
300  void getRegister(RegDescription* desc,
301  MonitorDataType* data, CoordRange* range);
302 
303  void getSingleRegisterVal(RegDescription* desc,
304  MonitorDataType* data, CoordRange* range);
305 
309  void getRegisterVals(std::vector<MonitorDataType>& data,
310  RegDescription* desc,
311  MonitorDataType* val,
312  RegAxisRange& regAxisRange);
313 
314  public:
315  static MonitorDataType::FormatType
316  formatOf(RegDescription& reg,
317  MonitorDataType::FormatType format=MonitorDataType::FM_UNKNOWN);
318 
319  private:
320  std::string formatStringOf(MonitorDataType::FormatType format,
321  RegAspect aspect);
322 
323  void outputReg(MonitorDataType val, RegAspect aspect, char* formatPtr);
324  MonitorDataType formatReg(MonitorDataType val, RegAspect aspect, std::string& formatStr);
325 
329  void formatRegs(std::vector<MonitorDataType>& vals,
330  MonitorDataType& val,
331  RegAspect aspect, std::string& formatStr);
332 
336  void convertDateToType(MonitorDataType& val);
337 
341  void convertComplexFloatToType(MonitorDataType& val, RegAspect aspect);
342 
343  void doubleToType(double val, MonitorDataType& type);
344 
345  }; // End class Monitor
346 
347  } // End namespace util
348 } // End namespace gcp
349 
350 
351 
352 
353 #endif // End #ifndef GCP_UTIL_MONITOR_H
void getRegister(std::string regmapName, std::string boardName, std::string regname, unsigned *data, CoordRange *range)
Definition: Monitor.cc:687
std::vector< std::vector< double > > readRegsAsDoubles()
Definition: Monitor.cc:1575
void printUnsignedIntRegs()
Definition: Monitor.cc:809
void run()
Definition: Monitor.cc:1736
Definition: MonitorDataType.h:16
void reinitialize()
Definition: Monitor.cc:361
Monitor(std::string arcDir, std::string calFile, std::string host, std::string start, bool startWasSet, std::string stop, bool stopWasSet, std::string regFile)
Definition: input.h:87
gcp::control::MsReadState readNextFrame()
Definition: Monitor.cc:282
Definition: CoordRange.h:20
std::vector< std::vector< MonitorDataType > > getRegsAsDataTypes()
Definition: Monitor.cc:925
double getRegAsDouble(MonitorDataType val, RegAspect aspect)
Definition: Monitor.cc:1441
double * getCalSlotPtr(unsigned iSlot=0)
Definition: Monitor.cc:2006
void printRegs()
Definition: Monitor.cc:838
unsigned countFrames()
Definition: Monitor.cc:339
Definition: Monitor.h:25
Definition: monitor_stream.h:190
void readRegs()
Definition: Monitor.cc:1560
std::vector< double > getRegsAsDoubles()
Definition: Monitor.cc:1186
Definition: datatype.c:158
void printDoubleRegs()
Definition: Monitor.cc:777
Definition: RegAxisRange.h:27
std::vector< std::vector< std::vector< MonitorDataType > > > readRegsAsDataTypes()
Definition: Monitor.cc:1593
static double parseDateAndTime(std::string utc)
Definition: Monitor.cc:1688
Definition: RegDescription.h:26
void addRegister(std::string regmapName, std::string boardName, std::string regname, RegAspect aspect=REG_PLAIN, MonitorDataType::FormatType=MonitorDataType::FM_UNKNOWN, char *formatString=0, MonitorDataType::FormatType=MonitorDataType::FM_UNKNOWN, CoordRange *range=0)
Definition: output.h:40
Definition: arraymap.h:177
virtual ~Monitor()
Definition: Monitor.cc:140