5 * Copyright (c) 1999,2000 David A. Schleef <ds@schleef.org>
7 * This file may be freely modified, distributed, and combined with
8 * other software, as long as proper attribution is given in the
15 #include <comedilib.h>
29 void print_time(void);
31 void sigio_handler(int sig)
39 static struct timeval oldtime={0};
42 gettimeofday(&tv,NULL);
44 dsec=tv.tv_sec-oldtime.tv_sec;
45 dusec=tv.tv_usec-oldtime.tv_usec;
50 printf("%d.%06d +%d.%06d\n",(int)tv.tv_sec,(int)tv.tv_usec,dsec,dusec);
57 void config_output(void)
62 comedi_dio_config(device,out_subd,i,COMEDI_OUTPUT);
71 void do_cmd_1(comedi_t *dev);
72 void do_cmd_2(comedi_t *dev);
73 void do_cmd(comedi_t *dev,comedi_cmd *cmd);
75 int main(int argc, char *argv[])
84 //fn = "/dev/comedi1";
87 dev = comedi_open(fn);
99 fcntl(comedi_fileno(dev),F_SETOWN,getpid());
100 flags = fcntl(comedi_fileno(dev),F_GETFL);
101 ret = fcntl(comedi_fileno(dev),F_SETFL,flags|O_ASYNC);
102 //ret = fcntl(comedi_fileno(dev),F_SETFL,O_NONBLOCK|O_ASYNC);
103 if(ret<0)perror("fcntl");
105 memset(&sa,0,sizeof(sa));
106 sa.sa_handler = &sigio_handler;
107 ret = sigaction(SIGIO,&sa,NULL);
108 if(ret<0)perror("sigaction");
110 sigemptyset(&sigset);
111 sigaddset(&sigset,SIGIO);
112 ret = sigprocmask(SIG_UNBLOCK,&sigset,NULL);
113 if(ret<0)perror("sigprocmask");
117 struct sched_param p;
118 memset(&p,0,sizeof(p));
119 p.sched_priority = 1;
120 ret = sched_setscheduler(0,SCHED_FIFO,&p);
121 if(ret<0)perror("sched_setscheduler");
130 void do_cmd(comedi_t *dev,comedi_cmd *cmd)
136 ret=comedi_command_test(dev,cmd);
138 printf("test ret=%d\n",ret);
140 printf("errno=%d\n",errno);
141 comedi_perror("comedi_command_test");
145 dump_cmd(stdout,cmd);
147 ret=comedi_command_test(dev,cmd);
149 printf("test ret=%d\n",ret);
151 printf("errno=%d\n",errno);
152 comedi_perror("comedi_command_test");
156 dump_cmd(stdout,cmd);
158 ret=comedi_command(dev,cmd);
160 printf("ret=%d\n",ret);
162 printf("errno=%d\n",errno);
163 comedi_perror("comedi_command");
169 ret=read(comedi_fileno(dev),buf,BUFSZ);
184 //printf("read %d %d\n",ret,total);
185 //printf("count = %d\n",count);
191 unsigned int chanlist[0];
193 * This part of the demo measures channels 1, 2, 3, 4 at a rate of
194 * 10 khz, with the inter-sample time at 10 us (100 khz). The number
195 * of scans measured is 10. This is analogous to the old mode2
198 void do_cmd_1(comedi_t *dev)
202 memset(&cmd,0,sizeof(cmd));
204 /* the subdevice that the command is sent to */
205 cmd.subdev = subdevice;
208 cmd.flags = TRIG_WAKE_EOS;
210 cmd.start_src = TRIG_NOW;
213 cmd.scan_begin_src = TRIG_TIMER;
214 cmd.scan_begin_arg = msec_to_nsec(100);
217 cmd.convert_src = TRIG_TIMER;
220 cmd.convert_src = TRIG_ANY;
224 cmd.scan_end_src = TRIG_COUNT;
225 cmd.scan_end_arg = 1;
227 cmd.stop_src = TRIG_NONE;
230 cmd.chanlist = chanlist;
231 cmd.chanlist_len = 1;
233 chanlist[0]=CR_PACK(0,0,0);