My Project
 All Classes Files Functions Variables Enumerations Enumerator Friends Macros Pages
monitor_viewer.h
1 #ifndef monitor_viewer_h
2 #define monitor_viewer_h
3 
4 #include <stddef.h> /* size_t */
5 
6 #include "color_tab.h"
7 #include "arraymap.h"
8 #include "monitor_stream.h"
9 #include "im_monitor_stream.h"
10 #include "input.h"
11 #include "optcam.h"
12 
13 /*
14  * The MonitorViewer object records the contents and state of the viewer.
15  */
16 typedef struct MonitorViewer MonitorViewer;
17 
18 MonitorViewer *new_MonitorViewer(size_t buff_size);
19 MonitorViewer *del_MonitorViewer(MonitorViewer *view);
20 int rem_MonitorViewer_pages(MonitorViewer *view);
21 int rem_MonitorViewer_plots(MonitorViewer *view);
22 int change_MonitorStream(MonitorViewer *view, gcp::control::MonitorStream *ms, int defer);
23 int change_ImMonitorStream(MonitorViewer *view, ImMonitorStream *ims);
24 int clr_MonitorBuff(MonitorViewer *view);
25 ArrayMap *MonitorViewer_ArrayMap(MonitorViewer *view);
26 int MonitorViewer_fd(MonitorViewer *view);
27 int MonitorViewer_im_fd(MonitorViewer *view);
28 gcp::control::MsSendState update_MonitorViewer(MonitorViewer *view);
29 gcp::control::MsReadState read_MonitorViewer_frame(MonitorViewer *view);
30 ImsReadState read_MonitorViewer_image(MonitorViewer *view);
31 gcp::control::MsSendState send_MonitorViewer_msg(MonitorViewer *view, int dowait);
32 ImsSendState send_MonitorViewer_im_msg(MonitorViewer *view, int dowait);
33 gcp::control::MsSendState set_MonitorViewer_interval(MonitorViewer *view, unsigned interval);
34 gcp::control::MsSendState queue_MonitorViewer_rewind(MonitorViewer *view);
35 int can_MonitorViewer_rewind(MonitorViewer *view);
36 bool is_MonitorViewer_archivedOnly(MonitorViewer* view);
37 
38 /*
39  * The viewer can contain many plots, each of which is rendered on a separate
40  * pgplot output device.
41  */
42 typedef struct MonitorPlot MonitorPlot;
43 
44 unsigned tag_of_MonitorPlot(MonitorPlot *plot);
45 MonitorPlot *add_MonitorPlot(MonitorViewer *view, char *device, char* type);
46 
47 /*
48  * Enumerate the possible scrolling modes.
49  */
50 typedef enum {
51  SCROLL_DISABLED, /* No scrolling required */
52  SCROLL_MAXIMUM, /* Scroll to keep the maximum visible */
53  SCROLL_MINIMUM /* Scroll to keep the minimum visible */
54 } MpScrollMode;
55 
56 typedef enum {
57  PLOT_NORM,
58  PLOT_POWSPEC
59 } MpPlotType;
60 
61 int config_MonitorPlot(MonitorPlot *plot, char *title, double xleft,
62  double xright, unsigned marker_size, int join,
63  MpScrollMode scroll_mode, double scroll_margin,
64  char *xreg, char *xlabel,
65  char* type, int npt, double dx, bool linAxis=true);
66 
67 MonitorPlot *rem_MonitorPlot(MonitorPlot *plot);
68 int rem_MonitorPlot_graphs(MonitorPlot *plot);
69 int limit_MonitorPlot(MonitorPlot *plot);
70 MonitorPlot *find_MonitorPlot(MonitorViewer *view, unsigned tag);
71 int full_MonitorPlot_xrange(MonitorPlot *plot, double *xmin, double *xmax);
72 int update_MonitorPlot(MonitorPlot *plot, int force);
73 int resize_MonitorPlot(MonitorPlot *plot);
74 
75 /*
76  * Each plot can contain many graphs, with all graphs sharing the same x-axis.
77  */
78 typedef struct MonitorGraph MonitorGraph;
79 
80 unsigned tag_of_MonitorGraph(MonitorGraph *graph);
81 MonitorGraph *add_MonitorGraph(MonitorPlot *plot);
82 int config_MonitorGraph(MonitorGraph *graph, double ybot, double ytop,
83  char *ylabel, char *yregs, unsigned int bits,
84  bool track, bool vecAv, bool linAxis, unsigned apodType);
85 
86 MonitorGraph *rem_MonitorGraph(MonitorGraph *graph);
87 int clr_MonitorGraph_regs(MonitorGraph *graph);
88 MonitorGraph *find_MonitorGraph(MonitorPlot *plot, unsigned tag);
89 int update_MonitorGraph(MonitorGraph *graph, int force);
90 int int_MonitorGraph(MonitorGraph *graph, bool integrate);
91 int auto_MonitorGraph_yrange(MonitorGraph *graph, double *ymin, double *ymax);
92 int powSpecPkIdent(MonitorGraph* graph, int npk, double xleft, double xright, bool full);
93 
94 /*
95  * The viewer can also contain multiple pages, consisting of a collection
96  * of textual fields.
97  */
98 typedef struct MonitorPage MonitorPage;
99 
100 unsigned tag_of_MonitorPage(MonitorPage *page);
101 MonitorPage *add_MonitorPage(MonitorViewer *view);
102 MonitorPage *find_MonitorPage(MonitorViewer *view, unsigned tag);
103 MonitorPage *rem_MonitorPage(MonitorPage *page);
104 int freeze_MonitorPage(MonitorPage *page);
105 int unfreeze_MonitorPage(MonitorPage *page);
106 
107 /*
108  * Each field on a page shows the instantaneous value of one register,
109  * textually formatted in one of a variety of ways.
110  */
111 typedef struct MonitorField MonitorField;
112 
113 /*
114  * Describe the textual output formats supported by MonitorField's.
115  */
116 typedef enum {
117  MF_FIXED_POINT, /* Fixed point decimal (%f) */
118  MF_SCIENTIFIC, /* Fixed point exponential (%e) */
119  MF_FLOATING, /* Floating point (%g) */
120  MF_SEXAGESIMAL, /* Degrees/hours,minutes,seconds format */
121  MF_INTEGER, /* Base 10 integer */
122  MF_HEX, /* Base 16 integer */
123  MF_OCTAL, /* Base 8 integer */
124  MF_BINARY, /* Base 2 integer */
125  MF_STRING, /* A printable string */
126  MF_DATE, /* The date and time from a mjd/ms register pair */
127  MF_BIT, /* Display a single bit of an unsigned integer field */
128  MF_ENUM, /* Enumerated names for integer values, taken from a */
129  /* user specified list of names, starting with the */
130  /* name to give the value 0. If an integer value */
131  /* is out of the range of the name list, the value */
132  /* is displayed as a base 10 integer. */
133  MF_BOOL,
134  MF_COMPLEX_FIXED
135 } MonitorFormat;
136 
137 MonitorField *add_MonitorField(MonitorPage *page);
138 unsigned tag_of_MonitorField(MonitorField *field);
139 int config_MonitorField(MonitorField *field, char *regname,
140  MonitorFormat format, char *flags,
141  int width, int precision, int misc,
142  char *names, int warn, double vmin, double vmax,
143  int dopage, int nframe);
144 MonitorField *rem_MonitorField(MonitorField *field);
145 MonitorField *find_MonitorField(MonitorPage *page, unsigned tag);
146 int rem_MonitorPage_fields(MonitorPage *page);
147 
148 typedef struct MonitorImage MonitorImage;
149 
150 int open_MonitorImage(MonitorViewer *view, char *device);
151 void draw_MonitorImage_data(MonitorViewer *view);
152 
153 void set_MonitorImage_centroid(MonitorViewer *view, unsigned xpeak, unsigned ypeak);
154 void find_MonitorImage_centroid(MonitorViewer *view, double& xcntr,
155  double& ycntr, int centroid);
156 void fid_MonitorImage_contrast(MonitorViewer *view, double xa, double ya);
157 void set_MonitorImage_range(MonitorViewer *view, double xa, double xb, double ya, double yb);
158 int install_MonitorImage_colormap(MonitorViewer *view, char *name);
159 int reset_MonitorImage_colormap(MonitorViewer *view);
160 int reset_MonitorImage_contrast(MonitorViewer *view);
161 void get_MonitorImage_greyscale(MonitorImage *image);
162 void get_MonitorImage_stats(MonitorViewer *view, double xmin, double xmax,
163  double ymin, double ymax, double *min, double *max,
164  double *mean, double *rms, int *npoint);
165 void set_MonitorImage_step(MonitorViewer *view, double interval);
166 
167 void set_MonitorImage_fov(MonitorViewer *view, double fov);
168 void set_MonitorImage_aspect(MonitorViewer *view, double aspect);
169 void toggle_MonitorImage_grid(MonitorViewer *view);
170 void toggle_MonitorImage_bullseye(MonitorViewer *view);
171 void toggle_MonitorImage_crosshair(MonitorViewer *view);
172 void toggle_MonitorImage_compass(MonitorViewer *view);
173 void set_MonitorImage_compass(MonitorViewer *view, double angle);
174 
175 /*
176  * Where provided, the following optional function is used to
177  * delete the user_data argument of scroll and field callbacks.
178  *
179  * Input:
180  * user_data void * The argument of the same name that was
181  * passed to mp_scroll_callback() or
182  * add_MonitorField().
183  * Output:
184  * return void * The deleted user_data (always return NULL).
185  */
186 #define MP_DEL_FN(fn) void *(fn)(void *user_data)
187 
188 /*
189  * A function of the following type is registered to each text field of
190  * a page. It is called whenever new data arrives to dispatch the
191  * the formatted value of the associated register element.
192  *
193  * Input:
194  * user_data void * Anonymous data registered with the function.
195  * page MonitorPage * The page to which the field belongs.
196  * value char * The formatted value of the register.
197  * warn int This is non-zero if the field-value is out
198  * outside a previously specified range.
199  * page int This is non-zero if we should activate the pager
200  */
201 #define MP_FIELD_FN(fn) void (fn)(void *user_data, MonitorPage *page, \
202  char *value, int warn, int dopage, int reset)
203 
204 int mf_callback_fn(MonitorField *field, MP_FIELD_FN(*field_fn),
205  void *user_data, MP_DEL_FN(*del_fn));
206 /*
207  * A function of the following type can be registered to be called
208  * whenever a given plot is scrolled.
209  *
210  * Input:
211  * user_data void * Anonymous data registered with the function.
212  * plot MonitorPlot * The plot that was scrolled.
213  * wxa,wxb double The new scrolled X-axis limits (world
214  * coordinates).
215  */
216 #define MP_SCROLL_FN(fn) void (fn)(void *user_data, MonitorPlot *plot, \
217  double wxa, double wxb)
218 
219 int mp_scroll_callback(MonitorPlot *plot, MP_SCROLL_FN(*user_fn),
220  void *user_data, MP_DEL_FN(*del_fn));
221 int mp_cursor_to_graph(MonitorPlot *plot, MonitorGraph **graph,
222  double *x, double *y);
223 int mp_graph_to_cursor(MonitorGraph *graph, double *x, double *y);
224 
225 
226 // Deprecated
227 
228 int find_Monitor_point(MonitorGraph *graph, double x, double y,
229  gcp::util::RegDescription& desc, double *xo, double *yo);
230 
231 // New version
232 
233 int findMonitorPoint(MonitorGraph *graph,
234  double x, double y,
235  gcp::util::RegDescription& closestReg,
236  double& xo, double& yo);
237 
238 typedef enum {
239  MRS_UNINIT,
240  MRS_MEAN,
241  MRS_RMS,
242 } MonitorRegStatState;
243 
244 typedef struct {
245  double min; /* The minimum buffered value */
246  double max; /* The maximum buffered value */
247  double mean; /* The mean of the buffered values */
248  double rms; /* The rms difference from the mean */
249  int npoint; /* The number of points sampled */
250  double nsig; /* nsig from zero = mean/(sigma/sqrt(n)) */
251  MonitorRegStatState state;
252 
253  void insert(double xval, double yval);
254 
256 
257 
258 
259 int mp_global_RegStats(MonitorViewer *view, gcp::util::RegDescription* ydesc,
260  MonitorRegStats *stats);
261 int mpRegStats(MonitorPlot *plot, double xa, double xb,
263 int mp_hardcopy(MonitorPlot *plot, char *device);
264 
265 int mp_resize_buffer(MonitorViewer *view, size_t size);
266 
267 int mp_xaxis_limits(MonitorPlot *plot, double *xmin, double *xmax);
268 
269 int mp_set_calfile(MonitorViewer *view, char *calfile);
270 int reset_MonitorField_counters(MonitorViewer *view);
271 
272 void outputRegName(OutputStream* output,
273  MonitorGraph* graph,
275 
276 // Output the name of a register for statistics calculations
277 
278 void outputStatName(OutputStream* output,
279  MonitorGraph* graph,
281 
282 RegInputMode inputStatMode(MonitorPlot* plot);
283 RegOutputMode outputStatMode(MonitorPlot* plot);
284 
285 void change_MonitorImage_ximdir(MonitorViewer* view, int dir);
286 void change_MonitorImage_yimdir(MonitorViewer* view, int dir);
287 
288 #endif
Definition: monitor_viewer.c:730
Definition: monitor_viewer.c:124
Definition: monitor_viewer.c:992
Definition: monitor_stream.h:190
Definition: monitor_viewer.c:463
Definition: im_monitor_stream.c:11
Definition: monitor_viewer.h:244
Definition: monitor_viewer.c:174
Definition: RegDescription.h:26
Definition: output.h:40
Definition: monitor_viewer.c:220
Definition: arraymap.h:177