From: David Schleef Date: Sun, 3 Sep 2000 02:13:59 +0000 (+0000) Subject: added comedilib_reference and comedilib updates X-Git-Tag: r0_7_11~13 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=f4ced5dd1783df7c6cf0332a8115bef2133ed530;p=comedilib.git added comedilib_reference and comedilib updates --- diff --git a/doc/comedilib.sgml b/doc/comedilib.sgml index 2460940..da0ebd9 100644 --- a/doc/comedilib.sgml +++ b/doc/comedilib.sgml @@ -270,16 +270,13 @@ int main(int argc,char *argv[]) Should be understandable. Open the device, get the data, print it out. This is basically the guts of demo/inp.c, -without error checking or fancy options. Including all -the appropriate headers is sometimes a little tricky. +without error checking or fancy options. Compile it using cc tut1.c -lcomedi -o tut1 -Hopefully it works. - 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, @@ -303,20 +300,29 @@ a voltage. Naturally, as a good programmer, your first question is: "How do I do this in a device-independent manner?" -For each subdevice, the comedi kernel module keeps a -'range_type' variable. This variable contains the number -of available ranges (i.e., gains) that you can select, -along with an offset in a list of range information -structures. If you know the range_type variable, you -can use these macros: +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. + +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.) + +The largest sample value can be found using the function: - RANGE_OFFSET(range_type) - RANGE_LENGTH(range_type) + comedi_get_maxdata() -to extract such information. However, you want the -actual voltage information, not some integer offset -in a table. Rather than messing with the library -internals, use the function +The number of available ranges can be found using the function: + + comedi_get_n_ranges() + +For each value of the range parameter for a particular +subdevice/channel, you can get range information using the +function: ptr=comedi_get_range(comedi_file,subdevice,channel, range) @@ -333,8 +339,7 @@ typedef struct{ }comedi_range; -As you might expect, ptr[range] is for range 'range', -which you provided to comedi_data_read() above. 'min' represents +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, @@ -356,13 +361,6 @@ and the opposite data=comedi_from_phys(it,volts,range,maxdata); -You probably noticed (and were worried) that we haven't -discussed how to determine maxdata and range_type. Well, -you could ask the kernel this information each time you need -it, but since there are other variables, special cases, -and several subdevices to worry about, it would be nice -if the library could take care of this... (read on...) -

Another section @@ -385,7 +383,7 @@ where file is of type (comedi_t *). This function calls open(), like we did explicitly in a previous section, but also fills the comedi_t structure with lots of goodies -- information that we will need to use -soon. +soon. Specifically, we needed to know maxdata for a specific subdevice/channel. How about: diff --git a/doc/comedilib_reference-1.html b/doc/comedilib_reference-1.html new file mode 100644 index 0000000..623327f --- /dev/null +++ b/doc/comedilib_reference-1.html @@ -0,0 +1,792 @@ + + + + + Comedi Documentation: Libcomedi Reference + + + + +Next +Previous +Contents +


+

1. Libcomedi Reference

+ +

+

+

1.1 Constants and Macros +

+ +

+

+

+

RANGE_LENGTH() (deprecated)

+ +

+

RANGE_LENGTH(rangetype) +

+

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. +

+

The RANGE_LENGTH() macro returns the length of the array that is +specified by the rangetype token. +

+

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. +

+

+

+

1.2 Data Types and Structures +

+ +

+

comedi_t

+ +

The data type comedi_t is used to represent an open Comedi +device. A valid comedi_t pointer is returned by a successful +call to comedi_open(), and should be used for subsequent +access to the device. +It is a transparent type, and pointers to type comedi_t +should not be dereferenced. +

+

+

+

sampl_t

+ +

The data type sampl_t 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. +

+

+

+

lsampl_t

+ +

The data type lsampl_t is one of the generic types used to represent +data values in libcomedi. It is currently defined to be unsigned int. +

+

+

+

+

+

comedi_trig_struct (deprecated)

+ +

+

The comedi_trig structure +

+

+
+struct comedi_trig_struct{
+        unsigned int subdev;            /* subdevice */
+        unsigned int mode;              /* mode */
+        unsigned int flags;
+        unsigned int n_chan;            /* number of channels */
+        unsigned int *chanlist;         /* channel/range list */
+        sampl_t *data;                  /* data list, size depends on subd flags */
+        unsigned int n;                 /* number of scans */
+        unsigned int trigsrc;
+        unsigned int trigvar;
+        unsigned int trigvar1;
+        unsigned int data_len;
+        unsigned int unused[3];
+}
+
+
+

The comedi_trig 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. +

+

+

+

comedi_sv_t

+ +

+

+

+
+struct comedi_sv_struct{
+        comedi_t *dev;
+        unsigned int subdevice;
+        unsigned int chan;
+
+        /* range policy */
+        int range;
+        int aref;
+        
+        /* number of measurements to average (for ai) */
+        int n;
+
+        lsampl_t maxdata;
+}
+
+
+

The comedi_sv_t structure is used by the comedi_sv_*() +functions to provide a simple method of accurately measuring +slowly varying inputs. See the relevant section for more +details. +

+

+

+

1.3 Functions +

+ +

+

+

comedi_close()

+ +

+

void comedi_close(comedi_t *it); +

+

Closes a device previously opened by comedi_open(). +

+

The return type of this function will change to int, in +order to match fclose. +

+

Source: /lib/comedi.c +

+

+

comedi_data_read()

+ +

+

int comedi_data_read(comedi_t *it,unsigned int subd,unsigned int chan, +unsigned int range,unsigned int aref,lsampl_t *data); +

+

Reads a single sample on the channel that +is specified by the comedi device it, the +subdevice subd, and the channel chan. +For the A/D conversion (if appropriate), +the device is configured to use range specification +range and (if appropriate) analog reference type +aref. Analog reference types that are not supported +by the device are silently ignored. +

+

comedi_data_read() reads one data value from +the specified channel and places the +data value that is read in the location pointed to by +data. +

+

On sucess, comedi_data_read() returns 0. If there is an +error, -1 is returned. +

+

Valid analog reference numbers are: +

+

+

Valid data values returned by these function is an unsigned integer +less than or equal to maxdata, which is channel-dependent. +Conversion of these data value to physical units can be performed +by +comedi_to_phys(). +

Source: /lib/data.c +

+

+

comedi_data_write()

+ +

+

int comedi_data_write(comedi_t *it,unsigned int subd,unsigned int chan, +unsigned int range,unsigned int aref,lsampl_t data); +

+

Writes a single sample on the channel that +is specified by the comedi device it, the +subdevice subd, and the channel chan. +For the D/A conversion (if appropriate), the device is +configured to use range specification +range and (if appropriate) analog reference type +aref. Analog reference types that are not supported +by the device are silently ignored. +

comedi_data_write() writes the data value +specified by the argument data to +the specified channel. +

On sucess, comedi_data_write() returns 0. If there is an error, -1 is +returned. +

Valid analog reference numbers are: +

+

+

Valid data values used by these functions is an unsigned integer +less than or equal to maxdata, which is channel-dependent. +Conversion of physical units to these data value can be performed +by +comedi_from_phys(). +

Source: /lib/data.c +

+

+

+

comedi_dio_bitfield();

+ +

int comedi_dio_bitfield(comedi_t *it,unsigned int subd,unsigned +int write_mask,unsigned int *bits); +

+

The function comedi_dio_bitfield() allows multiple channels to +be read simultaneously from a digital input or digital I/O device. +The parameter write_mask and the value pointed to by bits +are interpreted as bit fields, with the least significant bit +representing channel 0. For each bit in write_mask that is +set, the cooresponding bit in *bits is written to the digital +output channel. Each digital input channel is read, and the result +placed in the approprate bits in *bits. +

+

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. +

+

It should be noted that it is not possible to access channels +greater than 31 using this function. +

+

Source: /lib/dio.c +

+

+

+

comedi_dio_config()

+ +

int comedi_dio_config(comedi_t *it,unsigned int subd,unsigned +int chan,unsigned int dir); +

+

The function comedi_dio_config configures individual channels +in a digital I/O subdevice to be either input or output, depending +on the value of parameter dir. Depending on the capabilities +of the hardware device, multiple channels may be affected by +a single call to comedi_dio_config. +

+

Valid directions are: +

+

Source: /lib/dio.c +

+

+

+

comedi_dio_read()

+ +

int comedi_dio_read(comedi_t *it,unsigned int subd,unsigned int +chan,unsigned int *bit); +

+

The function reads the status of channel chan belonging to the digital +input subdevice subd of device it. The result, 0 or 1, is stored +in bit. Returns -1 on failure. +

+

This function is equivalent to comedi_data_read(it,subd,chan,0,0,bit). +

+

Source: /lib/dio.c +

+

+

comedi_dio_write()

+ +

int comedi_dio_write(comedi_t *it,unsigned int subd,unsigned +int chan,unsigned int bit); +

+

The function writes the value of bit, 0 or 1, to channel chan, +belonging to the digital output device subd of device it. Returns +-1 on failure. +

+

Source: /lib/dio.c +

+

+

comedi_fileno()

+ +

+

int comedi_fileno(comedi_t *it); +

+

The function comedi_fileno +returns the integer descriptor for the handle it. It +is equivalent to the standard function fileno. If +it is an invalid comedi_t pointer, the function +returns -1 and sets the appropriate libcomedi error value. +

Source: /lib/comedi.c +

+

+

+

comedi_find_range()

+ +

+

int comedi_find_range(comedi_t *it, unsigned int subdevice, unsigned +int chan, unsigned int unit, double min, double max); +

+

The function comedi_find_range tries to +locate the optimal (smallest) range for the channel chan +belonging to a subdevice of the comedi device it, +that includes both min and max in units. +If it finds a matching range, it returns its index. If no +matching range is available, it returns -1. +

+

Valid units are: +

+

+

Source: /lib/range.c +

+

+

+

comedi_errno()

+ +

int comedi_errno(void); +

+

The function comedi_errno() +returns an integer describing the most recent comedilib error. This +integer may be used as the errnum parameter for + +comedi_strerror(). +

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 +comedi_errno(). This error number can be +converted to a human-readable form by the functions + +comedi_perror() +and +comedi_strerror(). +

These functions are intended to mimic the behavior of the +standard C library functions perror(), +strerror, and errno(). 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. +

Source: /lib/error.c +

+

+

+

comedi_find_subdevice_by_type()

+ +

+

int comedi_find_subdevice_by_type(comedi_t *it,int type,unsigned int +start_subdevice); +

+

The function comedi_find_subdevice_by_type tries to +locate a subdevice belonging to comedi device it, +having type type, starting with the subdevice +start_subdevice. If it finds the requested 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. +

+

For subdevice types, see the manual page for the function + +comedi_get_subdevice_type(). +

Source: /lib/get.c +

+

+

+

comedi_from_phys()

+ +

+

lsampl_t comedi_from_phys(double data, comedi_range *rng, +lsampl_t maxdata); +

Converts data given in physical units (data) into sample values +(lsampl_t, between 0 and maxdata). The parameter rng +represents the conversion information to use, and the parameter +maxdata represents the maximum possible data value for the +channel that the data will be written to. +

+

Source: /lib/range.c +

+

+

+

comedi_get_board_name()

+ +

+

char *comedi_get_board_name(comedi_t *it); +

The function comedi_get_board_name returns a pointer +to a string containing the name of the device. This pointer is +valid until the comedi descriptor it is closed. This +function returns NULL if there is an error. +

Source: /lib/get.c +

+

+

+

comedi_get_driver_name()

+ +

+

char *comedi_get_driver_name(comedi_t *it); +

The function comedi_get_driver_name returns a pointer +to a string containing the name of the driver being used by comedi +for the comedi device represented by it. This pointer is +valid until the comedi descriptor it is closed. This +function returns NULL if there is an error. +

Source: /lib/get.c +

+

+

+

comedi_get_maxdata()

+ +

+

lsampl_t comedi_get_maxdata(comedi_t *it,unsigned int +subdevice,unsigned int chan); +

+

The function comedi_get_maxdata() returns the maximum +valid data value for channel chan of subdevice +subdevice belonging to the comedi device it +This function returns 0 on error. +

Source: /lib/get.c +

+

+

+

comedi_get_n_channels()

+ +

+

int comedi_get_n_channels(comedi_t *it,unsigned int subdevice); +

The function comedi_get_n_channels() returns the number +of channels of the subdevice belonging to the comedi device it +and having index subdevice. This function returns -1 on error. +

Source: /lib/get.c +

+

+

+

comedi_get_n_ranges()

+ +

+

int comedi_get_n_ranges(comedi_t *it,unsigned int subdevice, unsigned int +chan); +

The function comedi_get_n_ranges() returns the number +of ranges of the channel chan belonging to the subdevice +of the comedi device it. This function returns -1 on error. +

Source: /lib/range.c +

+

+

+

comedi_get_n_subdevices()

+ +

+

int comedi_get_n_subdevices(comedi_t *it); +

The function comedi_get_n_subdevices returns the +number of subdevices associated with the comedi descriptor +it, or -1 if there is an error. +

Source: /lib/get.c +

+

+

+

comedi_get_range()

+ +

+

comedi_range * comedi_get_range(comedi_t *it,unsigned int subdevice,unsigned int chan,unsigned int +range); +

The function comedi_get_range 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 it is closed. If there is an +error, NULL is returned. +

Source: /lib/get.c +

+

+

comedi_get_rangetype()

+ +

+

int comedi_get_rangetype(comedi_t *it,unsigned int subdevice,unsigned int +chan); +

The function comedi_get_rangetype() returns an integer +that represents the number of range specifications available for a +particular channel chan of the subdevice subdevice, as well as a conversion table to convert sample +values to/from physical units. +

The macro +RANGE_LENGTH(rangetype) +can be used to determine the number of range specifications for a given +range type. +

Source: /lib/get.c +

+

+

comedi_get_subdevice_type()

+ +

+

int comedi_get_subdevice_type(comedi_t *it,unsigned int subdevice); +

The function comedi_get_subdevice_type() returns an +integer describing the type of subdevice that belongs to the comedi +device it and has the index subdevice. The +function returns -1 is there is an error. +

Valid subdevice types are: +

+

+

Source: /lib/get.c +

+

+

comedi_get_timer() (deprecated)

+ +

+

int comedi_get_timer(comedi_t *it,unsigned int subdev, double +freq,unsigned int *trigvar, double *actual_freq); +

+

The function comedi_get_timer converts the frequency freq +to a number suitable to send to the driver in a comedi_trig +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 nanosec_timer, indicating +that timer values are simply a time specified in nanoseconds. +

+

This function is deprecated and should not be used in new applications. +

+

Source: /lib/timer.c +

+

+

comedi_get_version_code()

+ +

+

int comedi_get_version_code(comedi_t *it); +

+

The function comedi_get_version_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. +

+

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. +

Source: /lib/get.c +

+

+

comedi_loglevel()

+ +

+

int comedi_loglevel(int loglevel); +

+

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 stderr. The loglevel can also be affected by the +environment variable COMEDI_LOGLEVEL. +

+

In order to conserve resources, some debugging information is +disabled when libcomedi is compiled. +

+

The meaning of the loglevels is as follows: +

+

+

Bugs: Libcomedi doesn't currently have much debugging information. +

Source: /lib/error.c +

+

+

comedi_open()

+ +

+

comedi_t *comedi_open(char *filename); +

Opens a comedi device specified by the filename filename. +Returns NULL on error. On sucess, it returns a handle that is +given as a parameter to other libcomedi functions. +

+

You are not supposed to have access to the internals of the +comedi_t structure. +

Bugs: Not strictly identical to fopen +

Source: /lib/comedi.c +

+

+

+

comedi_perror()

+ +

+

void comedi_perror(const char *s); +

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 + +comedi_errno(). +This error number can be +converted to a human-readable form by the functions +comedi_perror() +and +comedi_strerror(). +

These functions are intended to mimic the behavior of the +standard C library functions perror(), +strerror, and errno(). 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. +

The function comedi_perror() 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. +

Bugs: Does not support internationalization. +

Source: /lib/error.c +

+

+

+

comedi_strerror()

+ +

+

*comedi_strerror(int errnum); +

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 + +comedi_errno(). This error number can be +converted to a human-readable form by the functions + +comedi_perror() +and comedi_strerror(). +

These functions are intended to mimic the behavior of the +standard C library functions perror(), +strerror, and errno(). 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. +

The function comedi_strerror() returns a pointer to a +character string +describing the comedilib error errnum. 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. +

Bugs: Does not support internationalization. +

Source: /lib/error.c +

+

+

+

comedi_sv_init()

+ +

+

int comedi_sv_init(comedi_sv_t *sv,comedi_t *dev,unsigned int subd, +unsigned int chan); +

+

comedi_sv_init initializes the slow varying comedi structure +sv of the device dev, the subdevice subd (analog input) and +the channel chan. +The slow varying comedi structure sv of type +comedi_sv_t +specifies the signal measurement. The default number of averaged +samples is 100. Returns zero on success, -1 on error. +

Bugs: comedi_sv_* was very poorly designed. +

Source: /lib/sv.c +

+

+

+

comedi_sv_update()

+ +

+

int comedi_sv_update(comedi_sv_t *sv); +

The function comedi_sv_update updates the slow varying comedi structure +sv. +Returns zero on success, -1 on error. +

Source: /lib/sv.c +

+

+

+

int comedi_sv_measure()

+ +

+

int comedi_sv_measure(comedi_sv_t *it,double *data); +

comedi_sv_measure measures the slow variing signal. The measurement +is specified by the slow varying comedi structure sv, the result is +stored in data. +On success returns the number of samples, -1 on error. +

Source: /lib/sv.c +

+

+

+

comedi_to_phys()

+ +

+

double comedi_to_phys(lsampl_t data, comedi_range *rng, +lsampl_t maxdata); +

Converts data given in sample values (lsampl_t, between 0 and +maxdata) into physical units (double). The parameter rng +represents the conversion information to use, and the parameter +maxdata represents the maximum possible data value for the +channel that the data was read. +

Source: /lib/range.c +

+

+

+

comedi_trigger() (deprecated)

+ +

+

int comedi_trigger(comedi_t *it,comedi_trig *trig); +

The function comedi_trigger instructs comedi to +perform the command specified by the +trigger structure trig. Results depend on +the particular command being issued. If there is an +error, -1 is returned. +

Lifetime: removal at 1.0. +

Source: /lib/comedi.c +

+

+

+

+

+

+

+

+

+

+

+

+

+

+

comedi_get_timer()

+ +

+

+

+
+int comedi_get_timer(comedi_t *it,unsigned int subdev,double freq,unsigned int *trigvar,
+        double *actual_freq);
+
+
+

+

+

+

+


+Next +Previous +Contents + + diff --git a/doc/comedilib_reference-2.html b/doc/comedilib_reference-2.html new file mode 100644 index 0000000..2cb01a9 --- /dev/null +++ b/doc/comedilib_reference-2.html @@ -0,0 +1,39 @@ + + + + + Comedi Documentation: Reference Comedilib-0.7.9: types + + + + + +Next +Previous +Contents +
+

2. Reference Comedilib-0.7.9: types

+ +

+

2.1 sampl_t +

+ +

defined in comedi.h +correspond to unsigned int +type of the sample data +

+

+

2.2 comedi_sv_t +

+ +

defined in comedilib.h +correspond to +comedi_sv_struct +

+

+


+Next +Previous +Contents + + diff --git a/doc/comedilib_reference-3.html b/doc/comedilib_reference-3.html new file mode 100644 index 0000000..3fe7b6f --- /dev/null +++ b/doc/comedilib_reference-3.html @@ -0,0 +1,72 @@ + + + + + Comedi Documentation: Reference Comedilib-0.7.9: structures + + + + + +Next +Previous +Contents +
+

3. Reference Comedilib-0.7.9: structures

+ +

+

+

3.1 comedi_trig_struct +

+ +

+

+

+
+struct comedi_trig_struct{
+        unsigned int subdev;            /* subdevice */
+        unsigned int mode;              /* mode */
+        unsigned int flags;
+        unsigned int n_chan;            /* number of channels */
+        unsigned int *chanlist;         /* channel/range list */
+        sampl_t *data;                  /* data list, size depends on subd flags */
+        unsigned int n;                 /* number of scans */
+        unsigned int trigsrc;
+        unsigned int trigvar;
+        unsigned int trigvar1;
+        unsigned int data_len;
+        unsigned int unused[3];
+}
+
+
+

+

+

3.2 comedi_sv_struct +

+ +

+

+
+struct comedi_sv_struct{
+        comedi_t *dev;
+        unsigned int subdevice;
+        unsigned int chan;
+
+        /* range policy */
+        int range;
+        int aref;
+        
+        /* number of measurements to average (for ai) */
+        int n;
+
+        lsampl_t maxdata;
+}
+
+
+

+


+Next +Previous +Contents + + diff --git a/doc/comedilib_reference-4.html b/doc/comedilib_reference-4.html new file mode 100644 index 0000000..47fadff --- /dev/null +++ b/doc/comedilib_reference-4.html @@ -0,0 +1,646 @@ + + + + + Comedi Documentation: Reference Comedilib-0.7.9: functions + + + + +Next +Previous +Contents +
+

4. Reference Comedilib-0.7.9: functions

+ +

+

+

4.1 comedi_close() +

+ +

+

void comedi_close(comedi_t *it); +

Closes a device previously opened by comedi_open(). +

Source: /lib/comedi.c +

+

4.2 comedi_data_read() +

+ +

+

int comedi_data_read(comedi_t *it,unsigned int subd,unsigned int chan, +unsigned int range,unsigned int aref,lsampl_t *data); +

Reads a single sample on the channel that +is specified by the comedi device it, the +subdevice subd, and the channel chan. +For the operation, +the device is configured to use range specification +range and (if appropriate) analog reference type +aref. Analog reference types that are not supported +by the device are silently ignored. +

comedi_data_read() reads one data value from +the specified channel and places the +data value that is read in the location pointed to by +data. +

On sucess, comedi_data_read() returns 0. If there is an error, -1 is +returned. +

Valid analog reference numbers are: +

+

+

Valid data values used by these function is an unsigned integer +less than or equal to maxdata, which is channel-dependent. +Conversion of these data value to physical units can be performed +by +comedi_to_phys(). +

Source: /lib/data.c +

+

+

4.3 comedi_data_write() +

+ +

+

int comedi_data_write(comedi_t *it,unsigned int subd,unsigned int chan, +unsigned int range,unsigned int aref,lsampl_t data); +

Writes a single sample on the channel that +is specified by the comedi device it, the +subdevice subd, and the channel chan. +For the operation, +the device is configured to use range specification +range and (if appropriate) analog reference type +aref. Analog reference types that are not supported +by the device are silently ignored. +

comedi_data_write() writes the data value +specified by the argument data to +the specified channel. +

On sucess, comedi_data_write() returns 0. If there is an error, -1 is +returned. +

Valid analog reference numbers are: +

+

+

Valid data values used by these functions is an unsigned integer +less than or equal to maxdata, which is channel-dependent. +Conversion of physical units to these data value can be performed +by +comedi_from_phys(). +

Source: /lib/data.c +

+

+

+

4.4 comedi_dio_bitfield(); +

+ +

int comedi_dio_bitfield(comedi_t *it,unsigned int subd,unsigned int write_mask, +unsigned int *bits); +

Source: /lib/dio.c +

+

+

4.5 comedi_dio_config() +

+ +

int comedi_dio_config(comedi_t *it,unsigned int subd,unsigned int chan,unsigned int dir); +

The function comedi_dio_config configures the direction dir of +channel chan belonging to the configurable digital input/output subdevice +subd of the device it. Returns -1 on failure. +

+

Valid directions are: +

+

Source: /lib/dio.c +

+

+

4.6 comedi_dio_read() +

+ +

int comedi_dio_read(comedi_t *it,unsigned int subd,unsigned int chan,unsigned int *bit); +

The function reads the status of channel chan belonging to the digital +input subdevice subd of device it. The result, 0 or 1, is stored +in bit. Returns -1 on failure. +

Source: /lib/dio.c +

+

+

4.7 comedi_dio_write() +

+ +

int comedi_dio_write(comedi_t *it,unsigned int subd,unsigned int chan,unsigned int bit); +

The function writes the value of bit, 0 or 1, in channel chan, +belonging to the digital output device subd of device it. Returns +-1 on failure. +

Source: /lib/dio.c +

+

+

4.8 comedi_fileno() +

+ +

+

int comedi_fileno(comedi_t *it); +

The function comedi_fileno +returns the integer descriptor for the handle it. If +it is an invalid comedi_t pointer, the function +returns -1 and sets the appropriate comedilib error value. +

Source: /lib/comedi.c +

+

+

+

4.9 comedi_find_range() +

+ +

+

int comedi_find_range(comedi_t *it, unsigned int subdevice, unsigned +int chan, unsigned int unit, double min, double max); +

The function comedi_find_range tries to +locate the optimal (smallest) range of a channel chan belonging to a +subdevice of the comedi device it, which includes the data +range between min and max in units with highest +precision. If it finds a matching range, +it returns its index. If no matching range is available, it returns -1. +

Valid units are: +

+

+

Source: /lib/range.c +

+

+

+

4.10 comedi_errno() +

+ +

int comedi_errno(void); +

+

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 +comedi_errno(). This error number can be +converted to a human-readable form by the functions + +comedi_perror() +and +comedi_strerror(). +

These functions are intended to mimic the behavior of the +standard C library functions perror(), +strerror, and errno(). 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. +

The function comedi_errno() +returns an integer describing the most recent comedilib error. This +integer may be used as the errnum parameter for + +comedi_strerror(). +

Source: /lib/error.c +

+

+

+

4.11 comedi_find_subdevice_by_type() +

+ +

+

int comedi_find_subdevice_by_type(comedi_t *it,int type,unsigned int +start_subdevice); +

The function comedi_find_subdevice_by_type tries to +locate a subdevice belonging to comedi device it, +having type type, starting with the subdevice +start_subdevice. If it finds the requested 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. +

For subdevice types, see the manual page for the function + +comedi_get_subdevice_type(). +

Source: /lib/get.c +

+

+

+

4.12 comedi_from_phys() +

+ +

+

lsampl_t comedi_from_phys(double data, comedi_range *rng, lsampl_t maxdata); +

Converts data given in physical units (double) into sample values (lsampl_t, between 0 and maxdata). +The parameter rng represents the conversion information to use, and the parameter maxdata represents +the maximum possible data value for the channel that the data will be written to. +

Source: /lib/range.c +

+

+

+

4.13 comedi_get_board_name() +

+ +

+

char *comedi_get_board_name(comedi_t *it); +

The function comedi_get_board_name returns a pointer +to a string containing the name of the device. This pointer is +valid until the comedi descriptor it is closed. This +function returns NULL if there is an error. +

Source: /lib/get.c +

+

+

+

4.14 comedi_get_driver_name() +

+ +

+

char *comedi_get_driver_name(comedi_t *it); +

The function comedi_get_driver_name returns a pointer +to a string containing the name of the driver being used by comedi +for the comedi device represented by it. This pointer is +valid until the comedi descriptor it is closed. This +function returns NULL if there is an error. +

Source: /lib/get.c +

+

+

+

4.15 comedi_get_maxdata() +

+ +

+

lsampl_t comedi_get_maxdata(comedi_t *it,unsigned int subdevice,unsigned int +chan); +

The function comedi_get_maxdata() returns the maximum +valid data value for channel chan of subdevice +subdevice belonging to the comedi device it +This function returns 0 on error. +

Source: /lib/get.c +

+

+

+

4.16 comedi_get_n_channels() +

+ +

+

int comedi_get_n_channels(comedi_t *it,unsigned int subdevice); +

The function comedi_get_n_channels() returns the number +of channels of the subdevice belonging to the comedi device it +and having index subdevice. This function returns -1 on error. +

Source: /lib/get.c +

+

+

+

4.17 comedi_get_n_ranges() +

+ +

+

int comedi_get_n_ranges(comedi_t *it,unsigned int subdevice, unsigned int +chan); +

The function comedi_get_n_ranges() returns the number +of ranges of the channel chan belonging to the subdevice +of the comedi device it. This function returns -1 on error. +

Source: /lib/range.c +

+

+

+

4.18 comedi_get_n_subdevices() +

+ +

+

int comedi_get_n_subdevices(comedi_t *it); +

The function comedi_get_n_subdevices returns the +number of subdevices associated with the comedi descriptor +it, or -1 if there is an error. +

Source: /lib/get.c +

+

+

+

4.19 comedi_get_range() +

+ +

+

comedi_range * comedi_get_range(comedi_t *it,unsigned int subdevice,unsigned int chan,unsigned int +range); +

The function comedi_get_range 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 it is closed. If there is an +error, NULL is returned. +

Source: /lib/get.c +

+

+

4.20 comedi_get_rangetype() +

+ +

+

int comedi_get_rangetype(comedi_t *it,unsigned int subdevice,unsigned int +chan); +

The function comedi_get_rangetype() returns an integer +that represents the number of range specifications available for a +particular channel chan of the subdevice subdevice, as well as a conversion table to convert sample +values to/from physical units. +

The macro +RANGE_LENGTH(rangetype) +can be used to determine the number of range specifications for a given +range type. +

Source: /lib/get.c +

+

+

4.21 comedi_get_subdevice_type() +

+ +

+

int comedi_get_subdevice_type(comedi_t *it,unsigned int subdevice); +

The function comedi_get_subdevice_type() returns an +integer describing the type of subdevice that belongs to the comedi +device it and has the index subdevice. The +function returns -1 is there is an error. +

Valid subdevice types are: +

+

+

Source: /lib/get.c +

+

+

4.22 comedi_get_timer() +

+ +

+

+

+
+int comedi_get_timer(comedi_t *it,unsigned int subdev, double freq,unsigned int *trigvar,
+        double *actual_freq);
+
+
+

comedi_get_timer returns the type of the timer of the subdevice +subdev of the device it , +

Supported timers are: +

+

+

Source: /lib/timer.c +

+

+

4.23 comedi_get_version_code() +

+ +

+

int comedi_get_version_code(comedi_t *it); +

The function comedi_get_version_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. +

Source: /lib/get.c +

+

+

4.24 comedi_loglevel() +

+ +

+

int comedi_loglevel(int loglevel); +

This function affects the output of debugging and error messages +from comedlib. By increasing the loglevel, additional debugging +information will be printed. This function returns the previous +loglevel. Some debugging information will only be printed if +comedilib was compiled with this debugging information included. +The loglevel can also be affected by the environment +variable COMEDI_LOGLEVEL. The meaning of the loglevels is as +follows: +

COMEDILIB_LOGLEVEL=0 +

Comedilib prints nothing. +

COMEDILIB_LOGLEVEL=1 (default) +

Comedilib only prints error messages when there is a +self-consistency error. +

COMEDILIB_LOGLEVEL=2 +

Comedilib prints an error message whenever an invalid +parameter is passed to comedilib. +

COMEDILIB_LOGLEVEL=3 +

Comedilib prints an error message whenever an error is generated +in the comedilib library or is generated in the C library when +called by comedilib. +

COMEDILIB_LOGLEVEL=4 +

Comedilib prints a lot of debugging messages. +

+

Source: /lib/error.c +

+

+

4.25 comedi_open() +

+ +

+

comedi_t *comedi_open(char *fn); +

Opens a comedi device specified by the filename fn. Returns NULL +on error. Returns a handle that is given as a parameter to other +comedilib functions. +

You are not supposed to have access to the structure comedi_t. +

Source: /lib/comedi.c +

+

+

+

4.26 comedi_perror() +

+ +

+

void comedi_perror(const char *s); +

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 + +comedi_errno(). +This error number can be +converted to a human-readable form by the functions +comedi_perror() +and +comedi_strerror(). +

These functions are intended to mimic the behavior of the +standard C library functions perror(), +strerror, and errno(). 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. +

The function comedi_perror() 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. +

Source: /lib/error.c +

+

+

+

4.27 comedi_strerror() +

+ +

+

*comedi_strerror(int errnum); +

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 + +comedi_errno(). This error number can be +converted to a human-readable form by the functions + +comedi_perror() +and comedi_strerror(). +

These functions are intended to mimic the behavior of the +standard C library functions perror(), +strerror, and errno(). 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. +

The function comedi_strerror() returns a pointer to a +character string +describing the comedilib error errnum. The persistence +of the returned pointer is undefined, and should not be trusted +after the next comedilib call. An unrecognized error number will +return a pointer to the string "undefined error", or similar. +

Valid error strings are: +

+

+

Source: /lib/error.c +

+

+

+

4.28 comedi_sv_init() +

+ +

+

int comedi_sv_init(comedi_sv_t *sv,comedi_t *dev,unsigned int subd, +unsigned int chan); +

The special functions comedi_sv_*() are designed to +make it easy to accurately measure slowly varying analog inputs. +A slowly varying input is one that is effectively constant over the course +of approximately 100 A/D conversions. However, since these +conversions can sometimes be pre-empted by scheduling, for most +purposes, a slowly varying signal should be effectively constant +for greater than 20 ms (the default Linux timeslice). +

By averaging many A/D conversions of a relatively constant +signal, it is possible to get a better measurement of the signal +than a single A/D conversion. In general, the uncertainty of the +measurement decreases as the square root of the number of samples. +This is limited by the rate that which the signal varies, and +ultimately by the spurious free dynamic range of the A/D converter. +

comedi_sv_init initializes the slow varying comedi structure +sv of the device dev, the subdevice subd (analog input) and +the channel chan. +The slow varying comedi structure sv of type +comedi_sv_t +specifies the signal measurement. Default number of averaged samples is 100. +Returns zero on success, -1 on error. +

Source: /lib/sv.c +

+

+

+

4.29 comedi_sv_update() +

+ +

+

int comedi_sv_update(comedi_sv_t *sv); +

comedi_sv_update updates the slow varying comedi structure +sv. +Returns zero on success, -1 on error. +

Source: /lib/sv.c +

+

+

+

4.30 int comedi_sv_measure() +

+ +

+

int comedi_sv_measure(comedi_sv_t *it,double *data); +

comedi_sv_measure measures the slow variing signal. The measurement +is specified by the slow varying comedi structure sv, the result is +stored in data. +On success returns the number of samples, -1 on error. +

Source: /lib/sv.c +

+

+

+

4.31 comedi_to_phys() +

+ +

+

double comedi_to_phys(lsampl_t data, comedi_range *rng, lsampl_t maxdata); +

Converts data given in sample values (lsampl_t, between 0 and maxdata) into physical units (double). +The parameter rng represents the conversion information to use, and the parameter maxdata represents +the maximum possible data value for the channel that the data was read. +

Source: /lib/range.c +

+

+

+

4.32 comedi_trigger() +

+ +

+

int comedi_trigger(comedi_t *it,comedi_trig *trig); +

The function comedi_trigger() instructs comedi to +perform the command specified by the +trigger structure +trig. Results depend on the particular command +being issued. If there is an error, -1 is returned. +

Complete information about comedi commands is given in the +manual page comedi(8). +

Source: /lib/comedi.c +

+

+

+

+

+

+

+

+

+

+

+

+

+

+

4.33 comedi_get_timer() +

+ +

+

+

+
+int comedi_get_timer(comedi_t *it,unsigned int subdev,double freq,unsigned int *trigvar,
+        double *actual_freq);
+
+
+

+

+

+

+


+Next +Previous +Contents + + diff --git a/doc/comedilib_reference.html b/doc/comedilib_reference.html new file mode 100644 index 0000000..7062fdb --- /dev/null +++ b/doc/comedilib_reference.html @@ -0,0 +1,31 @@ + + + + + Comedi Documentation + + + + + +Next +Previous +Contents +
+

Comedi Documentation

+ +

David Schleef, ds@stm.lbl.gov

+

+

1. Libcomedi Reference

+ + +
+Next +Previous +Contents + + diff --git a/doc/comedilib_reference.sgml b/doc/comedilib_reference.sgml new file mode 100644 index 0000000..7298334 --- /dev/null +++ b/doc/comedilib_reference.sgml @@ -0,0 +1,878 @@ + + +
+Comedi Documentation +<author>David Schleef, <tt/ds@stm.lbl.gov/ + + + + +<sect>Libcomedi Reference +<p> + +<sect1>Constants and Macros +<p> + + +<sect2>RANGE_LENGTH() <it/(deprecated)/ +<p> +<label id="RANGE_LENGTH"> + +<tt/RANGE_LENGTH(rangetype)/ + +<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> +The RANGE_LENGTH() macro returns the length of the array that is +specified by the rangetype token. + +<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> +<sect1>Data Types and Structures + +<p> +<sect2>comedi_t +<label id="comedi_t"> + +<p> +The data type <tt/comedi_t/ is used to represent an open Comedi +device. A valid <tt/comedi_t/ pointer is returned by a successful +call to <tt/comedi_open()/, and should be used for subsequent +access to the device. +It is a transparent type, and pointers to type <tt/comedi_t/ +should not be dereferenced. + + +<p> +<sect2>sampl_t +<label id="sampl_t"> + +<p> +The data type <tt/sampl_t/ 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> +<sect2>lsampl_t +<label id="lsampl_t"> + +<p> +The data type <tt/lsampl_t/ is one of the generic types used to represent +data values in libcomedi. It is currently defined to be <tt/unsigned int/. + + + + +<p> +<sect2>comedi_trig_struct <it/(deprecated)/ +<label id="comedi_trig_struct"> +<p> + +The <tt/comedi_trig/ structure + +<tscreen><verb> +struct comedi_trig_struct{ + unsigned int subdev; /* subdevice */ + unsigned int mode; /* mode */ + unsigned int flags; + unsigned int n_chan; /* number of channels */ + unsigned int *chanlist; /* channel/range list */ + sampl_t *data; /* data list, size depends on subd flags */ + unsigned int n; /* number of scans */ + unsigned int trigsrc; + unsigned int trigvar; + unsigned int trigvar1; + unsigned int data_len; + unsigned int unused[3]; +} +</verb></tscreen> + +The <tt/comedi_trig/ 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> +<sect2>comedi_sv_t +<label id="comedi_sv_t"> +<p> + +<tscreen><verb> +struct comedi_sv_struct{ + comedi_t *dev; + unsigned int subdevice; + unsigned int chan; + + /* range policy */ + int range; + int aref; + + /* number of measurements to average (for ai) */ + int n; + + lsampl_t maxdata; +} +</verb></tscreen> + +The <tt/comedi_sv_t/ structure is used by the <tt/comedi_sv_*()/ +functions to provide a simple method of accurately measuring +slowly varying inputs. See the relevant section for more +details. + + + +<sect1>Functions +<p> + +<sect2>comedi_close() +<label id="comedi_close"> +<p> + +<tt>void comedi_close(comedi_t *it);</tt> + +<p> +Closes a device previously opened by comedi_open(). + +<p> +The return type of this function will change to <tt/int/, in +order to match <tt/fclose/. + +<p> +Source: <tt>/lib/comedi.c</tt> + + +<sect2>comedi_data_read() +<label id="comedi_data_read"> +<p> + +<tt>int comedi_data_read(comedi_t *it,unsigned int subd,unsigned int chan, + unsigned int range,unsigned int aref,lsampl_t *data);</tt> + +<p> +Reads a single sample on the channel that +is specified by the comedi device <tt>it</tt>, the +subdevice <tt>subd</tt>, and the channel <tt>chan</tt>. +For the A/D conversion (if appropriate), +the device is configured to use range specification +<tt>range</tt> and (if appropriate) analog reference type +<tt>aref</tt>. Analog reference types that are not supported +by the device are silently ignored. + +<p> +<tt>comedi_data_read()</tt> reads one data value from +the specified channel and places the +data value that is read in the location pointed to by +<tt>data</tt>. + +<p> +On sucess, <tt>comedi_data_read()</tt> returns 0. If there is an +error, -1 is returned. + +<p> +Valid analog reference numbers are: + +<itemize> +<item>AREF_GROUND Reference to analog ground +<item>AREF_COMMON Reference to analog common +<item>AREF_DIFF Differential reference +<item>AREF_OTHER Board-specific meaning +</itemize> + +Valid data values returned by these function is an unsigned integer +less than or equal to <tt>maxdata</tt>, which is channel-dependent. +Conversion of these data value to physical units can be performed +by <tt><ref id="comedi_to_phys" name = +"comedi_to_phys()"></tt>. + +Source: <tt>/lib/data.c</tt> + + +<sect2>comedi_data_write() +<p> + +<tt>int comedi_data_write(comedi_t *it,unsigned int subd,unsigned int chan, + unsigned int range,unsigned int aref,lsampl_t data);</tt> + +<p> +Writes a single sample on the channel that +is specified by the comedi device <tt/it/, the +subdevice <tt/subd/, and the channel <tt/chan/. +For the D/A conversion (if appropriate), the device is +configured to use range specification +<tt/range/ and (if appropriate) analog reference type +<tt/aref/. Analog reference types that are not supported +by the device are silently ignored. + +<tt/comedi_data_write()/ writes the data value +specified by the argument <tt/data/ to +the specified channel. + +On sucess, <tt>comedi_data_write()</tt> returns 0. If there is an error, -1 is +returned. + +Valid analog reference numbers are: + +<itemize> +<item>AREF_GROUND Reference to analog ground +<item>AREF_COMMON Reference to analog common +<item>AREF_DIFF Differential reference +<item>AREF_OTHER Board-specific meaning +</itemize> + +Valid data values used by these functions is an unsigned integer +less than or equal to <tt>maxdata</tt>, which is channel-dependent. +Conversion of physical units to these data value can be performed +by <tt><ref id="comedi_from_phys" name = +"comedi_from_phys()"></tt>. + +Source: <tt>/lib/data.c</tt> + + +<p> +<sect2>comedi_dio_bitfield(); + +<p> +<tt/int comedi_dio_bitfield(comedi_t *it,unsigned int subd,unsigned +int write_mask,unsigned int *bits);/ + +<p> +The function <tt/comedi_dio_bitfield()/ allows multiple channels to +be read simultaneously from a digital input or digital I/O device. +The parameter <tt/write_mask/ and the value pointed to by <tt/bits/ +are interpreted as bit fields, with the least significant bit +representing channel 0. For each bit in <tt/write_mask/ that is +set, the cooresponding bit in <tt/*bits/ is written to the digital +output channel. Each digital input channel is read, and the result +placed in the approprate bits in <tt/*bits/. + +<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> +It should be noted that it is not possible to access channels +greater than 31 using this function. + +<p> +Source: <tt>/lib/dio.c</tt> + + +<p> +<sect2>comedi_dio_config() +<p> +<tt/int comedi_dio_config(comedi_t *it,unsigned int subd,unsigned +int chan,unsigned int dir);/ + +<p> +The function <tt/comedi_dio_config/ configures individual channels +in a digital I/O subdevice to be either input or output, depending +on the value of parameter <tt/dir/. Depending on the capabilities +of the hardware device, multiple channels may be affected by +a single call to <tt/comedi_dio_config/. + + +Valid directions are: +<itemize> +<item> COMEDI_INPUT +<item> COMEDI_OUTPUT +</itemize> + +Source: <tt>/lib/dio.c</tt> + + +<p> +<sect2>comedi_dio_read() +<p> +<tt/int comedi_dio_read(comedi_t *it,unsigned int subd,unsigned int +chan,unsigned int *bit);/ + +<p> +The function reads the status of channel <tt/chan/ belonging to the digital +input subdevice <tt/subd/ of device <tt/it/. The result, 0 or 1, is stored +in bit. Returns -1 on failure. + +<p> +This function is equivalent to <tt/comedi_data_read(it,subd,chan,0,0,bit)/. + + +Source: <tt>/lib/dio.c</tt> + +<p> +<sect2>comedi_dio_write() +<p> +<tt/int comedi_dio_write(comedi_t *it,unsigned int subd,unsigned +int chan,unsigned int bit);/ + +<p> +The function writes the value of <tt/bit/, 0 or 1, to channel <tt/chan/, +belonging to the digital output device <tt/subd/ of device <tt/it/. Returns +-1 on failure. + +<p> +Source: <tt>/lib/dio.c</tt> + +<p> +<sect2>comedi_fileno() +<p> + +<tt/int comedi_fileno(comedi_t *it);/ +<p> + +The function <tt/comedi_fileno/ +returns the integer descriptor for the handle <tt/it/. It +is equivalent to the standard function <tt/fileno/. If +<tt>it</tt> is an invalid <tt>comedi_t</tt> pointer, the function +returns -1 and sets the appropriate libcomedi error value. + +Source: <tt>/lib/comedi.c</tt> + + +<p> +<sect2>comedi_find_range() +<p> + +<tt/int comedi_find_range(comedi_t *it, unsigned int subdevice, unsigned +int chan, unsigned int unit, double min, double max);/ + +<p> +The function <tt/comedi_find_range/ tries to +locate the optimal (smallest) range for the channel <tt>chan</tt> +belonging to a <tt>subdevice</tt> of the comedi device <tt>it</tt>, +that includes both <tt>min</tt> and <tt>max</tt> in <tt>units</tt>. +If it finds a matching range, it returns its index. If no +matching range is available, it returns -1. + +<p> +Valid units are: + +<itemize> +<item>UNIT_volt +<item>UNIT_mA +<item>UNIT_none +</itemize> + +Source: <tt>/lib/range.c</tt> + + +<p> +<sect2>comedi_errno() +<label id="comedi_errno"> +<p> +<tt/int comedi_errno(void);/ + +<p> +The function <tt>comedi_errno()</tt> +returns an integer describing the most recent comedilib error. This +integer may be used as the <tt>errnum</tt> parameter for +<tt><ref id="comedi_strerror" name ="comedi_strerror()"></tt>. + +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 +<tt>comedi_errno()</tt>. This error number can be +converted to a human-readable form by the functions +<tt><ref id="comedi_perror" name ="comedi_perror()"></tt> + and <tt><ref id="comedi_strerror" name ="comedi_strerror()"></tt>. + +These functions are intended to mimic the behavior of the +standard C library functions <tt>perror()</tt>, +<tt>strerror</tt>, and <tt>errno()</tt>. 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. + +Source: <tt>/lib/error.c</tt> + + +<p> +<sect2>comedi_find_subdevice_by_type() +<p> + +<tt>int comedi_find_subdevice_by_type(comedi_t *it,int type,unsigned int +start_subdevice);</tt> + +<p> +The function <tt>comedi_find_subdevice_by_type</tt> tries to +locate a subdevice belonging to comedi device <tt>it</tt>, +having type <tt>type</tt>, starting with the subdevice +<tt>start_subdevice</tt>. If it finds the requested 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> +For subdevice types, see the manual page for the function +<tt><ref id="comedi_get_subdevice_type" name = +"comedi_get_subdevice_type()"></tt>. + +Source: <tt>/lib/get.c</tt> + + +<p> +<sect2>comedi_from_phys()<label id="comedi_from_phys"> +<p> + +<tt/lsampl_t comedi_from_phys(double data, comedi_range *rng, +lsampl_t maxdata);/ + +Converts data given in physical units (<tt/data/) into sample values +(lsampl_t, between 0 and maxdata). The parameter <tt>rng</tt> +represents the conversion information to use, and the parameter +<tt>maxdata</tt> represents the maximum possible data value for the +channel that the data will be written to. + + +Source: <tt>/lib/range.c</tt> + + +<p> +<sect2>comedi_get_board_name() +<p> + +<tt/char *comedi_get_board_name(comedi_t *it);/ + +The function <tt/comedi_get_board_name/ returns a pointer +to a string containing the name of the device. This pointer is +valid until the comedi descriptor <tt/it/ is closed. This +function returns <tt/NULL/ if there is an error. + +Source: <tt>/lib/get.c</tt> + + +<p> +<sect2>comedi_get_driver_name() +<p> + +<tt/char *comedi_get_driver_name(comedi_t *it);/ + +The function <tt/comedi_get_driver_name/ returns a pointer +to a string containing the name of the driver being used by comedi +for the comedi device represented by <tt/it/. This pointer is +valid until the comedi descriptor <tt/it/ is closed. This +function returns <tt/NULL/ if there is an error. + +Source: <tt>/lib/get.c</tt> + + +<p> +<sect2>comedi_get_maxdata() +<p> + +<tt/lsampl_t comedi_get_maxdata(comedi_t *it,unsigned int +subdevice,unsigned int chan);/ + +<p> +The function <tt/comedi_get_maxdata()/ returns the maximum +valid data value for channel <tt/chan/ of subdevice +<tt/subdevice/ belonging to the comedi device <tt/it/ +This function returns 0 on error. + +Source: <tt>/lib/get.c</tt> + + +<p> +<sect2>comedi_get_n_channels() +<p> + +<tt/int comedi_get_n_channels(comedi_t *it,unsigned int subdevice);/ + +The function <tt>comedi_get_n_channels()</tt> returns the number +of channels of the subdevice belonging to the comedi device <tt>it</tt> +and having index <tt>subdevice</tt>. This function returns -1 on error. + +Source: <tt>/lib/get.c</tt> + + +<p> +<sect2>comedi_get_n_ranges() +<p> + +<tt>int comedi_get_n_ranges(comedi_t *it,unsigned int subdevice, unsigned int +chan);</tt> + +The function <tt>comedi_get_n_ranges()</tt> returns the number +of ranges of the channel <tt>chan</tt> belonging to the <tt>subdevice</tt> +of the comedi device <tt>it</tt>. This function returns -1 on error. + +Source: <tt>/lib/range.c</tt> + + +<p> +<sect2>comedi_get_n_subdevices() +<p> + +<tt>int comedi_get_n_subdevices(comedi_t *it);</tt> + +The function <tt>comedi_get_n_subdevices</tt> returns the +number of subdevices associated with the comedi descriptor +<tt>it</tt>, or -1 if there is an error. + +Source: <tt>/lib/get.c</tt> + + +<p> +<sect2>comedi_get_range() +<p> + +<tt>comedi_range * comedi_get_range(comedi_t *it,unsigned int subdevice,unsigned int chan,unsigned int +range);</tt> + +The function <tt>comedi_get_range</tt> 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 <tt>it</tt> is closed. If there is an +error, NULL is returned. + +Source: <tt>/lib/get.c</tt> + +<p> +<sect2>comedi_get_rangetype() +<p> + +<tt>int comedi_get_rangetype(comedi_t *it,unsigned int subdevice,unsigned int +chan);</tt> + +The function <tt>comedi_get_rangetype()</tt> returns an integer +that represents the number of range specifications available for a +particular channel <tt/chan/ of the subdevice <tt/subdevice/, as well as a conversion table to convert sample +values to/from physical units. + + The macro +<tt>RANGE_LENGTH(rangetype)</tt> +can be used to determine the number of range specifications for a given +range type. + +Source: <tt>/lib/get.c</tt> + +<p> +<sect2>comedi_get_subdevice_type()<label id="comedi_get_subdevice_type"> +<p> + +<tt>int comedi_get_subdevice_type(comedi_t *it,unsigned int subdevice);</tt> + +The function <tt>comedi_get_subdevice_type()</tt> returns an +integer describing the type of subdevice that belongs to the comedi +device <tt>it</tt> and has the index <tt>subdevice</tt>. The +function returns -1 is there is an error. + +Valid subdevice types are: + +<itemize> +<item><tt>COMEDI_SUBD_UNUSED</tt> +Subdevice has no functionality, i.e., a place-holder. +<item><tt>COMEDI_SUBD_AI</tt> Analog input +<item><tt>COMEDI_SUBD_AO</tt> Analog output +<item><tt>COMEDI_SUBD_DI</tt> Digital input +<item><tt>COMEDI_SUBD_DO</tt> Digital output +<item><tt>COMEDI_SUBD_DIO</tt> +Digital input/output. Channels are configurable as to whether they +are inputs or outputs. +<item><tt>COMEDI_SUBD_COUNTER</tt> Counter +<item><tt>COMEDI_SUBD_TIMER</tt> Timer +<item><tt>COMEDI_SUBD_MEMORY</tt> +Memory, e.g., EEPROM or dual-ported RAM +<item><tt>COMEDI_SUBD_CALIB</tt> +Calibration DACs +<item><tt>COMEDI_SUBD_PROC</tt> +Processor or DSP +</itemize> + +Source: <tt>/lib/get.c</tt> + +<p> +<sect2>comedi_get_timer() <it/(deprecated)/ +<p> + +<tt/int comedi_get_timer(comedi_t *it,unsigned int subdev, double +freq,unsigned int *trigvar, double *actual_freq);/ + +<p> +The function <tt>comedi_get_timer</tt> converts the frequency <tt/freq/ +to a number suitable to send to the driver in a <tt/comedi_trig/ +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 <tt/nanosec_timer/, indicating +that timer values are simply a time specified in nanoseconds. + +<p> +This function is deprecated and should not be used in new applications. + +<p> +Source: <tt>/lib/timer.c</tt> + +<p> +<sect2>comedi_get_version_code() +<p> + +<tt/int comedi_get_version_code(comedi_t *it);/ + +<p> +The function <tt/comedi_get_version_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> +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. + +Source: <tt>/lib/get.c</tt> + +<p> +<sect2>comedi_loglevel() +<P> + +<tt>int comedi_loglevel(int loglevel);</tt> + +<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 <tt/stderr/. The loglevel can also be affected by the +environment variable COMEDI_LOGLEVEL. + +<p> +In order to conserve resources, some debugging information is +disabled when libcomedi is compiled. + +<p>The meaning of the loglevels is as follows: + +<itemize> +<item><tt/COMEDILIB_LOGLEVEL=0/ + +Comedilib prints nothing. + +<item><tt/COMEDILIB_LOGLEVEL=1/ (default) + +Comedilib only prints error messages when there is a +self-consistency error (i.e., internal bug). + +<item><tt/COMEDILIB_LOGLEVEL=2/ + +Comedilib prints an error message when an invalid +parameter is passed to comedilib. + +<item><tt/COMEDILIB_LOGLEVEL=3/ + +Comedilib prints an error message whenever an error is generated +in the comedilib library or is generated in the C library when +called by comedilib. + +<item><tt/COMEDILIB_LOGLEVEL=4/ + +Comedilib prints a lot of debugging messages. + +</itemize> + +Bugs: Libcomedi doesn't currently have much debugging information. + +Source: <tt>/lib/error.c</tt> + +<p> +<sect2>comedi_open() +<p> + +<tt/comedi_t *comedi_open(char *filename);/ + +Opens a comedi device specified by the filename <tt/filename/. +Returns NULL on error. On sucess, it returns a handle that is +given as a parameter to other libcomedi functions. + +<p> +You are not supposed to have access to the internals of the +<tt/comedi_t/ structure. + +Bugs: Not strictly identical to <tt/fopen/ + +Source: <tt>/lib/comedi.c</tt> + + +<p> +<sect2>comedi_perror()<label id="comedi_perror"> +<p> + +<tt>void comedi_perror(const char *s);</tt> + +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 +<tt><ref id="comedi_errno" name ="comedi_errno()"></tt>. + This error number can be + converted to a human-readable form by the functions +<tt>comedi_perror()</tt> + and <tt><ref id="comedi_strerror" name ="comedi_strerror()"></tt>. + +These functions are intended to mimic the behavior of the +standard C library functions <tt>perror()</tt>, +<tt>strerror</tt>, and <tt>errno()</tt>. 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. + +The function <tt>comedi_perror()</tt> 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. + +Bugs: Does not support internationalization. + +Source: <tt>/lib/error.c</tt> + + +<p> +<sect2>comedi_strerror()<label id="comedi_strerror"> +<p> + +<tt>*comedi_strerror(int errnum);</tt> + +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 +<tt><ref id="comedi_errno" name ="comedi_errno()"></tt>. This error number can be +converted to a human-readable form by the functions +<tt><ref id="comedi_perror" name ="comedi_perror()"></tt> + and <tt>comedi_strerror()</tt>. + +These functions are intended to mimic the behavior of the +standard C library functions <tt>perror()</tt>, +<tt>strerror</tt>, and <tt>errno()</tt>. 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. + +The function <tt>comedi_strerror()</tt> returns a pointer to a +character string +describing the comedilib error <tt>errnum</tt>. 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. + +Bugs: Does not support internationalization. + +Source: <tt>/lib/error.c</tt> + + +<p> +<sect2>comedi_sv_init() +<p> + +<tt/int comedi_sv_init(comedi_sv_t *sv,comedi_t *dev,unsigned int subd, +unsigned int chan);/ + + +<tt/comedi_sv_init/ initializes the slow varying comedi structure +<tt/sv/ of the device <tt/dev/, the subdevice <tt/subd/ (analog input) and +the channel <tt/chan/. +The slow varying comedi structure <tt/sv/ of type <tt><ref id="comedi_sv_t" +name="comedi_sv_t"</tt> +specifies the signal measurement. The default number of averaged +samples is 100. Returns zero on success, -1 on error. + +Bugs: comedi_sv_* was very poorly designed. + +Source: <tt>/lib/sv.c</tt> + + +<p> +<sect2>comedi_sv_update() +<p> + +<tt/int comedi_sv_update(comedi_sv_t *sv);/ + +The function <tt/comedi_sv_update/ updates the slow varying comedi structure +<tt/sv/. +Returns zero on success, -1 on error. + +Source: <tt>/lib/sv.c</tt> + + +<p> +<sect2>int comedi_sv_measure() +<p> + +<tt>int comedi_sv_measure(comedi_sv_t *it,double *data);</tt> + +<tt/comedi_sv_measure/ measures the slow variing signal. The measurement +is specified by the slow varying comedi structure <tt/sv/, the result is +stored in <tt/data/. +On success returns the number of samples, -1 on error. + +Source: <tt>/lib/sv.c</tt> + + +<p> +<sect2>comedi_to_phys()<label id="comedi_to_phys"> +<p> + +<tt/double comedi_to_phys(lsampl_t data, comedi_range *rng, +lsampl_t maxdata);/ + +Converts data given in sample values (lsampl_t, between 0 and +maxdata) into physical units (double). The parameter <tt/rng/ +represents the conversion information to use, and the parameter +<tt/maxdata/ represents the maximum possible data value for the +channel that the data was read. + +Source: <tt>/lib/range.c</tt> + + +<p> +<sect2>comedi_trigger() <it/(deprecated)/ +<p> + +<tt/int comedi_trigger(comedi_t *it,comedi_trig *trig);/ + +The function <tt/comedi_trigger/ instructs comedi to +perform the command specified by the <ref id="comedi_trig_struct" name +="trigger structure"> <tt/trig/. Results depend on +the particular command being issued. If there is an +error, -1 is returned. + +Lifetime: removal at 1.0. + +Source: <tt>/lib/comedi.c</tt> + + + + + + + + + + + + + +<p> +<sect2>comedi_get_timer() +<p> + +<tscreen><verb> +int comedi_get_timer(comedi_t *it,unsigned int subdev,double freq,unsigned int *trigvar, + double *actual_freq); +</verb></tscreen> + + +<p> + +</article> +