re-autogenerated
authorDavid Schleef <ds@schleef.org>
Wed, 27 Jun 2001 22:14:20 +0000 (22:14 +0000)
committerDavid Schleef <ds@schleef.org>
Wed, 27 Jun 2001 22:14:20 +0000 (22:14 +0000)
doc/comedilib-1.html
doc/comedilib-2.html
doc/comedilib-3.html
doc/comedilib-4.html
doc/comedilib-5.html
doc/comedilib.html
doc/comedilib_reference-1.html
doc/comedilib_reference.html

index f3ba92c763954ff194e5eb311909c546ffabac94..67d8b0f80f6bd0617a77c24622d783fb93b63fd8 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <HTML>
 <HEAD>
- <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.7.4">
  <TITLE>Comedi Documentation: Introduction</TITLE>
  <LINK HREF="comedilib-2.html" REL=next>
 
 Previous
 <A HREF="comedilib.html#toc1">Contents</A>
 <HR>
-<H2><A NAME="s1">1. Introduction</A></H2>
+<H2><A NAME="s1">1.</A> <A HREF="comedilib.html#toc1">Introduction</A></H2>
+
+<P>This is preliminary documentation for Comedi and Comedilib.</P>
 
-<P>This is preliminary documentation for Comedi and Comedilib.
-<P>
 <HR>
 <A HREF="comedilib-2.html">Next</A>
 Previous
index 4417140c70f745e31976f5349d428104fc6c017f..b54ebc0b4dacb66e1e90deb0ab3bd2fa7ab6641a 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <HTML>
 <HEAD>
- <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.7.4">
  <TITLE>Comedi Documentation: Installation and configuration</TITLE>
  <LINK HREF="comedilib-3.html" REL=next>
  <LINK HREF="comedilib-1.html" REL=previous>
 <A HREF="comedilib-1.html">Previous</A>
 <A HREF="comedilib.html#toc2">Contents</A>
 <HR>
-<H2><A NAME="s2">2. Installation and configuration</A></H2>
+<H2><A NAME="s2">2.</A> <A HREF="comedilib.html#toc2">Installation and configuration</A></H2>
+
 
-<P>
 <P>This section covers compiling, installing, and configuring
-comedi and comedlib.
-<P>
-<P>
+comedi and comedlib.</P>
+
+
 <H2><A NAME="ss2.1">2.1 Compiling and Installing</A>
 </H2>
 
-<P>
-<P>This section has not been written.
-<P>
-<P>
+
+<P>This section has not been written.</P>
+
+
 <H2><A NAME="ss2.2">2.2 Insmod'ding the kernel module</A>
 </H2>
 
-<P>
-<P>This section has not been written.
-<P>
-<P>
+
+<P>This section has not been written.</P>
+
+
 <H2><A NAME="ss2.3">2.3 Configuring comedi for your hardware</A>
 </H2>
 
-<P>
-<P>
+
+
 <P>I assume that your hardware device is in your computer, and that
 you know the relevant details about it, i.e., what kind of card
 it is, the I/O base, the IRQ, jumper settings related to input
-ranges, etc.
+ranges, etc.</P>
 <P>To tell the comedi kernel module that you have a particular device, and
 some information about it, you will be running the <CODE>comedi_config</CODE>
-command.  Perhaps you should read the man page now.
+command.  Perhaps you should read the man page now.</P>
 <P>In this tutorial, I will go through the process of configuring comedi
 for two devices, a National Instruments AT-MIO-16E-10
-and a Data Translation DT2821-F-8DI.
+and a Data Translation DT2821-F-8DI.</P>
 <P>The NI board is plug-and-play, and the man page tells me that I need
 to configure the PnP part of the board with isapnptools.  The isapnptools
 package is a little cryptic, but the concepts are simple.  Once I
 learned how to use it, I settled on a /etc/isapnp.conf file that
-contained the lines:
-<P>
+contained the lines:</P>
+
 <P>
 <BLOCKQUOTE><CODE>
 <PRE>
@@ -67,27 +67,29 @@ contained the lines:
 ))
 </PRE>
 </CODE></BLOCKQUOTE>
-<P>
+</P>
+
 <P>It also contains a few lines about overall configuration and about my
 sound card.  I found out after a bit of trial-and-error that the NI
 board does not always work with interrupts other than IRQ 3.  YMMV.
 Currently, the driver doesn't use DMA, but it may in the future, so
 I commented out the DMA lines.  It is a curious fact that the device
 ignores the IRQ and DMA information given here, however, I keep the
-information here to remind myself that the numbers aren't arbitrary.
+information here to remind myself that the numbers aren't arbitrary.</P>
 <P>When I run comedi_config (as root, of course), I provide the same
 information.  Since I want to have the board configured every time
-I boot, I put the line
+I boot, I put the line</P>
 <P>
 <BLOCKQUOTE><CODE>
 <PRE>
 /usr/sbin/comedi_config /dev/comedi0 atmio-E 0x260,3
 </PRE>
 </CODE></BLOCKQUOTE>
+</P>
 <P>into <CODE>/etc/rc.d/rc.local</CODE>.  You can, of course, run this command at
 a command prompt.  The man page tells me that the option list
 is supposed to be "(I/O base),(IRQ)", so I used the same numbers
-as I put in /etc/isapnp.conf, i.e., 0x260,3.
+as I put in /etc/isapnp.conf, i.e., 0x260,3.</P>
 <P>For the Data Translation board, I need to have a list of the
 jumper settings.  Fortunately, I wrote them all down in the
 manual -- I hope they are still correct.  However, I had to
@@ -97,7 +99,7 @@ me that I need to know the I/O base, IRQ, DMA 1, DMA 2.  However,
 since I wrote the driver, I know that it also recognizes the
 differential/single-ended and unipolar/bipolar jumpers.  As always,
 the source is the final authority, and looking in module/dt282x.c
-tells me that the options list is interpreted as:
+tells me that the options list is interpreted as:</P>
 <P>
 <UL>
 <LI>I/O base</LI>
@@ -109,14 +111,16 @@ tells me that the options list is interpreted as:
 <LI>dma1</LI>
 <LI>dma2</LI>
 </UL>
+</P>
 <P>(ai=analog input, ao=analog output.)  From this, I decide that
-the appropriate options list is
+the appropriate options list is</P>
 <P>
 <BLOCKQUOTE><CODE>
 <PRE>
 0x200,4,,1,1,1
 </PRE>
 </CODE></BLOCKQUOTE>
+</P>
 <P>I left the differential/single-ended number blank, since the
 driver already knowns (from the board name), that it is
 differential.  I  also left the DMA numbers blank, since I
@@ -125,13 +129,14 @@ with my sound card -- life is full of difficult choices.)
 Keep in mind that things commented in the source, but not in
 the documentation are about as likely to change as the weather,
 so I put good comments next to the following line when I put
-it in rc.local.
+it in rc.local.</P>
 <P>
 <BLOCKQUOTE><CODE>
 <PRE>
 /usr/sbin/comedi_config /dev/comedi1 dt2821-f-8di 0x200,4,,1,1,1
 </PRE>
 </CODE></BLOCKQUOTE>
+</P>
 <P>So now I think that I have my boards configured correctly.
 Since data acquisition boards are not typically well-engineered,
 comedi sometimes can't figure out if the board is actually there.
@@ -140,41 +145,44 @@ are well-made, so comedi will give me an error message if it
 can't find them.  The comedi kernel module, since it is a part
 of the kernel, prints messages to the kernel logs, which you
 can access through the command 'dmesg' or /var/log/messages.
-Here is a configuration failure (from dmesg):
+Here is a configuration failure (from dmesg):</P>
 <P>
 <BLOCKQUOTE><CODE>
 <PRE>
 comedi0: ni_E: 0x0200 can't find board
 </PRE>
 </CODE></BLOCKQUOTE>
-<P>When it does work, I get:
+</P>
+<P>When it does work, I get:</P>
 <P>
 <BLOCKQUOTE><CODE>
 <PRE>
 comedi0: ni_E: 0x0260 at-mio-16e-10 ( irq = 3 )
 </PRE>
 </CODE></BLOCKQUOTE>
-<P>Note that it also correctly identified my board.
-<P>
-<P>
-<P>
+</P>
+<P>Note that it also correctly identified my board.</P>
+
+
+
 <H2><A NAME="ss2.4">2.4 Getting information from comedi</A>
 </H2>
 
-<P>
-<P>
+
+
 <P>So now that we have comedi talking to the hardware, we want to
 talk to comedi.  Here's some pretty low-level information --
-it's sometimes useful for debugging:
-<P>
-<P>
+it's sometimes useful for debugging:</P>
+
+
 <P>
 <BLOCKQUOTE><CODE>
 <PRE>
 cat /proc/comedi
 </PRE>
 </CODE></BLOCKQUOTE>
-<P>Right now, on my computer, this command gives:
+</P>
+<P>Right now, on my computer, this command gives:</P>
 <P>
 <BLOCKQUOTE><CODE>
 <PRE>
@@ -184,15 +192,16 @@ format string
  1: dt282x               dt2821-f-8di            4
 </PRE>
 </CODE></BLOCKQUOTE>
+</P>
 <P>This is a feature that is not well-developed yet.  Basically, it
 currently tells you driver name, device name, and number of
-subdevices.
+subdevices.</P>
 <P>In the <CODE>demo/</CODE> directory, there is a command called
 <CODE>info</CODE>, which provides information about each subdevice on the
 board.  The output of it is rather long, since I have 7
 subdevices  (4 or fewer is common for other boards.)
 Here's part of the output of the NI board (which
-is on <CODE>/dev/comedi0</CODE>.)  ('demo/info /dev/comedi0')
+is on <CODE>/dev/comedi0</CODE>.)  ('demo/info /dev/comedi0')</P>
 <P>
 <BLOCKQUOTE><CODE>
 <PRE>
@@ -209,20 +218,21 @@ subdevice 0:
 
 ...
 </CODE></BLOCKQUOTE>
+</P>
 <P>The overall info gives information about the device -- basically
-the same information as /proc/comedi.
+the same information as /proc/comedi.</P>
 <P>This board has 7 subdevices.  Devices are separated into
 subdevices that each have a distinct purpose -- e.g., analog
 input, analog output, digital input/output.  This board also
-has an EEPROM and calibration DACs that are also subdevices.
+has an EEPROM and calibration DACs that are also subdevices.</P>
 <P>Subdevice 0 is the analog input subdevice.  You would have
 known this from the 'type: 1 (unknown)' line, if I've updated
 demo/info recently, because it would say 'type: 1 (analog input)'
 instead.  The other lines should be self-explanitory.  Comedi
 has more information about the device, but demo/info doesn't
-currently display this.
-<P>
-<P>
+currently display this.</P>
+
+
 <HR>
 <A HREF="comedilib-3.html">Next</A>
 <A HREF="comedilib-1.html">Previous</A>
index e0c7981ce45dc10f2e98f86b99ba8d46936369d9..1becb2b4cd33ed9d4864d2a3ebfb64f5e205b05d 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <HTML>
 <HEAD>
- <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.7.4">
  <TITLE>Comedi Documentation: Individual drivers</TITLE>
  <LINK HREF="comedilib-4.html" REL=next>
  <LINK HREF="comedilib-2.html" REL=previous>
 <A HREF="comedilib-2.html">Previous</A>
 <A HREF="comedilib.html#toc3">Contents</A>
 <HR>
-<H2><A NAME="s3">3. Individual drivers</A></H2>
+<H2><A NAME="s3">3.</A> <A HREF="comedilib.html#toc3">Individual drivers</A></H2>
+
 
-<P>
 <P>This section contains information that is specific to each
 hardware driver.  The most current information about a driver
-is included in the comedi source.
-<P>
+is included in the comedi source.</P>
+
 <H2><A NAME="ss3.1">3.1 National Instruments AT-MIO E series</A>
 </H2>
 
-<P>
-<P>
-<P>
+
+
+
 <H2><A NAME="ss3.2">3.2 Data Translation</A>
 </H2>
 
-<P>
-<P>
-<P>
-<P>
+
+
+
+
 <HR>
 <A HREF="comedilib-4.html">Next</A>
 <A HREF="comedilib-2.html">Previous</A>
index 306f359c5bfed9d0f160053dade2dd27b37a764d..b0c59840936fd293cc3a26e53134556fe45698b2 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <HTML>
 <HEAD>
- <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.7.4">
  <TITLE>Comedi Documentation: Writing programs that use comedi and comedilib</TITLE>
  <LINK HREF="comedilib-5.html" REL=next>
  <LINK HREF="comedilib-3.html" REL=previous>
 <A HREF="comedilib-3.html">Previous</A>
 <A HREF="comedilib.html#toc4">Contents</A>
 <HR>
-<H2><A NAME="s4">4. Writing programs that use comedi and comedilib</A></H2>
+<H2><A NAME="s4">4.</A> <A HREF="comedilib.html#toc4">Writing programs that use comedi and comedilib</A></H2>
+
+
 
-<P>
-<P>
 <H2><A NAME="ss4.1">4.1 Your first comedi program</A>
 </H2>
 
-<P>
+
 <P>This example requires a card that has analog or
-digital input.  Right to the source:
+digital input.  Right to the source:</P>
 <P>
 <BLOCKQUOTE><CODE>
 <PRE>
@@ -49,29 +49,31 @@ int main(int argc,char *argv[])
 }
 </PRE>
 </CODE></BLOCKQUOTE>
-<P>
+</P>
+
 <P>Should be understandable.  Open the device, get the data,
 print it out.  This is basically the guts of <CODE>demo/inp.c</CODE>,
 without error checking or fancy options.
-Compile it using 
+Compile it using </P>
 <P>
 <BLOCKQUOTE><CODE>
 <PRE>
 cc tut1.c -lcomedi -o tut1
 </PRE>
 </CODE></BLOCKQUOTE>
+</P>
 <P>A few notes:  The range variable tells comedi which gain
 to use when measuring an analog voltage.  Since we don't
 know (yet) which numbers are valid, or what each means,
 we'll use 0, because it won't cause errors.  Likewise with
-aref, which determines the analog reference used.
-<P>
-<P>
-<P>
+aref, which determines the analog reference used.</P>
+
+
+
 <H2><A NAME="ss4.2">4.2 Converting samples to voltages</A>
 </H2>
 
-<P>
+
 <P>If you selected an analog input subdevice, you should notice
 that the output of <CODE>tut1</CODE> is a number between
 0 and 4095, or 0 and 65535, depending on the number of bits
@@ -82,29 +84,29 @@ anything else the manual for your device says.  However,
 you probably prefer to have this number translated to
 a voltage.  Naturally, as a good programmer, your first
 question is: "How do I do this in a device-independent
-manner?"
+manner?"</P>
 <P>Most devices give you a choice of gain and unipolar/bipolar
 input, and Comedi allows you to select which of these to
 use.  This parameter is called the "range parameter", since
 it specifies the "input range" for analog input (or "output range"
 analog output.)  The range parameter represents both the gain
-and the unipolar/bipolar aspects.
+and the unipolar/bipolar aspects.</P>
 <P>Comedi keeps the number of available ranges and the largest
 sample value for each subdevice/channel combination.  (Some
 devices allow different input/output ranges for different
-channels in a subdevice.)
-<P>The largest sample value can be found using the function:
-<P>comedi_get_maxdata()
-<P>The number of available ranges can be found using the function:
-<P>comedi_get_n_ranges()
+channels in a subdevice.)</P>
+<P>The largest sample value can be found using the function:</P>
+<P>comedi_get_maxdata()</P>
+<P>The number of available ranges can be found using the function:</P>
+<P>comedi_get_n_ranges()</P>
 <P>For each value of the range parameter for a particular
 subdevice/channel, you can get range information using the
-function:
+function:</P>
 <P>ptr=comedi_get_range(comedi_file,subdevice,channel,
-range)
+range)</P>
 <P>which returns a pointer to a comedi_range structure.
-The comedi_range structure looks like
-<P>
+The comedi_range structure looks like</P>
+
 <P>
 <BLOCKQUOTE><CODE>
 <PRE>
@@ -115,83 +117,89 @@ typedef struct{
 }comedi_range;
 </PRE>
 </CODE></BLOCKQUOTE>
+</P>
 <P>The structure element 'min' represents
 the voltage corresponding to comedi_data_read() returning 0,
 and 'max' represents comedi_data_read() returning 'maxdata',
 (i.e., 4095 for 12 bit A/C converters, 65535 for 16 bit,
 or, 1 for digital input -- more on this in a bit.)  The
 'unit' entry tells you if min and
-max refer to voltage, current, etc.
+max refer to voltage, current, etc.</P>
 <P>"Could it get easier?", you say.  Well, yes.  Use
 the function comedi_to_phys(), which converts data
-values to physical units.  Call it using something like
+values to physical units.  Call it using something like</P>
 <P>
 <BLOCKQUOTE><CODE>
 <PRE>
 volts=comedi_to_phys(it,data,range,maxdata);
 </PRE>
 </CODE></BLOCKQUOTE>
-<P>and the opposite
+</P>
+<P>and the opposite</P>
 <P>
 <BLOCKQUOTE><CODE>
 <PRE>
 data=comedi_from_phys(it,volts,range,maxdata);
 </PRE>
 </CODE></BLOCKQUOTE>
-<P>
-<P>
-<P>
+</P>
+
+
+
 <H2><A NAME="ss4.3">4.3 Another section</A>
 </H2>
 
-<P>
-<P>
+
+
 <P>In addition to providing low level routines for data
 access, the comedi library provides higher-level access,
 much like the standard C library provides fopen(), etc.
 as a high-level (and portable) alternative to the direct
 UNIX system calls open(), etc.  Similarily to fopen(),
-we have comedi_open():
-<P>
+we have comedi_open():</P>
+
 <P>
 <BLOCKQUOTE><CODE>
 <PRE>
 file=comedi_open("/dev/comedi0");
 </PRE>
 </CODE></BLOCKQUOTE>
+</P>
 <P>where file is of type <CODE>(comedi_t *)</CODE>.  This function
 calls <CODE>open()</CODE>, like we did explicitly in a previous
 section, but also fills the <CODE>comedi_t</CODE> structure with
 lots of goodies -- information that we will need to use
-soon.  
+soon.  </P>
 <P>Specifically, we needed to know maxdata for a specific
-subdevice/channel.  How about:
+subdevice/channel.  How about:</P>
 <P>
 <BLOCKQUOTE><CODE>
 <PRE>
 maxdata=comedi_get_maxdata(file,subdevice,channel);
 </PRE>
 </CODE></BLOCKQUOTE>
-<P>Wow.  How easy.  And the range type?
+</P>
+<P>Wow.  How easy.  And the range type?</P>
 <P>
 <BLOCKQUOTE><CODE>
 <PRE>
 range_type=comedi_get_rangetype(file,subdevice,channel);
 </PRE>
 </CODE></BLOCKQUOTE>
+</P>
 <P>Cool.  Other information you need to know about a channel
-can be gotten in a similar way.
-<P>
-<P>
-<P>
+can be gotten in a similar way.</P>
+
+
+
 <H2><A NAME="ss4.4">4.4 Your second comedi program</A>
 </H2>
 
-<P>
-<P>
+
+
 <P>Actually, this is the first comedi program again, just
-that we've added what we've learned.
-<P>
+that we've added what we've learned.</P>
+
 <P>
 <BLOCKQUOTE><CODE>
 <PRE>
@@ -228,17 +236,18 @@ int main(int argc,char *argv[])
 }
 </PRE>
 </CODE></BLOCKQUOTE>
-<P>
+</P>
+
 <P>By now, the <CODE>comedi_read_data()</CODE> line looks a little archaic, using
 the UNIX file descriptor cf->fd instead of just cf.  (By the
 way, somewhere in the heart of <CODE>comedi_open()</CODE> is the line
 <CODE>cf->fd=open(filename,O_RDWR)</CODE>.)  Well, there isn't one good
 replacement, since it highly depends on your application
 what additional features you might want in a <CODE>comedi_get()</CODE>
-replacement.  But this is the topic of a different section.
-<P>
-<P>
-<P>
+replacement.  But this is the topic of a different section.</P>
+
+
+
 <HR>
 <A HREF="comedilib-5.html">Next</A>
 <A HREF="comedilib-3.html">Previous</A>
index 92e74ba58840ac10afc3863b537eefa622a9c061..935786fea8e1b1d37fb0c92252126b5edd9a7f18 100644 (file)
@@ -1,54 +1,70 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <HTML>
 <HEAD>
- <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.7.4">
  <TITLE>Comedi Documentation: Application-specific functions</TITLE>
- <LINK HREF="comedilib-6.html" REL=next>
  <LINK HREF="comedilib-4.html" REL=previous>
  <LINK HREF="comedilib.html#toc5" REL=contents>
 </HEAD>
 <BODY>
-<A HREF="comedilib-6.html">Next</A>
+Next
 <A HREF="comedilib-4.html">Previous</A>
 <A HREF="comedilib.html#toc5">Contents</A>
 <HR>
-<H2><A NAME="s5">5. Application-specific functions</A></H2>
+<H2><A NAME="s5">5.</A> <A HREF="comedilib.html#toc5">Application-specific functions</A></H2>
+
+
 
-<P>
-<P>
 <H2><A NAME="ss5.1">5.1 Digital Input/Output</A>
 </H2>
 
-<P>
+
 <P>Many boards supported by comedi have digital input and output
 channels.  Some boards allow the direction of a channel to be
-specified in software.
+specified in software.</P>
 <P>Comedi groups digital channels into subdevice, which is a group
 of digital channels that have the same characteristics.  For
 example, digital output lines will be grouped into a digital
 output subdevice, bidirectional digital lines will be grouped
 into a digital I/O subdevice.  Thus, there can be multiple
-digital subdevices on a particular board.
-<P>
-<P>
-<H2><A NAME="ss5.2">5.2 Timed Input/Output</A>
-</H2>
+digital subdevices on a particular board.</P>
+<P>Individual digital lines can be read and written using the
+functions</P>
+<P><CODE>comedi_dio_read(device,subdevice,channel,unsigned int *bit);</CODE>
+<CODE>comedi_dio_write(device,subdevice,channel,unsigned int bit);</CODE></P>
+<P>The direction of bidirectional lines can be configured using
+the function</P>
+<P><CODE>comedi_dio_config(device,subdevice,channel,unsigned int dir);</CODE></P>
+<P>The parameter <CODE>dir</CODE> should be either COMEDI_INPUT or COMEDI_OUTPUT.
+Many digital I/O subdevices group channels into blocks for
+configuring direction.  Changing one channel in a block changes
+the entire block.</P>
+<P>Multiple channels can be read and written simultaneously using the
+function</P>
+<P><CODE>comedi_dio_bitfield(device,subdevice,unsigned int write_mask,unsigned int *bits);</CODE></P>
+<P>Each channel is assigned to a bit in the <CODE>write_mask</CODE> and <CODE>bits</CODE>
+bitfield.  If a bit in <CODE>write_mask</CODE> is set, the corresponding bit
+in <CODE>*bits</CODE> will be written to the corresponding digital output line.
+Each digital line is then read and placed into <CODE>*bits</CODE>.  The value
+of bits in <CODE>*bits</CODE> corresponding to digital output lines is
+undefined and device-specific.  Channel 0 is the least significant
+bit in the bitfield; channel 31 is the most significant bit.  Channels
+higher than 31 cannot be accessed using this method.</P>
 
-<P>
-<P>
-<P>
-<H2><A NAME="ss5.3">5.3 Slowly-varying inputs</A>
+
+
+<H2><A NAME="ss5.2">5.2 Slowly-varying inputs</A>
 </H2>
 
-<P>
-<P>
+
+
 <P>Sometimes, your input channels change slowly enough that
 you are able to average many sucessive input values to get a
 more accurate measurement of the actual value.  In general,
 the more samples you average, the better your estimate
 gets, roughly by a factor of sqrt(number_of_samples).
-Obviously, there are limitations to this:
-<P>
+Obviously, there are limitations to this:</P>
+
 <P>
 <UL>
 <LI>you are ultimately limited by "spurious free dynamic range"
@@ -66,11 +82,12 @@ not varying more than your target uncertainty for the
 entire 2 seconds.
 </LI>
 </UL>
+</P>
 <P>As you might have guessed, the comedi library has functions
 to help you in your quest to accurately measure slowly varying
 inputs.  I use these functions to measure thermocouple voltages
 -- actually, the library functions came from a section of code
-that was previously part of the thermocouple reading program.
+that was previously part of the thermocouple reading program.</P>
 <P>The comedi self-calibration utility also uses these functions.
 On some hardware, it is possible to tell it to measure an
 internal stable voltage reference, which is typically going
@@ -80,14 +97,62 @@ to get a very accurate measurement of the A/D converter output
 value that corresponds to the voltage reference.  Sometimes,
 however, this is overkill, since there is no need to
 perform a part-per-million calibration to a standard that
-is only accurate to part-per-thousand.
-<P>
-<P>
-<P>
-<P>
+is only accurate to part-per-thousand.</P>
+
+
+
+<H2><A NAME="ss5.3">5.3 Commands</A>
+</H2>
+
+
+
+<P>Many data acquisition devices have the capability to directly
+control acquisition using either an on-board timer or an external
+triggering input.  Comedi commands are used to control this kind
+of acquisition.  The same structure (comedi_cmd) used to control
+acquisition is used to query the capabilities of a device.</P>
+<P>Commands specify a particular data acquisition sequence, which
+is comprised of a number of scans.  Each scan is comprised of
+a number of conversions, which usually corresponds to a single
+A/D or D/A conversion.  The start and end of the sequence, and
+the start and end of each scan, and each conversion is called an
+event.</P>
+<P>Each of these 5 types of events are caused by a triggering
+source.  The source types are:</P>
 <P>
+<UL>
+<LI>TRIG_NONE           don't ever cause event</LI>
+<LI>TRIG_NOW            cause event to occur immediately</LI>
+<LI>TRIG_FOLLOW (see notes below)</LI>
+<LI>TRIG_TIME           cause event to occur at a particular time</LI>
+<LI>TRIG_TIMER  cause event to occur repeatedly at a specific rate</LI>
+<LI>TRIG_COUNT  cause event when count reaches specific value</LI>
+<LI>TRIG_EXT            external signal causes event</LI>
+<LI>TRIG_INT            internal signal causes event</LI>
+</UL>
+</P>
+<P>Not all triggers are applicable to all events.  Supported triggers
+for specific events depends significantly on your particular
+device.  In addition, for every trigger type, there is a cooresponding
+argument that specifies the rate, the count, which external signal,
+etc.</P>
+<P>TRIG_FOLLOW is a special type of trigger for scan_begin events that
+triggers on the next lower level trigger, in this case, the trigger
+for convert events.  It may or may not be supported.  Later, it may
+also be used for start events if you want to chain multiple commands.</P>
+<P>In particular, scan_end events will almost always be triggered on
+TRIG_COUNT, with the argument being the number of channels in the
+scan.  (Actually, samples in the scan, since on most boards you can
+measure a single channel multiple times in a scan.)  Also, until
+otherwise supported, start events can only be TRIG_NOW.</P>
+
+
+
+
+
+
 <HR>
-<A HREF="comedilib-6.html">Next</A>
+Next
 <A HREF="comedilib-4.html">Previous</A>
 <A HREF="comedilib.html#toc5">Contents</A>
 </BODY>
index 490972ce5604738148dd3fcc73b529fdbd9c9210..894f950b44aa69212749c5426e0a0f8c3f8a8373 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <HTML>
 <HEAD>
- <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.7.4">
  <TITLE>Comedi Documentation</TITLE>
  <LINK HREF="comedilib-1.html" REL=next>
 
@@ -21,58 +21,15 @@ Contents
 <P>
 <H2><A NAME="toc2">2.</A> <A HREF="comedilib-2.html">Installation and configuration</A></H2>
 
-<UL>
-<LI><A HREF="comedilib-2.html#ss2.1">2.1 Compiling and Installing</A>
-<LI><A HREF="comedilib-2.html#ss2.2">2.2 Insmod'ding the kernel module</A>
-<LI><A HREF="comedilib-2.html#ss2.3">2.3 Configuring comedi for your hardware</A>
-<LI><A HREF="comedilib-2.html#ss2.4">2.4 Getting information from comedi</A>
-</UL>
 <P>
 <H2><A NAME="toc3">3.</A> <A HREF="comedilib-3.html">Individual drivers</A></H2>
 
-<UL>
-<LI><A HREF="comedilib-3.html#ss3.1">3.1 National Instruments AT-MIO E series</A>
-<LI><A HREF="comedilib-3.html#ss3.2">3.2 Data Translation</A>
-</UL>
 <P>
 <H2><A NAME="toc4">4.</A> <A HREF="comedilib-4.html">Writing programs that use comedi and comedilib</A></H2>
 
-<UL>
-<LI><A HREF="comedilib-4.html#ss4.1">4.1 Your first comedi program</A>
-<LI><A HREF="comedilib-4.html#ss4.2">4.2 Converting samples to voltages</A>
-<LI><A HREF="comedilib-4.html#ss4.3">4.3 Another section</A>
-<LI><A HREF="comedilib-4.html#ss4.4">4.4 Your second comedi program</A>
-</UL>
 <P>
 <H2><A NAME="toc5">5.</A> <A HREF="comedilib-5.html">Application-specific functions</A></H2>
 
-<UL>
-<LI><A HREF="comedilib-5.html#ss5.1">5.1 Digital Input/Output</A>
-<LI><A HREF="comedilib-5.html#ss5.2">5.2 Timed Input/Output</A>
-<LI><A HREF="comedilib-5.html#ss5.3">5.3 Slowly-varying inputs</A>
-</UL>
-<P>
-<H2><A NAME="toc6">6.</A> <A HREF="comedilib-6.html">Comedilib reference</A></H2>
-
-<UL>
-<LI><A HREF="comedilib-6.html#ss6.1">6.1 comedi_loglevel()</A>
-<LI><A HREF="comedilib-6.html#ss6.2">6.2 comedi_open</A>
-<LI><A HREF="comedilib-6.html#ss6.3">6.3 comedi_fileno()</A>
-<LI><A HREF="comedilib-6.html#ss6.4">6.4 comedi_get_n_subdevices()</A>
-<LI><A HREF="comedilib-6.html#ss6.5">6.5 comedi_get_version_code()</A>
-<LI><A HREF="comedilib-6.html#ss6.6">6.6 comedi_get_driver_name()</A>
-<LI><A HREF="comedilib-6.html#ss6.7">6.7 comedi_get_board_name()</A>
-<LI><A HREF="comedilib-6.html#ss6.8">6.8 comedi_get_subdevice_type()</A>
-<LI><A HREF="comedilib-6.html#ss6.9">6.9 comedi_find_subdevice_by_type()</A>
-<LI><A HREF="comedilib-6.html#ss6.10">6.10 comedi_get_n_channels()</A>
-<LI><A HREF="comedilib-6.html#ss6.11">6.11 comedi_get_maxdata()</A>
-<LI><A HREF="comedilib-6.html#ss6.12">6.12 comedi_get_rangetype()</A>
-<LI><A HREF="comedilib-6.html#ss6.13">6.13 comedi_get_range()</A>
-<LI><A HREF="comedilib-6.html#ss6.14">6.14 comedi_trigger()</A>
-<LI><A HREF="comedilib-6.html#ss6.15">6.15 comedi_data_read()</A>
-<LI><A HREF="comedilib-6.html#ss6.16">6.16 comedi_sv_init()</A>
-<LI><A HREF="comedilib-6.html#ss6.17">6.17 comedi_get_timer()</A>
-</UL>
 <HR>
 <A HREF="comedilib-1.html">Next</A>
 Previous
index 623327f354d91c0cd908fc731e7aae0a483fd2c5..f8ce382efced745cf6fb78bcb2ba26e7f1a713e2 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <HTML>
 <HEAD>
- <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.7.4">
  <TITLE>Comedi Documentation: Libcomedi Reference</TITLE>
 
  <LINK HREF="comedilib_reference.html#toc1" REL=contents>
@@ -11,39 +11,40 @@ Next
 Previous
 <A HREF="comedilib_reference.html#toc1">Contents</A>
 <HR>
-<H2><A NAME="s1">1. Libcomedi Reference</A></H2>
+<H2><A NAME="s1">1.</A> <A HREF="comedilib_reference.html#toc1">Libcomedi Reference</A></H2>
+
+
 
-<P>
-<P>
 <H2><A NAME="ss1.1">1.1 Constants and Macros</A>
 </H2>
 
-<P>
-<P>
-<P>
+
+
+
 <H3>RANGE_LENGTH() <I>(deprecated)</I></H3>
 
 <P>
-<A NAME="RANGE_LENGTH"></A> <P><CODE>RANGE_LENGTH(rangetype)</CODE>
-<P>
+<A NAME="RANGE_LENGTH"></A> </P>
+<P><CODE>RANGE_LENGTH(rangetype)</CODE></P>
+
 <P>Rangetype values are library-internal tokens that represent an
 array of range information structures.  These numbers are primarily
-used for communication between the kernel and library.
-<P>
+used for communication between the kernel and library.</P>
+
 <P>The RANGE_LENGTH() macro returns the length of the array that is
-specified by the rangetype token.
-<P>
+specified by the rangetype token.</P>
+
 <P>The RANGE_LENGTH() macro is deprecated, and should not be used in
 new applications.  It is scheduled to be removed from the header
 file at version 1.0.  Binary compatibility may be broken for version
-1.1.
-<P>
-<P>
-<P>
+1.1.</P>
+
+
+
 <H2><A NAME="ss1.2">1.2 Data Types and Structures</A>
 </H2>
 
-<P>
+
 <H3><A NAME="comedi_t"></A> comedi_t</H3>
 
 <P>The data type <CODE>comedi_t</CODE> is used to represent an open Comedi
@@ -51,31 +52,31 @@ device.  A valid <CODE>comedi_t</CODE> pointer is returned by a successful
 call to <CODE>comedi_open()</CODE>, and should be used for subsequent
 access to the device.
 It is a transparent type, and pointers to type <CODE>comedi_t</CODE>
-should not be dereferenced.  
-<P>
-<P>
-<P>
+should not be dereferenced by the application.</P>
+
+
+
 <H3><A NAME="sampl_t"></A> sampl_t</H3>
 
 <P>The data type <CODE>sampl_t</CODE> is one of the generic types used to represent
 data values in libcomedi.  It is used in a few places where a shorter
-data type is useful, but is limited to 16 bits on the i386 architecture.
-<P>
-<P>
-<P>
+data type is useful, but is limited to 16 bits on the i386 architecture.</P>
+
+
+
 <H3><A NAME="lsampl_t"></A> lsampl_t</H3>
 
 <P>The data type <CODE>lsampl_t</CODE> is one of the generic types used to represent
-data values in libcomedi.  It is currently defined to be <CODE>unsigned int</CODE>.
-<P>
-<P>
-<P>
-<P>
-<P>
+data values in libcomedi.  It is currently defined to be <CODE>unsigned int</CODE>.</P>
+
+
+
+
+
 <H3><A NAME="comedi_trig_struct"></A> comedi_trig_struct <I>(deprecated)</I></H3>
 
-<P>
-<P>The <CODE>comedi_trig</CODE> structure
+
+<P>The <CODE>comedi_trig</CODE> structure</P>
 <P>
 <BLOCKQUOTE><CODE>
 <PRE>
@@ -95,16 +96,18 @@ struct comedi_trig_struct{
 }
 </PRE>
 </CODE></BLOCKQUOTE>
+</P>
 <P>The <CODE>comedi_trig</CODE> structure is a control structure used by the
 COMEDI_TRIG ioctl, an older method of communicating
-instructions to the driver and hardware.  Use of Comedi triggers is
-deprecated, and should not be used in new applications.
-<P>
-<P>
-<P>
+instructions to the driver and hardware.  Use of comedi_trig is
+deprecated, and should not be used in new applications.</P>
+
+<P>This structure is defined as part of the Comedi kernel interface.</P>
+
+
 <H3><A NAME="comedi_sv_t"></A> comedi_sv_t</H3>
 
-<P>
+
 <P>
 <BLOCKQUOTE><CODE>
 <PRE>
@@ -124,37 +127,66 @@ struct comedi_sv_struct{
 }
 </PRE>
 </CODE></BLOCKQUOTE>
+</P>
 <P>The <CODE>comedi_sv_t</CODE> structure is used by the <CODE>comedi_sv_*()</CODE>
 functions to provide a simple method of accurately measuring
 slowly varying inputs.  See the relevant section for more
-details.
-<P>
-<P>
-<P>
+details.</P>
+
+
+
+<H3><A NAME="comedi_cmd"></A> comedi_cmd</H3>
+
+
+<P>undocumented</P>
+
+<P>Related functions are described in section XXX.</P>
+
+<P>This structure is defined as part of the Comedi kernel interface.</P>
+
+
+<H3><A NAME="comedi_insn"></A> comedi_insn</H3>
+
+
+<P>undocumented</P>
+
+<P>Related functions are described in section XXX.</P>
+
+<P>This structure is defined as part of the Comedi kernel interface.</P>
+
+
+
+<H3><A NAME="comedi_range"></A> comedi_range</H3>
+
+
+<P>undocumented</P>
+
+
+
 <H2><A NAME="ss1.3">1.3 Functions</A>
 </H2>
 
-<P>
-<P>
+
+
 <H3><A NAME="comedi_close"></A> comedi_close()</H3>
 
-<P>
-<P><CODE>void comedi_close(comedi_t *it);</CODE>
-<P>
-<P>Closes a device previously opened by comedi_open().
-<P>
+
+<P><CODE>void comedi_close(comedi_t *it);</CODE></P>
+
+<P>Closes a device previously opened by comedi_open().</P>
+
 <P>The return type of this function will change to <CODE>int</CODE>, in
-order to match <CODE>fclose</CODE>.
-<P>
-<P>Source: <CODE>/lib/comedi.c</CODE>
-<P>
-<P>
+order to match <CODE>fclose</CODE>.</P>
+
+<P>Source: <CODE>/lib/comedi.c</CODE></P>
+
+
 <H3><A NAME="comedi_data_read"></A> comedi_data_read()</H3>
 
-<P>
+
 <P><CODE>int comedi_data_read(comedi_t *it,unsigned int subd,unsigned int chan,
-unsigned int range,unsigned int aref,lsampl_t *data);</CODE>
-<P>
+unsigned int range,unsigned int aref,lsampl_t *data);</CODE></P>
+
 <P>Reads a single sample on the channel that
 is specified by the comedi device <CODE>it</CODE>, the
 subdevice <CODE>subd</CODE>, and the channel <CODE>chan</CODE>.
@@ -162,17 +194,17 @@ For the A/D conversion (if appropriate),
 the device is configured to use range specification
 <CODE>range</CODE> and (if appropriate) analog reference type
 <CODE>aref</CODE>.  Analog reference types that are not supported
-by the device are silently ignored.
-<P>
+by the device are silently ignored.</P>
+
 <P><CODE>comedi_data_read()</CODE> reads one data value from
 the specified channel and places the 
 data value that is read in the location pointed to by
-<CODE>data</CODE>.
-<P>
+<CODE>data</CODE>.</P>
+
 <P>On sucess, <CODE>comedi_data_read()</CODE> returns 0.  If there is an
-error, -1 is returned.
-<P>
-<P>Valid analog reference numbers are:
+error, -1 is returned.</P>
+
+<P>Valid analog reference numbers are:</P>
 <P>
 <UL>
 <LI>AREF_GROUND Reference to analog ground</LI>
@@ -180,20 +212,21 @@ error, -1 is returned.
 <LI>AREF_DIFF           Differential reference</LI>
 <LI>AREF_OTHER  Board-specific meaning</LI>
 </UL>
+</P>
 <P>Valid data values returned by these function is an unsigned integer
 less than or equal to <CODE>maxdata</CODE>, which is channel-dependent.
 Conversion of these data value to physical units can be performed
 by <CODE>
-<A HREF="#comedi_to_phys">comedi_to_phys()</A></CODE>.
-<P>Source: <CODE>/lib/data.c</CODE>
-<P>
-<P>
+<A HREF="#comedi_to_phys">comedi_to_phys()</A></CODE>.</P>
+<P>Source: <CODE>/lib/data.c</CODE></P>
+
+
 <H3>comedi_data_write()</H3>
 
-<P>
+
 <P><CODE>int comedi_data_write(comedi_t *it,unsigned int subd,unsigned int chan,
-unsigned int range,unsigned int aref,lsampl_t data);</CODE>
-<P>
+unsigned int range,unsigned int aref,lsampl_t data);</CODE></P>
+
 <P>Writes a single sample on the channel that
 is specified by the comedi device <CODE>it</CODE>, the
 subdevice <CODE>subd</CODE>, and the channel <CODE>chan</CODE>.
@@ -201,13 +234,13 @@ For the D/A conversion (if appropriate), the device is
 configured to use range specification
 <CODE>range</CODE> and (if appropriate) analog reference type
 <CODE>aref</CODE>.  Analog reference types that are not supported
-by the device are silently ignored.
+by the device are silently ignored.</P>
 <P><CODE>comedi_data_write()</CODE> writes the data value
 specified by the argument <CODE>data</CODE> to
-the specified channel.
+the specified channel.</P>
 <P>On sucess, <CODE>comedi_data_write()</CODE> returns 0.  If there is an error, -1 is
-returned.
-<P>Valid analog reference numbers are:
+returned.</P>
+<P>Valid analog reference numbers are:</P>
 <P>
 <UL>
 <LI>AREF_GROUND Reference to analog ground</LI>
@@ -215,20 +248,21 @@ returned.
 <LI>AREF_DIFF           Differential reference</LI>
 <LI>AREF_OTHER  Board-specific meaning</LI>
 </UL>
+</P>
 <P>Valid data values used by these functions is an unsigned integer
 less than or equal to <CODE>maxdata</CODE>, which is channel-dependent.
 Conversion of physical units to these data value can be performed
 by <CODE>
-<A HREF="#comedi_from_phys">comedi_from_phys()</A></CODE>.
-<P>Source: <CODE>/lib/data.c</CODE>
-<P>
-<P>
-<P>
+<A HREF="#comedi_from_phys">comedi_from_phys()</A></CODE>.</P>
+<P>Source: <CODE>/lib/data.c</CODE></P>
+
+
+
 <H3>comedi_dio_bitfield();</H3>
 
 <P><CODE>int comedi_dio_bitfield(comedi_t *it,unsigned int subd,unsigned
-int write_mask,unsigned int *bits);</CODE>
-<P>
+int write_mask,unsigned int *bits);</CODE></P>
+
 <P>The function <CODE>comedi_dio_bitfield()</CODE> allows multiple channels to
 be read simultaneously from a digital input or digital I/O device.
 The parameter <CODE>write_mask</CODE> and the value pointed to by <CODE>bits</CODE>
@@ -236,112 +270,114 @@ are interpreted as bit fields, with the least significant bit
 representing channel 0.  For each bit in <CODE>write_mask</CODE> that is
 set, the cooresponding bit in <CODE>*bits</CODE> is written to the digital
 output channel.  Each digital input channel is read, and the result
-placed in the approprate bits in <CODE>*bits</CODE>.
-<P>
+placed in the approprate bits in <CODE>*bits</CODE>.</P>
+
 <P>The current implementation reads and writes bits using separate
 system calls, which is not ideal.  When the kernel driver supports
-simultaneous reading/writing, this will be fixed in the library.
-<P>
+simultaneous reading/writing, this will be fixed in the library.</P>
+
 <P>It should be noted that it is not possible to access channels
-greater than 31 using this function.
-<P>
-<P>Source: <CODE>/lib/dio.c</CODE>
-<P>
-<P>
-<P>
+greater than 31 using this function.</P>
+
+<P>Source: <CODE>/lib/dio.c</CODE></P>
+
+
+
 <H3>comedi_dio_config()</H3>
 
 <P><CODE>int comedi_dio_config(comedi_t *it,unsigned int subd,unsigned
-int chan,unsigned int dir);</CODE>
-<P>
+int chan,unsigned int dir);</CODE></P>
+
 <P>The function <CODE>comedi_dio_config</CODE> configures individual channels
 in a digital I/O subdevice to be either input or output, depending
 on the value of parameter <CODE>dir</CODE>.  Depending on the capabilities
 of the hardware device, multiple channels may be affected by
-a single call to <CODE>comedi_dio_config</CODE>.
-<P>
+a single call to <CODE>comedi_dio_config</CODE>.</P>
+
 <P>Valid directions are:
 <UL>
 <LI> COMEDI_INPUT</LI>
 <LI> COMEDI_OUTPUT</LI>
 </UL>
-<P>Source: <CODE>/lib/dio.c</CODE>
-<P>
-<P>
-<P>
+</P>
+<P>Source: <CODE>/lib/dio.c</CODE></P>
+
+
+
 <H3>comedi_dio_read()</H3>
 
 <P><CODE>int comedi_dio_read(comedi_t *it,unsigned int subd,unsigned int
-chan,unsigned int *bit);</CODE>
-<P>
+chan,unsigned int *bit);</CODE></P>
+
 <P>The function reads the status of channel <CODE>chan</CODE> belonging to the digital
 input subdevice <CODE>subd</CODE> of device <CODE>it</CODE>. The result, 0 or 1, is stored
-in bit. Returns -1 on failure.
-<P>
-<P>This function is equivalent to <CODE>comedi_data_read(it,subd,chan,0,0,bit)</CODE>.
-<P>
-<P>Source: <CODE>/lib/dio.c</CODE>
-<P>
-<P>
+in bit. Returns -1 on failure.</P>
+
+<P>This function is equivalent to <CODE>comedi_data_read(it,subd,chan,0,0,bit)</CODE>.</P>
+
+<P>Source: <CODE>/lib/dio.c</CODE></P>
+
+
 <H3>comedi_dio_write()</H3>
 
 <P><CODE>int comedi_dio_write(comedi_t *it,unsigned int subd,unsigned
-int chan,unsigned int bit);</CODE>
-<P>
+int chan,unsigned int bit);</CODE></P>
+
 <P>The function writes the value of <CODE>bit</CODE>, 0 or 1, to channel <CODE>chan</CODE>,
 belonging to the digital output device <CODE>subd</CODE> of device <CODE>it</CODE>. Returns
--1 on failure.
-<P>
-<P>Source: <CODE>/lib/dio.c</CODE>
-<P>
-<P>
+-1 on failure.</P>
+
+<P>Source: <CODE>/lib/dio.c</CODE></P>
+
+
 <H3>comedi_fileno()</H3>
 
-<P>
-<P><CODE>int comedi_fileno(comedi_t *it);</CODE>
-<P>
+
+<P><CODE>int comedi_fileno(comedi_t *it);</CODE></P>
+
 <P>The function <CODE>comedi_fileno</CODE>
 returns the integer descriptor for the handle <CODE>it</CODE>.  It
 is equivalent to the standard function <CODE>fileno</CODE>.  If
 <CODE>it</CODE> is an invalid <CODE>comedi_t</CODE> pointer, the function
-returns -1 and sets the appropriate libcomedi error value.
-<P>Source: <CODE>/lib/comedi.c</CODE>
-<P>
-<P>
-<P>
+returns -1 and sets the appropriate libcomedi error value.</P>
+<P>Source: <CODE>/lib/comedi.c</CODE></P>
+
+
+
 <H3>comedi_find_range()</H3>
 
-<P>
+
 <P><CODE>int comedi_find_range(comedi_t *it, unsigned int subdevice, unsigned
-int chan, unsigned int unit, double min, double max);</CODE>
-<P>
+int chan, unsigned int unit, double min, double max);</CODE></P>
+
 <P>The function <CODE>comedi_find_range</CODE> tries to
 locate the optimal (smallest) range for the channel <CODE>chan</CODE>
 belonging to a <CODE>subdevice</CODE> of the comedi device <CODE>it</CODE>,
 that includes both <CODE>min</CODE> and <CODE>max</CODE> in <CODE>units</CODE>.
 If it finds a matching range, it returns its index.  If no
-matching range is available, it returns -1.
-<P>
-<P>Valid units are:
+matching range is available, it returns -1.</P>
+
+<P>Valid units are:</P>
 <P>
 <UL>
 <LI>UNIT_volt           </LI>
 <LI>UNIT_mA</LI>
 <LI>UNIT_none</LI>
 </UL>
-<P>Source: <CODE>/lib/range.c</CODE>
-<P>
-<P>
-<P>
+</P>
+<P>Source: <CODE>/lib/range.c</CODE></P>
+
+
+
 <H3><A NAME="comedi_errno"></A> comedi_errno()</H3>
 
-<P><CODE>int comedi_errno(void);</CODE>
-<P>
+<P><CODE>int comedi_errno(void);</CODE></P>
+
 <P>The function <CODE>comedi_errno()</CODE>
 returns an integer describing the most recent comedilib error.  This
 integer may be used as the <CODE>errnum</CODE> parameter for
 <CODE>
-<A HREF="#comedi_strerror">comedi_strerror()</A></CODE>.
+<A HREF="#comedi_strerror">comedi_strerror()</A></CODE>.</P>
 <P>When a libcomedi function fails, it usually returns -1 or
 NULL, depending on the return type.  An internal library
 variable stores an error number, which can be retrieved with
@@ -350,23 +386,23 @@ converted to a human-readable form by the functions
 <CODE>
 <A HREF="#comedi_perror">comedi_perror()</A></CODE>
 and <CODE>
-<A HREF="#comedi_strerror">comedi_strerror()</A></CODE>.
+<A HREF="#comedi_strerror">comedi_strerror()</A></CODE>.</P>
 <P>These functions are intended to mimic the behavior of the
 standard C library functions <CODE>perror()</CODE>,
 <CODE>strerror</CODE>, and <CODE>errno()</CODE>.  In particular,
 libcomedi functions sometimes return an error that is generated
 by the C library; the Comedi error message in this case
-is the same as the C library.
-<P>Source: <CODE>/lib/error.c</CODE>
-<P>
-<P>
-<P>
+is the same as the C library.</P>
+<P>Source: <CODE>/lib/error.c</CODE></P>
+
+
+
 <H3>comedi_find_subdevice_by_type()</H3>
 
-<P>
+
 <P><CODE>int comedi_find_subdevice_by_type(comedi_t *it,int type,unsigned int
-start_subdevice);</CODE>
-<P>
+start_subdevice);</CODE></P>
+
 <P>The function <CODE>comedi_find_subdevice_by_type</CODE> tries to
 locate a subdevice belonging to comedi device <CODE>it</CODE>,
 having type <CODE>type</CODE>, starting with the subdevice
@@ -374,141 +410,143 @@ having type <CODE>type</CODE>, starting with the subdevice
 it returns its index.  If it does not locate the requested
 subdevice, it returns -1 and sets the comedi error number to
 "subdevice not found".  If there is an error, the function
-returns -1 and sets the appropriate error.
-<P>
+returns -1 and sets the appropriate error.</P>
+
 <P>For subdevice types, see the manual page for the function
 <CODE>
-<A HREF="#comedi_get_subdevice_type">comedi_get_subdevice_type()</A></CODE>.
-<P>Source: <CODE>/lib/get.c</CODE>
-<P>
-<P>
-<P>
+<A HREF="#comedi_get_subdevice_type">comedi_get_subdevice_type()</A></CODE>.</P>
+<P>Source: <CODE>/lib/get.c</CODE></P>
+
+
+
 <H3><A NAME="comedi_from_phys"></A> comedi_from_phys()</H3>
 
-<P>
+
 <P><CODE>lsampl_t comedi_from_phys(double data, comedi_range *rng,
-lsampl_t maxdata);</CODE>
+lsampl_t maxdata);</CODE></P>
 <P>Converts data given in physical units (<CODE>data</CODE>) into sample values
 (lsampl_t, between 0 and maxdata).  The parameter <CODE>rng</CODE>
 represents the conversion information to use, and the parameter
 <CODE>maxdata</CODE> represents the maximum possible data value for the
-channel that the data will be written to.
-<P>
-<P>Source: <CODE>/lib/range.c</CODE>
-<P>
-<P>
-<P>
+channel that the data will be written to.</P>
+
+<P>Source: <CODE>/lib/range.c</CODE></P>
+
+
+
 <H3>comedi_get_board_name()</H3>
 
-<P>
-<P><CODE>char *comedi_get_board_name(comedi_t *it);</CODE>
+
+<P><CODE>char *comedi_get_board_name(comedi_t *it);</CODE></P>
 <P>The function <CODE>comedi_get_board_name</CODE> returns a pointer
 to a string containing the name of the device.  This pointer is
 valid until the comedi descriptor <CODE>it</CODE> is closed.  This
-function returns <CODE>NULL</CODE> if there is an error.
-<P>Source: <CODE>/lib/get.c</CODE>
-<P>
-<P>
-<P>
+function returns <CODE>NULL</CODE> if there is an error.</P>
+<P>Source: <CODE>/lib/get.c</CODE></P>
+
+
+
 <H3>comedi_get_driver_name()</H3>
 
-<P>
-<P><CODE>char *comedi_get_driver_name(comedi_t *it);</CODE>
+
+<P><CODE>char *comedi_get_driver_name(comedi_t *it);</CODE></P>
 <P>The function <CODE>comedi_get_driver_name</CODE> returns a pointer
 to a string containing the name of the driver being used by comedi
 for the comedi device represented by <CODE>it</CODE>.  This pointer is
 valid until the comedi descriptor <CODE>it</CODE> is closed.  This
-function returns <CODE>NULL</CODE> if there is an error.
-<P>Source: <CODE>/lib/get.c</CODE>
-<P>
-<P>
-<P>
+function returns <CODE>NULL</CODE> if there is an error.</P>
+<P>Source: <CODE>/lib/get.c</CODE></P>
+
+
+
 <H3>comedi_get_maxdata()</H3>
 
-<P>
+
 <P><CODE>lsampl_t comedi_get_maxdata(comedi_t *it,unsigned int
-subdevice,unsigned int chan);</CODE>
-<P>
+subdevice,unsigned int chan);</CODE></P>
+
 <P>The function <CODE>comedi_get_maxdata()</CODE> returns the maximum
 valid data value for channel <CODE>chan</CODE> of subdevice
 <CODE>subdevice</CODE> belonging to the comedi device <CODE>it</CODE>
-This function returns 0 on error.
-<P>Source: <CODE>/lib/get.c</CODE>
-<P>
-<P>
-<P>
+This function returns 0 on error.</P>
+<P>Source: <CODE>/lib/get.c</CODE></P>
+
+
+
 <H3>comedi_get_n_channels()</H3>
 
-<P>
-<P><CODE>int comedi_get_n_channels(comedi_t *it,unsigned int subdevice);</CODE>
+
+<P><CODE>int comedi_get_n_channels(comedi_t *it,unsigned int subdevice);</CODE></P>
 <P>The function <CODE>comedi_get_n_channels()</CODE> returns the number
 of channels of the subdevice belonging to the comedi device <CODE>it</CODE>
-and having index <CODE>subdevice</CODE>.  This function returns -1 on error.
-<P>Source: <CODE>/lib/get.c</CODE>
-<P>
-<P>
-<P>
+and having index <CODE>subdevice</CODE>.  This function returns -1 on error.</P>
+<P>Source: <CODE>/lib/get.c</CODE></P>
+
+
+
 <H3>comedi_get_n_ranges()</H3>
 
-<P>
+
 <P><CODE>int comedi_get_n_ranges(comedi_t *it,unsigned int subdevice, unsigned int
-chan);</CODE>
+chan);</CODE></P>
 <P>The function <CODE>comedi_get_n_ranges()</CODE> returns the number
 of ranges of the channel <CODE>chan</CODE> belonging to the <CODE>subdevice</CODE>
-of the comedi device <CODE>it</CODE>.  This function returns -1 on error.
-<P>Source: <CODE>/lib/range.c</CODE>
-<P>
-<P>
-<P>
+of the comedi device <CODE>it</CODE>.  This function returns -1 on error.</P>
+<P>Source: <CODE>/lib/range.c</CODE></P>
+
+
+
 <H3>comedi_get_n_subdevices()</H3>
 
-<P>
-<P><CODE>int comedi_get_n_subdevices(comedi_t *it);</CODE>
+
+<P><CODE>int comedi_get_n_subdevices(comedi_t *it);</CODE></P>
 <P>The function <CODE>comedi_get_n_subdevices</CODE> returns the
 number of subdevices associated with the comedi descriptor
-<CODE>it</CODE>, or -1 if there is an error.
-<P>Source: <CODE>/lib/get.c</CODE>
-<P>
-<P>
-<P>
+<CODE>it</CODE>, or -1 if there is an error.</P>
+<P>Source: <CODE>/lib/get.c</CODE></P>
+
+
+
 <H3>comedi_get_range()</H3>
 
-<P>
+
 <P><CODE>comedi_range * comedi_get_range(comedi_t *it,unsigned int subdevice,unsigned int chan,unsigned int
-range);</CODE>
+range);</CODE></P>
 <P>The function <CODE>comedi_get_range</CODE> returns a pointer to a
 comedi_range structure that contains information that can be used to
 convert sample values to or from physical units.  The pointer is valid
 until the comedi device <CODE>it</CODE> is closed.  If there is an
-error, NULL is returned.
-<P>Source: <CODE>/lib/get.c</CODE>
-<P>
-<P>
-<H3>comedi_get_rangetype()</H3>
+error, NULL is returned.</P>
+<P>Source: <CODE>/lib/get.c</CODE></P>
+
+
+<H3>comedi_get_rangetype()  <I>deprecated</I></H3>
+
 
-<P>
 <P><CODE>int comedi_get_rangetype(comedi_t *it,unsigned int subdevice,unsigned int
-chan);</CODE>
+chan);</CODE></P>
 <P>The function <CODE>comedi_get_rangetype()</CODE> returns an integer
 that represents the number of range specifications available for a
 particular channel <CODE>chan</CODE> of the subdevice <CODE>subdevice</CODE>, as well as a conversion table to convert sample
-values to/from physical units. 
+values to/from physical units. </P>
 <P>The macro
 <CODE>RANGE_LENGTH(rangetype)</CODE>
 can be used to determine the number of range specifications for a given
-range type.
-<P>Source: <CODE>/lib/get.c</CODE>
-<P>
-<P>
+range type.</P>
+
+<P>This function is deprecated and should not be used in new code.</P>
+<P>Source: <CODE>/lib/get.c</CODE></P>
+
+
 <H3><A NAME="comedi_get_subdevice_type"></A> comedi_get_subdevice_type()</H3>
 
-<P>
-<P><CODE>int comedi_get_subdevice_type(comedi_t *it,unsigned int subdevice);</CODE>
+
+<P><CODE>int comedi_get_subdevice_type(comedi_t *it,unsigned int subdevice);</CODE></P>
 <P>The function <CODE>comedi_get_subdevice_type()</CODE> returns an
 integer describing the type of subdevice that belongs to the comedi
 device <CODE>it</CODE> and has the index <CODE>subdevice</CODE>.  The
-function returns -1 is there is an error.
-<P>Valid subdevice types are:
+function returns -1 is there is an error.</P>
+<P>Valid subdevice types are:</P>
 <P>
 <UL>
 <LI><CODE>COMEDI_SUBD_UNUSED</CODE>
@@ -529,62 +567,63 @@ Calibration DACs</LI>
 <LI><CODE>COMEDI_SUBD_PROC</CODE>
 Processor or DSP</LI>
 </UL>
-<P>Source: <CODE>/lib/get.c</CODE>
-<P>
-<P>
+</P>
+<P>Source: <CODE>/lib/get.c</CODE></P>
+
+
 <H3>comedi_get_timer() <I>(deprecated)</I></H3>
 
-<P>
+
 <P><CODE>int comedi_get_timer(comedi_t *it,unsigned int subdev, double
-freq,unsigned int *trigvar, double *actual_freq);</CODE>
-<P>
+freq,unsigned int *trigvar, double *actual_freq);</CODE></P>
+
 <P>The function <CODE>comedi_get_timer</CODE> converts the frequency <CODE>freq</CODE>
 to a number suitable to send to the driver in a <CODE>comedi_trig</CODE>
 structure.  This function remains for compatibility with very
 old versions of Comedi, that converted sampling rates to timer
 values in the libary.  This conversion is now done in the kernel,
 and every device has the timer type <CODE>nanosec_timer</CODE>, indicating
-that timer values are simply a time specified in nanoseconds.
-<P>
-<P>This function is deprecated and should not be used in new applications.
-<P>
-<P>Source: <CODE>/lib/timer.c</CODE>
-<P>
-<P>
+that timer values are simply a time specified in nanoseconds.</P>
+
+<P>This function is deprecated and should not be used in new applications.</P>
+
+<P>Source: <CODE>/lib/timer.c</CODE></P>
+
+
 <H3>comedi_get_version_code()</H3>
 
-<P>
-<P><CODE>int comedi_get_version_code(comedi_t *it);</CODE>
-<P>
+
+<P><CODE>int comedi_get_version_code(comedi_t *it);</CODE></P>
+
 <P>The function <CODE>comedi_get_version_code()</CODE> returns the
 version code of the currently running comedi module.  The version
 code is of the form 0x01072b, which is the version code for
-version 1.7.43.
-<P>
+version 1.7.43.</P>
+
 <P>This function is of limited usefulness.  A typical mis-application
 of this function is to use it to determine if a certain feature is
 supported.  If the application needs
 to know of the existence of a particular feature, an existence
-test function should be written and put in the libcomedi source.
-<P>Source: <CODE>/lib/get.c</CODE>
-<P>
-<P>
+test function should be written and put in the libcomedi source.</P>
+<P>Source: <CODE>/lib/get.c</CODE></P>
+
+
 <H3>comedi_loglevel()</H3>
 
-<P>
-<P><CODE>int comedi_loglevel(int loglevel);</CODE>
-<P>
+
+<P><CODE>int comedi_loglevel(int loglevel);</CODE></P>
+
 <P>This function affects the output of debugging and error messages
 from libcomedi.  By increasing the loglevel, additional debugging
 information will be printed.  This function returns the previous
 loglevel.  Error messages and debugging are printed to the
 stream <CODE>stderr</CODE>.  The loglevel can also be affected by the
-environment variable COMEDI_LOGLEVEL.
-<P>
+environment variable COMEDI_LOGLEVEL.</P>
+
 <P>In order to conserve resources, some debugging information is
-disabled when libcomedi is compiled.
-<P>
-<P>The meaning of the loglevels is as follows:
+disabled when libcomedi is compiled.</P>
+
+<P>The meaning of the loglevels is as follows:</P>
 <P>
 <UL>
 <LI><CODE>COMEDILIB_LOGLEVEL=0</CODE>
@@ -612,29 +651,30 @@ called by comedilib.
 Comedilib prints a lot of debugging messages.
 </LI>
 </UL>
-<P>Bugs: Libcomedi doesn't currently have much debugging information.
-<P>Source: <CODE>/lib/error.c</CODE>
-<P>
-<P>
+</P>
+<P>Bugs: Libcomedi doesn't currently have much debugging information.</P>
+<P>Source: <CODE>/lib/error.c</CODE></P>
+
+
 <H3>comedi_open()</H3>
 
-<P>
-<P><CODE>comedi_t *comedi_open(char *filename);</CODE>
+
+<P><CODE>comedi_t *comedi_open(char *filename);</CODE></P>
 <P>Opens a comedi device specified by the filename <CODE>filename</CODE>.
 Returns NULL on error.  On sucess, it returns a handle that is
-given as a parameter to other libcomedi functions.
-<P>
+given as a parameter to other libcomedi functions.</P>
+
 <P>You are not supposed to have access to the internals of the
-<CODE>comedi_t</CODE> structure.
-<P>Bugs: Not strictly identical to <CODE>fopen</CODE>
-<P>Source: <CODE>/lib/comedi.c</CODE>
-<P>
-<P>
-<P>
+<CODE>comedi_t</CODE> structure.</P>
+<P>Bugs: Not strictly identical to <CODE>fopen</CODE></P>
+<P>Source: <CODE>/lib/comedi.c</CODE></P>
+
+
+
 <H3><A NAME="comedi_perror"></A> comedi_perror()</H3>
 
-<P>
-<P><CODE>void comedi_perror(const char *s);</CODE>
+
+<P><CODE>void comedi_perror(const char *s);</CODE></P>
 <P>When a comedilib function fails, it usually returns -1 or
 NULL, depending on the return type.  An internal library
 variable stores an error number, which can be retrieved with 
@@ -644,26 +684,26 @@ This error number can be
 converted to a human-readable form by the functions 
 <CODE>comedi_perror()</CODE>
 and <CODE>
-<A HREF="#comedi_strerror">comedi_strerror()</A></CODE>.
+<A HREF="#comedi_strerror">comedi_strerror()</A></CODE>.</P>
 <P>These functions are intended to mimic the behavior of the
 standard C library functions <CODE>perror()</CODE>,
 <CODE>strerror</CODE>, and <CODE>errno()</CODE>.  In particular,
 comedilib functions sometimes return an error that is generated
 inside the C library; the comedi error message in this case
-is the same as the C library.
+is the same as the C library.</P>
 <P>The function <CODE>comedi_perror()</CODE> prints an error
 message to stderr.  The error message consists of the
 argument string, a colon, a space, a description of the error
-condition, and a new line.
-<P>Bugs: Does not support internationalization.
-<P>Source: <CODE>/lib/error.c</CODE>
-<P>
-<P>
-<P>
+condition, and a new line.</P>
+<P>Bugs: Does not support internationalization.</P>
+<P>Source: <CODE>/lib/error.c</CODE></P>
+
+
+
 <H3><A NAME="comedi_strerror"></A> comedi_strerror()</H3>
 
-<P>
-<P><CODE>*comedi_strerror(int errnum);</CODE>
+
+<P><CODE>*comedi_strerror(int errnum);</CODE></P>
 <P>When a comedilib function fails, it usually returns -1 or
 NULL, depending on the return type.  An internal library
 variable stores an error number, which can be retrieved with
@@ -672,118 +712,192 @@ variable stores an error number, which can be retrieved with
 converted to a human-readable form by the functions
 <CODE>
 <A HREF="#comedi_perror">comedi_perror()</A></CODE>
-and <CODE>comedi_strerror()</CODE>.
+and <CODE>comedi_strerror()</CODE>.</P>
 <P>These functions are intended to mimic the behavior of the
 standard C library functions <CODE>perror()</CODE>,
 <CODE>strerror</CODE>, and <CODE>errno()</CODE>.  In particular,
 comedilib functions sometimes return an error that is generated
 inside the C library; the comedi error message in this case
-is the same as the C library.
+is the same as the C library.</P>
 <P>The function <CODE>comedi_strerror()</CODE> returns a pointer to a
 character string
 describing the comedilib error <CODE>errnum</CODE>.  The persistence
 of the returned pointer is undefined, and should not be trusted
 after the next libcomedi call.  An unrecognized error number will
-return a pointer to the string "undefined error", or similar.
-<P>Bugs: Does not support internationalization.
-<P>Source: <CODE>/lib/error.c</CODE>
-<P>
-<P>
-<P>
+return a pointer to the string "undefined error", or similar.</P>
+<P>Bugs: Does not support internationalization.</P>
+<P>Source: <CODE>/lib/error.c</CODE></P>
+
+
+
 <H3>comedi_sv_init()</H3>
 
-<P>
+
 <P><CODE>int comedi_sv_init(comedi_sv_t *sv,comedi_t *dev,unsigned int subd,
-unsigned int chan);</CODE>
-<P>
+unsigned int chan);</CODE></P>
+
 <P><CODE>comedi_sv_init</CODE> initializes the slow varying comedi structure
 <CODE>sv</CODE> of the device <CODE>dev</CODE>, the subdevice <CODE>subd</CODE> (analog input) and
 the channel <CODE>chan</CODE>.
 The slow varying comedi structure <CODE>sv</CODE> of type <CODE>
 <A HREF="#comedi_sv_t">comedi_sv_t</A></CODE>
 specifies the signal measurement.  The default number of averaged
-samples is 100.  Returns zero on success, -1 on error.
-<P>Bugs: comedi_sv_* was very poorly designed.
-<P>Source: <CODE>/lib/sv.c</CODE>
-<P>
-<P>
-<P>
+samples is 100.  Returns zero on success, -1 on error.</P>
+<P>Bugs: comedi_sv_* was very poorly designed.</P>
+<P>Source: <CODE>/lib/sv.c</CODE></P>
+
+
+
 <H3>comedi_sv_update()</H3>
 
-<P>
-<P><CODE>int comedi_sv_update(comedi_sv_t *sv);</CODE>
+
+<P><CODE>int comedi_sv_update(comedi_sv_t *sv);</CODE></P>
 <P>The function <CODE>comedi_sv_update</CODE> updates the slow varying comedi structure
 <CODE>sv</CODE>.
-Returns zero on success, -1 on error.
-<P>Source: <CODE>/lib/sv.c</CODE>
-<P>
-<P>
-<P>
+Returns zero on success, -1 on error.</P>
+<P>Source: <CODE>/lib/sv.c</CODE></P>
+
+
+
 <H3>int comedi_sv_measure()</H3>
 
-<P>
-<P><CODE>int comedi_sv_measure(comedi_sv_t *it,double *data);</CODE>
+
+<P><CODE>int comedi_sv_measure(comedi_sv_t *it,double *data);</CODE></P>
 <P><CODE>comedi_sv_measure</CODE> measures the slow variing signal. The measurement
 is specified by the slow varying comedi structure <CODE>sv</CODE>, the result is
 stored in <CODE>data</CODE>.
-On success returns the number of samples, -1 on error.
-<P>Source: <CODE>/lib/sv.c</CODE>
-<P>
-<P>
-<P>
+On success returns the number of samples, -1 on error.</P>
+<P>Source: <CODE>/lib/sv.c</CODE></P>
+
+
+
 <H3><A NAME="comedi_to_phys"></A> comedi_to_phys()</H3>
 
-<P>
+
 <P><CODE>double comedi_to_phys(lsampl_t data, comedi_range *rng,
-lsampl_t maxdata);</CODE>
+lsampl_t maxdata);</CODE></P>
 <P>Converts data given in sample values (lsampl_t, between 0 and
 maxdata) into physical units (double).  The parameter <CODE>rng</CODE>
 represents the conversion information to use, and the parameter
 <CODE>maxdata</CODE> represents the maximum possible data value for the
-channel that the data was read.
-<P>Source: <CODE>/lib/range.c</CODE>
-<P>
-<P>
-<P>
+channel that the data was read.</P>
+<P>Source: <CODE>/lib/range.c</CODE></P>
+
+
+
 <H3>comedi_trigger() <I>(deprecated)</I></H3>
 
-<P>
-<P><CODE>int comedi_trigger(comedi_t *it,comedi_trig *trig);</CODE>
+
+<P><CODE>int comedi_trigger(comedi_t *it,comedi_trig *trig);</CODE></P>
 <P>The function <CODE>comedi_trigger</CODE> instructs comedi to
 perform the command specified by the 
 <A HREF="#comedi_trig_struct">trigger structure</A> <CODE>trig</CODE>.  Results depend on
 the particular command being issued.  If there is an
-error, -1 is returned.
-<P>Lifetime: removal at 1.0.
-<P>Source: <CODE>/lib/comedi.c</CODE>
-<P>
-<P>
-<P>
-<P>
-<P>
-<P>
-<P>
-<P>
-<P>
-<P>
-<P>
-<P>
-<P>
-<P>
-<H3>comedi_get_timer()</H3>
+error, -1 is returned.</P>
+<P>Lifetime: removal at 1.0.</P>
+<P>Source: <CODE>/lib/comedi.c</CODE></P>
 
+
+
+<H3><A NAME="comedi_get_subdevice_flags"></A> comedi_get_subdevice_flags()</H3>
+
+
+<P><CODE>int comedi_get_subdevice_flags(comedi_t *dev, unsigned int subdevice);</CODE></P>
+
+<P>This function returns a bitfield describing the capabilities of the
+specified subdevice.  If there is an error, -1 is returned.</P>
+
+<P>The bits are:</P>
 <P>
+<UL>
+<LI>SDF_BUSY            subdevice is running a command</LI>
+<LI>SDF_BUSY_OWNER      subdevice is running a command started by
+the file descriptor used by <CODE>dev</CODE>.</LI>
+<LI>SDF_LOCKED  subdevice is locked</LI>
+<LI>SDF_LOCKED_OWNER    subdevice is locked by the file descriptor used
+by <CODE>dev</CODE>.</LI>
+<LI>SDF_MAXDATA maximum data values are channel dependent</LI>
+<LI>SDF_FLAGS           channel flags are channel dependent</LI>
+<LI>SDF_RANGETYPE       range types are channel dependent</LI>
+<LI>SDF_MODE0           deprecated</LI>
+<LI>SDF_MODE1           deprecated</LI>
+<LI>SDF_MODE2           deprecated</LI>
+<LI>SDF_MODE3           deprecated</LI>
+<LI>SDF_MODE4           deprecated</LI>
+<LI>SDF_CMD             subdevice supports commands</LI>
+<LI>SDF_READABLE        subdevice can be read from</LI>
+<LI>SDF_WRITEABLE       subdevice can be written to</LI>
+<LI>SDF_RT              deprecated</LI>
+<LI>SDF_GROUND  subdevice is capable of ground analog reference</LI>
+<LI>SDF_COMMON  subdevice is capable of common analog reference</LI>
+<LI>SDF_DIFF            subdevice is capable of differential analog reference</LI>
+<LI>SDF_OTHER           subdevice is capable of other analog reference</LI>
+<LI>SDF_DITHER  subdevice recognizes dither flag</LI>
+<LI>SDF_DEGLITCH        subdevice recognizes deglitch flag</LI>
+<LI>SDF_MMAP            deprecated</LI>
+<LI>SDF_RUNNING subdevice is acquiring data (i.e., command has not
+completed)</LI>
+<LI>SDF_LSAMPL  subdevice uses samples of type lsampl_t (otherwise
+sampl_t)</LI>
+<LI>SDF_PACKED  subdevice uses bitfield samples (otherwise it uses
+one sample per channel)</LI>
+</UL>
+</P>
+
+
+
+<P>The bit definitions are part of the Comedi kernel interface.</P>
+
+
+
+<H3><A NAME="comedi_range_is_chan_specific"></A> comedi_range_is_chan_specific()</H3>
+
+
+<P><CODE>int comedi_range_is_chan_specific(comedi_t *dev,unsigned int subdevice);</CODE></P>
+
+<P>If each channel of the specified subdevice has a different range
+specification, this function returns 1.  Otherwise, this function
+returns 0.  On error, this function returns -1.</P>
+
+
+
+<H3><A NAME="undocumented"></A> Undocumented functions</H3>
+
+
+
 <P>
-<BLOCKQUOTE><CODE>
-<PRE>
-int comedi_get_timer(comedi_t *it,unsigned int subdev,double freq,unsigned int *trigvar,
-        double *actual_freq);
-</PRE>
-</CODE></BLOCKQUOTE>
-<P>
-<P>
-<P>
-<P>
+<UL>
+<LI>comedi_maxdata_is_chan_specific()</LI>
+<LI>comedi_get_buffer_size()</LI>
+<LI>comedi_get_max_buffer_size()</LI>
+<LI>comedi_set_buffer_size()</LI>
+<LI>comedi_set_max_buffer_size()</LI>
+<LI>comedi_do_insnlist()</LI>
+<LI>comedi_do_insn()</LI>
+<LI>comedi_lock()</LI>
+<LI>comedi_unlock()</LI>
+<LI>comedi_get_cmd_src_mask()</LI>
+<LI>comedi_get_cmd_generic_timed()</LI>
+<LI>comedi_cancel()</LI>
+<LI>comedi_command()</LI>
+<LI>comedi_command_test()</LI>
+<LI>comedi_poll()</LI>
+<LI>comedi_get_buffer_contents()</LI>
+<LI>comedi_mark_buffer_read()</LI>
+<LI>comedi_get_buffer_offset()</LI>
+<LI>comedi_set_global_oor_behavior()</LI>
+</UL>
+</P>
+
+
+
+
+
+
+
+
+
+
 <HR>
 Next
 Previous
index 7062fdbcdaaf8c356ec9704f0aa2ed6924e4483e..78ad784c1c559543392b399d18523b7a7a0d7033 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <HTML>
 <HEAD>
- <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.7.4">
  <TITLE>Comedi Documentation</TITLE>
  <LINK HREF="comedilib_reference-1.html" REL=next>
 
@@ -18,11 +18,6 @@ Contents
 <P>
 <H2><A NAME="toc1">1.</A> <A HREF="comedilib_reference-1.html">Libcomedi Reference</A></H2>
 
-<UL>
-<LI><A HREF="comedilib_reference-1.html#ss1.1">1.1 Constants and Macros</A>
-<LI><A HREF="comedilib_reference-1.html#ss1.2">1.2 Data Types and Structures</A>
-<LI><A HREF="comedilib_reference-1.html#ss1.3">1.3 Functions</A>
-</UL>
 <HR>
 <A HREF="comedilib_reference-1.html">Next</A>
 Previous