6 sub check_cmdtest_func;
9 @ARGV = ('-') unless @ARGV;
12 if(!open(FILE,$ARGV)){
13 warn "Can't open $ARGV: $!\n";
17 #$func="parport_intr_cmdtest";
20 if( m/s->do_cmdtest.*=/ ){
22 $func =~ s/^.*do_cmdtest\s*=[\s\&]*(\w*);.*\n/\1/;
29 print "no cmdtest function\n";
33 foreach $func (@funcs) {
34 print "function: $func\n";
35 check_cmdtest_func($func);
46 if( $state==0 && m/$funcname/ ){
50 if( $state==1 && m/;/ ){ $state=0; }
51 if( $state==1 && m/\{/ ){
52 #print COUT "static int cmd_test(comedi_device *dev,comedi_subdevice *s,comedi_cmd *cmd)\n";
56 if( $state==1){ $line="$line $_"; }
59 if( m/^}/ ){ $state=0; }
64 print "E: couldn't grab function $funcname\n";
75 if( m/#define\s*$def/ ){
81 print "E: couldn't grab definition $def\n";
86 sub check_cmdtest_func
91 open(COUT,"> cmdtest.c") || die("can't open cmdtest.c: $!");
93 # open(CIN,"< cmdtest.in.c") || die("can't open cmdtest.in.c: $!");
94 # while(<CIN>){print COUT;}
98 print COUT "#define $func cmd_test\n";
100 # Dependencies. It's easy to do it manually
101 $func eq "dt2814_ai_cmdtest" && grab_def("DT2814_MAX_SPEED");
102 $func eq "pci9118_ai_cmdtest" && grab_def("PCI9118_BIPOLAR_RANGES");
103 $func eq "cb_pcidas_ai_cmdtest" && grab_def("TIMER_BASE");
104 $func eq "das16m1_cmd_test" && grab_def("DAS16M1_XTAL");
105 $func eq "das1800_ai_do_cmdtest" && grab_def("UNIPOLAR");
106 $func eq "das1800_ai_do_cmdtest" && grab_def("TIMER_BASE");
107 $func eq "das800_ai_do_cmdtest" && grab_def("N_CHAN_AI");
108 $func eq "das800_ai_do_cmdtest" && grab_def("TIMER_BASE");
109 $func eq "a2150_ai_cmdtest" && grab_def("CLOCK_MASK");
110 $func eq "a2150_ai_cmdtest" && grab_def("CLOCK_SELECT_BITS");
111 $func eq "a2150_ai_cmdtest" && grab_def("CLOCK_DIVISOR_BITS");
112 $func eq "ni_ai_cmdtest" && grab_def("TIMER_BASE");
113 $func eq "ni_ao_cmdtest" && grab_def("TIMER_BASE");
114 $func eq "rtd_ai_cmdtest" && grab_def("RTD_MAX_SPEED");
115 $func eq "rtd_ai_cmdtest" && grab_def("RTD_MIN_SPEED");
116 $func eq "rtd_ai_cmdtest" && grab_def("RTD_CLOCK_BASE");
117 $func eq "pci230_ai_cmdtest" && grab_function("PCI230_TIMEBASE_10MHZ");
119 $func eq "pci9118_ai_cmdtest" && grab_function("check_channel_list");
120 $func eq "pci171x_ai_cmdtest" && grab_function("check_channel_list");
121 $func eq "pci230_ai_cmdtest" && grab_function("pci230_ns_to_timer");
122 $func eq "cb_pcidda_ai_cmdtest" && grab_function("cb_pcidda_ns_to_timer");
123 $func eq "timer_cmdtest" && grab_function("cmdtest_helper");
124 $func eq "das1800_ai_do_cmdtest" && grab_function("burst_convert_arg");
125 $func eq "dt2814_ai_cmdtest" && grab_function("dt2814_ns_to_timer");
126 $func eq "dt282x_ai_cmdtest" && grab_function("dt282x_ns_to_timer");
127 $func eq "dt282x_ao_cmdtest" && grab_function("dt282x_ns_to_timer");
128 $func eq "a2150_ai_cmdtest" && grab_function("a2150_get_timing");
129 $func eq "ni_ai_cmdtest" && grab_function("ni_ns_to_timer");
130 $func eq "ni_ao_cmdtest" && grab_function("ni_ns_to_timer");
131 $func eq "rtd_ai_cmdtest" && grab_function("rtd_ns_to_timer");
132 $func eq "skel_ai_cmdtest" && grab_function("skel_ns_to_timer");
134 grab_function($func);
138 $output = `gcc -o cmdtest cmdtest.c -Wall -Wstrict-prototypes -O2 -g 2>&1`;
142 print "E: $func: compilation failed!\n";
146 $output = `./cmdtest`;
164 typedef struct comedi_device_struct comedi_device;
165 typedef struct comedi_subdevice_struct comedi_subdevice;
166 typedef struct comedi_async_struct comedi_async;
167 typedef struct comedi_driver_struct comedi_driver;
168 typedef struct comedi_lrange_struct comedi_lrange;
171 struct comedi_subdevice_struct{
175 int len_chanlist; /* length of channel/gain list, if available */
183 unsigned int runflags;
187 lsampl_t maxdata; /* if maxdata==0, use list */
188 lsampl_t *maxdata_list; /* list is channel specific */
191 unsigned int *flaglist;
193 comedi_lrange *range_table;
194 comedi_lrange **range_table_list;
196 unsigned int *chanlist; /* driver-owned chanlist (not used) */
198 int (*insn_read)(comedi_device *,comedi_subdevice *,comedi_insn *,lsampl_t *);
199 int (*insn_write)(comedi_device *,comedi_subdevice *,comedi_insn *,lsampl_t *);
200 int (*insn_bits)(comedi_device *,comedi_subdevice *,comedi_insn *,lsampl_t *);
201 int (*insn_config)(comedi_device *,comedi_subdevice *,comedi_insn *,lsampl_t *);
203 int (*do_cmd)(comedi_device *,comedi_subdevice *);
204 int (*do_cmdtest)(comedi_device *,comedi_subdevice *,comedi_cmd *);
205 int (*poll)(comedi_device *,comedi_subdevice *);
206 int (*cancel)(comedi_device *,comedi_subdevice *);
208 int (*buf_change)(comedi_device *,comedi_subdevice *s);
213 struct comedi_device_struct{
215 comedi_driver *driver;
223 //spinlock_t spinlock;
224 int in_request_module;
227 comedi_subdevice *subdevices;
228 int options[COMEDI_NDEVCONFOPTS];
234 comedi_subdevice *read_subdev;
235 //wait_queue_head_t read_wait;
237 comedi_subdevice *write_subdev;
238 //wait_queue_head_t write_wait;
240 //struct fasync_struct *async_queue;
246 unsigned int config_bits;
247 unsigned int clockbase;
248 unsigned int i8254_osc_base;
251 struct priv_struct priv;
252 #define devpriv (&priv)
255 unsigned int ai_ns_min;
256 unsigned int n_aichanlist;
257 unsigned int ai_speed;
259 unsigned int clock[4];
260 unsigned int num_clocks;
261 unsigned int n_aichan;
262 unsigned int n_aichand;
264 struct board_struct __this_board;
265 #define this_board (&__this_board)
266 #define thisboard (&__this_board)
267 #define boardtype (__this_board)
269 #define printk printf
270 #define rt_printk printf
271 #define comedi_error(a,b) printf(b)
273 static int cmd_test(comedi_device *dev,comedi_subdevice *s, comedi_cmd *cmd);
275 comedi_device device,*dev;
276 comedi_subdevice subdevice,*s;
278 void check_null(void);
279 void check_mask(void);
280 void check_mask_2(void);
281 void check_timed(void);
285 int main(int argc,char *argv[])
298 void dump_cmd(comedi_cmd *cmd)
300 printf("start_src: %08x\n",cmd->start_src );
301 printf("scan_begin_src: %08x\n",cmd->scan_begin_src );
302 printf("convert_src: %08x\n",cmd->convert_src );
303 printf("scan_end_src: %08x\n",cmd->scan_end_src );
304 printf("stop_src: %08x\n",cmd->stop_src );
307 void check_null(void)
312 memset(&cmd,0,sizeof(cmd));
314 ret = cmd_test(dev,s,&cmd);
315 if(ret!=1)printf("E: null returned %d\n",ret);
318 void check_mask(void)
323 memset(&cmd,0,sizeof(cmd));
324 cmd.start_src=TRIG_ANY;
325 cmd.scan_begin_src=TRIG_ANY;
326 cmd.convert_src=TRIG_ANY;
327 cmd.scan_end_src=TRIG_ANY;
328 cmd.stop_src=TRIG_ANY;
330 ret = cmd_test(dev,s,&cmd);
331 if(ret!=1)printf("E: mask returned %d\n",ret);
338 void check_mask_2(void)
341 comedi_cmd cmd=cmd_mask;
343 ret = cmd_test(dev,s,&cmd);
344 if(ret<2)printf("E: mask_2 returned %d\n",ret);
347 void check_timed(void)
351 unsigned int freq = 10000;
352 unsigned int n_scan = 10000;
353 unsigned int n_chan = 4;
354 unsigned int chanlist[4];
358 scan_begin_src: TRIG_TIMER,
359 scan_begin_arg: 1e9/freq,
360 convert_src: TRIG_TIMER,
362 scan_end_src: TRIG_COUNT,
363 scan_end_arg: n_chan,
364 stop_src: TRIG_COUNT,
367 chanlist_len: n_chan,
369 comedi_cmd *cmd = &c;
371 for(i=0;i<n_chan;i++){
372 chanlist[i]=CR_PACK(i,0,AREF_GROUND);
375 ret = cmd_test(dev,s,cmd);
376 if(ret<3)printf("W: timed returned %d\n",ret);
377 printf("timed returned %d\n",ret);
384 /* begin autogenerated */