fixed errno sign problem
[comedilib.git] / perl / Comedi.pm
1 # Copyright (c) 1999 Joseph E. Smith <jes@presto.med.upenn.edu>
2 #
3 # See the 'COPYRIGHT' section below for complete copyright information.
4
5 package Comedi;
6
7 use strict;
8 use Carp;
9 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $AUTOLOAD);
10
11 require Exporter;
12 require DynaLoader;
13 require AutoLoader;
14
15 @ISA = qw(Exporter DynaLoader);
16
17 %EXPORT_TAGS = (
18
19  Constants => [ qw(
20         AREF_COMMON
21         AREF_DIFF
22         AREF_GROUND
23         AREF_OTHER
24         COMEDI_INPUT
25         COMEDI_MAJOR
26         COMEDI_NAMELEN
27         COMEDI_NDEVCONFOPTS
28         COMEDI_NDEVICES
29         COMEDI_OUTPUT
30  ) ],
31
32  Ioctls => [ qw(
33         COMEDI_CANCEL
34         COMEDI_CHANINFO
35         COMEDI_DEVCONFIG
36         COMEDI_DEVINFO
37         COMEDI_LOCK
38         COMEDI_RANGEINFO
39         COMEDI_SUBDINFO
40         COMEDI_TRIG
41         COMEDI_UNLOCK
42  ) ],
43
44  SubdeviceTypes => [ qw(
45         COMEDI_SUBD_AI
46         COMEDI_SUBD_AO
47         COMEDI_SUBD_CALIB
48         COMEDI_SUBD_COUNTER
49         COMEDI_SUBD_DI
50         COMEDI_SUBD_DIO
51         COMEDI_SUBD_DO
52         COMEDI_SUBD_MEMORY
53         COMEDI_SUBD_PROC
54         COMEDI_SUBD_TIMER
55         COMEDI_SUBD_UNUSED
56  ) ],
57
58  SubdeviceFlags => [ qw(
59         SDF_BUSY
60         SDF_BUSY_OWNER
61         SDF_COMMON
62         SDF_DEGLITCH
63         SDF_DIFF
64         SDF_DITHER
65         SDF_FLAGS
66         SDF_GROUND
67         SDF_INTERNAL
68         SDF_LOCKED
69         SDF_LOCK_OWNER
70         SDF_LSAMPL
71         SDF_MAXDATA
72         SDF_MMAP
73         SDF_MODE0
74         SDF_MODE1
75         SDF_MODE2
76         SDF_MODE3
77         SDF_MODE4
78         SDF_OTHER
79         SDF_RANGETYPE
80         SDF_READABLE
81         SDF_RT
82         SDF_RUNNING
83         SDF_WRITEABLE
84  ) ],
85
86  TriggerFlags => [ qw (
87         TRIG_BOGUS
88         TRIG_CONFIG
89         TRIG_DEGLITCH
90         TRIG_DITHER
91         TRIG_RT
92         TRIG_WAKE_EOS
93         TRIG_WRITE
94  ) ],
95
96  Units => [ qw (
97         UNIT_mA
98         UNIT_none
99         UNIT_volt
100  ) ],
101
102  Functions => [ qw(
103         CR_PACK
104  ) ],
105 );
106
107
108
109 # Items to export into callers namespace by default. Note: do not export
110 # names by default without a very good reason. Use EXPORT_OK instead.
111 # Do not simply export all your public functions/methods/constants.
112 @EXPORT = ();
113
114 @EXPORT_OK = (
115     @{$EXPORT_TAGS{'Functions'}},
116     @{$EXPORT_TAGS{'Constants'}},
117     @{$EXPORT_TAGS{'Ioctls'}},
118     @{$EXPORT_TAGS{'SubdeviceTypes'}},
119     @{$EXPORT_TAGS{'SubdeviceFlags'}},
120     @{$EXPORT_TAGS{'TriggerFlags'}},
121     @{$EXPORT_TAGS{'Units'}},
122 );
123
124 $VERSION = '0.02';
125
126 sub AUTOLOAD {
127     # This AUTOLOAD is used to 'autoload' constants from the constant()
128     # XS function.  If a constant is not found then control is passed
129     # to the AUTOLOAD in AutoLoader.
130
131     my $constname;
132     ($constname = $AUTOLOAD) =~ s/.*:://;
133     my $val = constant($constname, @_ ? $_[0] : 0);
134     if ($! != 0) {
135         if ($! =~ /Invalid/) {
136             $AutoLoader::AUTOLOAD = $AUTOLOAD;
137             goto &AutoLoader::AUTOLOAD;
138         }
139         else {
140                 croak "Your vendor has not defined Comedi macro $constname";
141         }
142     }
143     eval "sub $AUTOLOAD { $val }";
144     goto &$AUTOLOAD;
145 }
146
147 bootstrap Comedi $VERSION;
148
149 # Preloaded methods go here.
150
151 sub CR_PACK {
152     my ($chan, $rng, $aref) = @_;
153
154     return ( ((($aref)&0x3)<<24) | ((($rng)&0xff)<<16) | (($chan)&0xffff) );
155 }
156
157
158 # Autoload methods go after =cut, and are processed by the autosplit program.
159
160 1;
161 __END__
162
163 =head1 NAME
164
165 Comedi - Perl extension for data acquisition using comedi
166
167 =head1 SYNOPSIS
168
169 use Comedi qw( :Functions :Constants :Ioctls :SubdeviceTypes :SubdeviceFlags :TriggerFlags :Units );
170
171 =head1 DESCRIPTION
172
173 The B<Comedi> module provides constants and data types for using the comedi data acquisition module.
174
175 By itself, this module will allow you to access the B<comedi> module using standard I/O functions and ioctls.
176 For more robust access to B<comedi>, see the B<Comedi::Lib> module.
177
178 =head1 Exported constants
179
180 The large number of constants defined in C<comedi.h> are divided into
181 several functional categories for export.  No constants are exported
182 by default.
183
184 =item Constants
185
186 AREF_COMMON
187 AREF_DIFF
188 AREF_GROUND
189 AREF_OTHER
190 COMEDI_INPUT
191 COMEDI_MAJOR
192 COMEDI_NAMELEN
193 COMEDI_NDEVCONFOPTS
194 COMEDI_NDEVICES
195 COMEDI_OUTPUT
196
197 =item Ioctls
198
199 COMEDI_CANCEL
200 COMEDI_CHANINFO
201 COMEDI_DEVCONFIG
202 COMEDI_DEVINFO
203 COMEDI_LOCK
204 COMEDI_RANGEINFO
205 COMEDI_SUBDINFO
206 COMEDI_TRIG
207 COMEDI_UNLOCK
208
209 =item SubdeviceTypes
210
211 COMEDI_SUBD_AI
212 COMEDI_SUBD_AO
213 COMEDI_SUBD_CALIB
214 COMEDI_SUBD_COUNTER
215 COMEDI_SUBD_DI
216 COMEDI_SUBD_DIO
217 COMEDI_SUBD_DO
218 COMEDI_SUBD_MEMORY
219 COMEDI_SUBD_PROC
220 COMEDI_SUBD_TIMER
221 COMEDI_SUBD_UNUSED
222
223 =item  SubdeviceFlags
224
225 SDF_BUSY
226 SDF_BUSY_OWNER
227 SDF_COMMON
228 SDF_DEGLITCH
229 SDF_DIFF
230 SDF_DITHER
231 SDF_FLAGS
232 SDF_GROUND
233 SDF_INTERNAL
234 SDF_LOCKED
235 SDF_LOCK_OWNER
236 SDF_LSAMPL
237 SDF_MAXDATA
238 SDF_MMAP
239 SDF_MODE0
240 SDF_MODE1
241 SDF_MODE2
242 SDF_MODE3
243 SDF_MODE4
244 SDF_OTHER
245 SDF_RANGETYPE
246 SDF_READABLE
247 SDF_RT
248 SDF_RUNNING
249 SDF_WRITEABLE
250
251 =item TriggerFlags
252
253 TRIG_BOGUS
254 TRIG_CONFIG
255 TRIG_DEGLITCH
256 TRIG_DITHER
257 TRIG_RT
258 TRIG_WAKE_EOS
259 TRIG_WRITE
260
261 =item Units
262
263 UNIT_mA
264 UNIT_none
265 UNIT_volt
266
267 =item Functions
268
269 CR_PACK
270
271 =head1 VERSION
272
273 Version 0.01 09-Nov-1999
274
275 =head1 AUTHOR
276
277 Joe Smith <F<jes@presto.med.upenn.edu>>.
278
279 =head1 COPYRIGHT
280
281 Copyright (c) 1999 Joseph E. Smith.  All rights reserved.  This
282 program is free software.  You may redistribute it and/or modify it
283 under the same terms as Perl itself.
284
285 =head1 SEE ALSO
286
287 Comedi::Trigger(1), Comedi::Lib(1).
288
289 =cut