Cleanups, change log level for many operations, added info for some
[comedilib.git] / comedi_calibrate / calib.h
1
2 #ifndef __CALIB_H_
3 #define __CALIB_H_
4
5 #include <comedilib.h>
6 #if 0
7 #include <stdio.h>
8 #include <fcntl.h>
9 #include <unistd.h>
10 #include <errno.h>
11 #include <getopt.h>
12 #include <ctype.h>
13 #include <math.h>
14 #include <stdlib.h>
15 #include <string.h>
16 #endif
17
18 #define DPRINT(level,fmt,args...) do{if(verbose>=level)printf(fmt, ## args);}while(0)
19
20 #define N_CALDACS 32
21 #define N_OBSERVABLES 32
22
23 typedef struct{
24         int subdev;
25         int chan;
26
27         int maxdata;
28         int current;
29
30         int type;
31         double gain;
32 }caldac;
33
34 typedef struct{
35         char *name;
36
37         comedi_insn preobserve_insn;
38         lsampl_t preobserve_data;
39
40         comedi_insn observe_insn;
41
42         //comedi_range *range;
43         //int maxdata;
44
45         double target;
46 }observable;
47
48 extern caldac caldacs[N_CALDACS];
49 extern int n_caldacs;
50
51 extern observable observables[N_OBSERVABLES];
52 extern int n_observables;
53
54 extern comedi_t *dev;
55
56 extern int ad_subdev;
57 extern int da_subdev;
58 extern int eeprom_subdev;
59 extern int caldac_subdev;
60
61 extern char *devicename;
62 extern char *drivername;
63
64 extern int verbose;
65
66 enum {
67         STATUS_UNKNOWN = 0,
68         STATUS_GUESS,
69         STATUS_SOME,
70         STATUS_DONE
71 };
72 extern int device_status;
73
74 extern int do_output;
75
76 /* high level */
77
78 void observe(void);
79 void preobserve(int obs);
80 void observable_dependence(int obs);
81 void measure_observable(int obs);
82 void reset_caldacs(void);
83
84 /* drivers */
85
86 void ni_setup(void);
87
88 /* low level */
89
90 void set_target(int obs,double target);
91 void update_caldac(int i);
92 void setup_caldacs(void);
93 void postgain_cal(int obs1, int obs2, int dac);
94 void cal1(int obs, int dac);
95
96 /* misc and temp */
97
98 void channel_dependence(int adc,int range);
99 void caldac_dependence(int caldac);
100 void dump_curve(int adc,int caldac);
101 void chan_cal(int adc,int caldac,int range,double target);
102 int read_eeprom(int addr);
103
104 double read_chan(int adc,int range);
105 int read_chan2(char *s,int adc,int range);
106 void set_ao(comedi_t *dev,int subdev,int chan,int range,double value);
107 void check_gain(int ad_chan,int range);
108 double check_gain_chan(int ad_chan,int range,int cdac);
109
110 void (*do_cal)(void);
111 void cal_ni_results(void);
112
113 /* helper functions */
114
115 int get_bipolar_lowgain(comedi_t *dev,int subdev);
116 int get_bipolar_highgain(comedi_t *dev,int subdev);
117 int get_unipolar_lowgain(comedi_t *dev,int subdev);
118
119 /* printing scientific numbers */
120
121 int sci_sprint(char *s,double x,double y);
122 int sci_sprint_alt(char *s,double x,double y);
123
124 /* linear fitting */
125
126 typedef struct {
127         int n;
128
129         double *y_data;
130         double *yerr_data;
131         double *x_data;
132
133         double x0;
134         double dx;
135         double yerr;
136
137         /* stats */
138         double s1,sx,sy,sxy,sxx;
139
140         double min,max;
141
142         /* results */
143         double ave_x;
144         double ave_y;
145         double slope;
146         double err_slope;
147         double err_ave_y;
148         double S_min;
149         double dof;
150
151 }linear_fit_t;
152 int linear_fit_monotonic(linear_fit_t *l);
153 double linear_fit_func_y(linear_fit_t *l,double x);
154 double linear_fit_func_x(linear_fit_t *l,double y);
155 double check_gain_chan_x(linear_fit_t *l,unsigned int ad_chanspec,int cdac);
156
157 /* slowly varying measurements */
158
159 typedef struct{
160         comedi_t *dev;
161
162         int maxdata;
163         int order;
164         int aref;
165         int range;
166         int subd;
167         int chan;
168
169         comedi_range *rng;
170
171         int n;
172         double average;
173         double stddev;
174         double error;
175 }new_sv_t;
176
177 int new_sv_measure(new_sv_t *sv);
178 int new_sv_init(new_sv_t *sv,comedi_t *dev,int subdev,int chan,int range,int aref);
179
180
181 #endif
182