removed mode0_test from list of standard tests
[comedilib.git] / testing / main.c
1 /*
2  */
3
4 #include <stdio.h>
5 #include <comedilib.h>
6 #include <fcntl.h>
7 #include <unistd.h>
8 #include <sys/ioctl.h>
9 #include <errno.h>
10 #include <getopt.h>
11 #include <ctype.h>
12 #include <malloc.h>
13 #include <string.h>
14
15 #include "comedi_test.h"
16
17 char *filename="/dev/comedi0";
18 int verbose_flag;
19 comedi_t *device;
20
21 int subdevice;
22 int channel;
23 int aref;
24 int range;
25
26 int test_info(void);
27 int test_mode0_read(void);
28 int test_insn_read(void);
29 int test_insn_read_time(void);
30 int test_cmd_no_cmd(void);
31 int test_cmd_probe_src_mask(void);
32 int test_cmd_probe_fast_1chan(void);
33 int test_cmd_read_fast_1chan(void);
34 int test_cmd_logic_bug(void);
35 int test_cmd_fifo_depth_check(void);
36 int test_cmd_start_inttrig(void);
37 int test_mmap(void);
38 int test_read_select(void);
39 int test_cmd_continuous(void);
40 int test_bufconfig(void);
41
42 #define TEST_NEVER 0
43 #define TEST_STD 1
44
45 struct test_struct{
46         char *name;
47         int (*do_test)(void);
48         int flags;
49 };
50 struct test_struct tests[]={
51         { "info", test_info, TEST_STD },
52         { "mode0_read", test_mode0_read, TEST_NEVER },
53         { "insn_read", test_insn_read, TEST_STD },
54         { "insn_read_time", test_insn_read_time, TEST_STD },
55         { "cmd_no_cmd", test_cmd_no_cmd, TEST_STD },
56         { "cmd_probe_src_mask", test_cmd_probe_src_mask, TEST_STD },
57         { "cmd_probe_fast_1chan", test_cmd_probe_fast_1chan, TEST_STD },
58         { "cmd_read_fast_1chan", test_cmd_read_fast_1chan, TEST_STD },
59         { "cmd_logic_bug", test_cmd_logic_bug, TEST_STD },
60         { "cmd_fifo_depth_check", test_cmd_fifo_depth_check, TEST_STD },
61         { "cmd_start_inttrig", test_cmd_start_inttrig, TEST_STD },
62         { "mmap", test_mmap, TEST_STD },
63         { "read_select", test_read_select, TEST_STD },
64         { "cmd_continuous", test_cmd_continuous, TEST_NEVER },
65         { "bufconfig", test_bufconfig, TEST_STD },
66 };
67 static int n_tests = sizeof(tests)/sizeof(tests[0]);
68
69 int only_subdevice;
70 int verbose;
71 char *only_test;
72 int realtime;
73
74 static void get_capabilities(unsigned int subd);
75 static void print_device_info(void);
76
77 void help(int ret)
78 {
79         int i;
80
81         fprintf(stderr,
82 "comedi_test [options]\n"
83 "  --device, -f <device_file>   Use device <device_file>\n"
84 "  --realtime, -r               Use real-time interrupts, if available\n"
85 "  --subdevice, -s <index>      Only test subdevice <index>\n"
86 "  --test, -t <test>            Only run test <test>\n"
87 "  --verbose, -v                Be verbose\n"
88 "  --help, -h                   Print this message\n"
89 "Available tests: ");
90         for(i=0;i<n_tests;i++){
91                 fprintf(stderr,"%s ",tests[i].name);
92         }
93         fprintf(stderr,"\n");
94
95         exit(ret);
96 }
97
98 static struct option longopts[]={
99         { "device", 1, 0, 'f' },
100         { "realtime", 0, 0, 'r' },
101         { "subdevice", 1, 0, 's' },
102         { "test", 1, 0, 't' },
103         { "verbose", 0, 0, 'v' },
104         { "help", 0, 0, 'h' },
105         {0}
106 };
107
108 int main(int argc, char *argv[])
109 {
110         int c;
111         int i;
112
113         setvbuf(stdout,NULL,_IONBF,0);
114
115         while (1) {
116                 c = getopt_long(argc, argv, "f:rs:t:v", longopts, NULL);
117                 if (c == -1)
118                         break;
119                 switch (c) {
120                 case 'f':
121                         filename = optarg;
122                         break;
123                 case 'r':
124                         realtime = 1;
125                         break;
126                 case 's':
127                         only_subdevice = 1;
128                         sscanf(optarg,"%d",&subdevice);
129                         break;
130                 case 't':
131                         only_test = optarg;
132                         break;
133                 case 'h':
134                         help(0);
135                         break;
136                 case 'v':
137                         verbose = 1;
138                         break;
139                 default:
140                         help(1);
141                         break;
142                 }
143         }
144
145         device = comedi_open(filename);
146         if(!device){
147                 printf("E: comedi_open(\"%s\"): %s\n",filename,strerror(errno));
148                 exit(0);
149         }
150
151         print_device_info();
152
153         for(;subdevice<comedi_get_n_subdevices(device);subdevice++){
154                 printf("I:\n");
155                 printf("I: subdevice %d\n",subdevice);
156                 get_capabilities(subdevice);
157                 if(only_test){
158                         for(i=0;i<n_tests;i++){
159                                 if(!strcmp(tests[i].name,only_test)){
160                                         printf("I: testing %s...\n",tests[i].name);
161                                         tests[i].do_test();
162                                 }
163                         }
164                 }else{
165                         for(i=0;i<n_tests;i++){
166                                 if(tests[i].flags&TEST_STD){
167                                         printf("I: testing %s...\n",tests[i].name);
168                                         tests[i].do_test();
169                                 }
170                         }
171                 }
172                 if(only_subdevice)break;
173         }
174
175         return 0;
176 }
177
178 unsigned int capabilities;
179
180 static void get_capabilities(unsigned int subd)
181 {
182         int type;
183         int flags;
184
185         capabilities = 0;
186
187         type = comedi_get_subdevice_type(device,subd);
188
189         flags = comedi_get_subdevice_flags(device,subd);
190
191 }
192
193 static void print_device_info(void)
194 {
195         int vers = comedi_get_version_code(device);
196
197         printf("I: Comedi version: %d.%d.%d\n",(vers>>16)&0xff,
198                 (vers>>8)&0xff,vers&0xff);
199         printf("I: Comedilib version: unknown =)\n");
200         printf("I: driver name: %s\n",comedi_get_driver_name(device));
201         printf("I: device name: %s\n",comedi_get_board_name(device));
202 }
203
204
205