13 #include "comedi_test.h"
15 void probe_max_1chan(comedi_t *it,int s);
16 char *tobinary(char *s,int bits,int n);
17 char *cmd_src(int src,char *buf);
18 int count_bits(unsigned int bits);
20 int test_cmd_no_cmd(void)
25 if(comedi_get_subdevice_flags(device,subdevice)&SDF_CMD){
26 printf("not applicable\n");
30 ret = comedi_get_cmd_src_mask(device,subdevice,&cmd);
33 printf("got EIO, good\n");
35 printf("E: comedi_get_cmd_src_mask: %s\n",
39 printf("E: comedi_get_cmd_src_mask returned %d\n",ret);
45 int test_cmd_probe_src_mask(void)
51 if(!(comedi_get_subdevice_flags(device,subdevice)&SDF_CMD)){
52 printf("not applicable\n");
58 ret = comedi_get_cmd_src_mask(device,subdevice,&cmd);
60 printf("E: comedi_get_cmd_src_mask failed %s\n",
64 printf("command source mask:\n");
65 printf(" start: %s\n",cmd_src(cmd.start_src,buf));
66 printf(" scan_begin: %s\n",cmd_src(cmd.scan_begin_src,buf));
67 printf(" convert: %s\n",cmd_src(cmd.convert_src,buf));
68 printf(" scan_end: %s\n",cmd_src(cmd.scan_end_src,buf));
69 printf(" stop: %s\n",cmd_src(cmd.stop_src,buf));
74 int test_cmd_probe_fast_1chan(void)
79 if(!(comedi_get_subdevice_flags(device,subdevice)&SDF_CMD)){
80 printf("not applicable\n");
84 printf("command fast 1chan:\n");
85 if(comedi_get_cmd_generic_timed(device,subdevice,&cmd,1)<0){
86 printf(" not supported\n");
89 printf(" start: %s %d\n",
90 cmd_src(cmd.start_src,buf),cmd.start_arg);
91 printf(" scan_begin: %s %d\n",
92 cmd_src(cmd.scan_begin_src,buf),cmd.scan_begin_arg);
93 printf(" convert: %s %d\n",
94 cmd_src(cmd.convert_src,buf),cmd.convert_arg);
95 printf(" scan_end: %s %d\n",
96 cmd_src(cmd.scan_end_src,buf),cmd.scan_end_arg);
97 printf(" stop: %s %d\n",
98 cmd_src(cmd.stop_src,buf),cmd.stop_arg);
105 int test_cmd_read_fast_1chan(void)
109 unsigned int chanlist[1];
113 unsigned int flags = comedi_get_subdevice_flags(device,subdevice);
115 if(!(flags&SDF_CMD) || flags&SDF_WRITEABLE){
116 printf("not applicable\n");
120 if(comedi_get_cmd_generic_timed(device,subdevice,&cmd,1)<0){
121 printf(" not supported\n");
125 if(realtime)cmd.flags |= TRIG_RT;
126 cmd.chanlist = chanlist;
127 cmd.scan_end_arg = 1;
128 cmd.stop_arg = 100000;
129 cmd.chanlist_len = 1;
130 chanlist[0] = CR_PACK(0,0,0);
132 comedi_command(device,&cmd);
136 ret = read(comedi_fileno(device),buf,BUFSZ);
148 if(verbose)printf("read %d %d\n",ret,total);
155 int test_cmd_write_fast_1chan(void)
159 unsigned int chanlist[1];
163 unsigned int flags = comedi_get_subdevice_flags(device,subdevice);
165 if(!(flags&SDF_CMD) || !(flags&SDF_WRITEABLE)){
166 printf("not applicable\n");
170 if(comedi_get_cmd_generic_timed(device,subdevice,&cmd,1)<0){
171 printf(" not supported\n");
175 if(realtime)cmd.flags |= TRIG_RT;
176 cmd.chanlist = chanlist;
177 cmd.scan_end_arg = 1;
178 cmd.stop_arg = 1000000;
179 cmd.chanlist_len = 1;
180 chanlist[0] = CR_PACK(0,0,0);
184 ret = comedi_command(device,&cmd);
186 perror("comedi_command");
191 ret = write(comedi_fileno(device), buf, BUFSZ);
202 if(verbose)printf("write %d %d\n",ret,total);
207 memset(&insn, 0, sizeof(comedi_insn));
208 insn.insn = INSN_INTTRIG;
209 insn.subdev = subdevice;
210 ret = comedi_do_insn(device, &insn);
212 perror("comedi_inttrig");
215 if(verbose)printf("inttrig\n");
220 ret = write(comedi_fileno(device),buf,BUFSZ);
232 if(verbose)printf("write %d %d\n",ret,total);
239 int test_cmd_logic_bug(void)
245 if(!(comedi_get_subdevice_flags(device,subdevice)&SDF_CMD)){
246 printf("not applicable\n");
252 ret = comedi_get_cmd_src_mask(device,subdevice,&cmd);
254 printf("E: comedi_get_cmd_src_mask failed\n");
258 if(count_bits(cmd.start_src)>1){ cmd.start_src=0; ok=1; }
259 if(count_bits(cmd.scan_begin_src)>1){ cmd.scan_begin_src=0; ok=1; }
260 if(count_bits(cmd.convert_src)>1){ cmd.convert_src=0; ok=1; }
261 if(count_bits(cmd.scan_end_src)>1){ cmd.scan_end_src=0; ok=1; }
262 if(count_bits(cmd.stop_src)>1){ cmd.stop_src=0; ok=1; }
265 printf("not applicable (no source choices)\n");
269 ret = comedi_command_test(device,&cmd);
271 printf("E: command_test returned %d, expected 1, (allowed src==0)\n",ret);
273 printf("command_test returned %d, good\n",ret);
279 int count_bits(unsigned int bits)
289 char *tobinary(char *s,int bits,int n)
295 *t++=(bits&bit)?'1':'0';
301 char *cmd_src(int src,char *buf)
305 if(src&TRIG_NONE)strcat(buf,"none|");
306 if(src&TRIG_NOW)strcat(buf,"now|");
307 if(src&TRIG_FOLLOW)strcat(buf,"follow|");
308 if(src&TRIG_TIME)strcat(buf,"time|");
309 if(src&TRIG_TIMER)strcat(buf,"timer|");
310 if(src&TRIG_COUNT)strcat(buf,"count|");
311 if(src&TRIG_EXT)strcat(buf,"ext|");
312 if(src&TRIG_INT)strcat(buf,"int|");
315 sprintf(buf,"unknown(0x%02x)",src);
317 buf[strlen(buf)-1]=0;