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