4 use Comedi qw( :Functions :Constants :Ioctls ) ;
8 use constant AI_DEV => 0;
9 use constant AI_SUB => 0;
10 use constant AO_DEV => 0;
11 use constant AO_SUB => 1;
13 use constant N_SAMPLES => 100;
17 # create a channel list
19 @ch = ( CR_PACK(0, 0, AREF_GROUND),
20 CR_PACK(1, 0, AREF_GROUND) );
22 $d = comedi_open($fn) || die "Can't open '$fn': " . comedi_error();
24 $fd = comedi_fileno($d);
26 open(COMDEV, "<&$fd") || die "Can't get filehandle from fd $fd: $!";
28 $freq = $opt_f || 1000;
32 # convert the requested frequency into a timer value
34 ($ret = comedi_get_timer($d, AI_SUB, $freq, $ticks, $actual_freq)) == 0 ||
35 die "Can't get timer: " . comedi_strerror($ret);
37 $buf = pack('S*', 100..(100+N_SAMPLES-1));
39 # create a trigger object
41 $it = new Comedi::Trigger(
50 die "Analog input trigger error ($ret): " . comedi_strerror(comedi_errno())
51 if (($ret = comedi_trigger($d, $it)) < 0);
53 ($ret = sysread(COMDEV, $buf, 2*N_SAMPLES)) || die "Read error ($ret): $!";
55 foreach (unpack('s*', $buf)) {