fixed errno sign problem
[comedilib.git] / perl / mode2.perl
1
2 #   A little input demo
3
4 use Comedi qw( :Functions :Constants :Ioctls ) ;
5 use Comedi::Trigger;
6 use Comedi::Lib;
7
8 use constant AI_DEV => 0;
9 use constant AI_SUB => 0;
10 use constant AO_DEV => 0;
11 use constant AO_SUB => 1;
12
13 use constant N_SAMPLES => 100;
14
15 $fn = '/dev/comedi0';
16
17 # create a channel list
18 #
19 @ch = ( CR_PACK(0, 0, AREF_GROUND),
20         CR_PACK(1, 0, AREF_GROUND) );
21
22 $d = comedi_open($fn) || die "Can't open '$fn': " . comedi_error();
23
24 $fd = comedi_fileno($d);
25
26 open(COMDEV, "<&$fd") || die "Can't get filehandle from fd $fd: $!";
27
28 $freq = $opt_f || 1000;
29
30 comedi_loglevel(4);
31
32 # convert the requested frequency into a timer value
33 #
34 ($ret = comedi_get_timer($d, AI_SUB, $freq, $ticks, $actual_freq)) == 0 ||
35     die "Can't get timer: " . comedi_strerror($ret);
36
37 $buf = pack('S*', 100..(100+N_SAMPLES-1));
38
39 # create a trigger object
40 #
41 $it = new Comedi::Trigger(
42    mode     => 2,
43    chanlist => \@ch,
44    n        => 20,
45    data     => \$buf,
46    major    => $ticks,
47    minor    => 20);
48
49
50 die "Analog input trigger error ($ret): " . comedi_strerror(comedi_errno())
51     if (($ret = comedi_trigger($d, $it)) < 0);
52
53 ($ret = sysread(COMDEV, $buf, 2*N_SAMPLES)) || die "Read error ($ret): $!";
54     
55 foreach (unpack('s*', $buf)) {
56     printf("%d\n", $_);
57 }