Updated procedures for building with Python's distutils. Also reduced

line-lengths for 80-character wide terminals.  Most of the updated text
supplied by W. Trevor King.  Ian Abbott added a note that it only applies
when building the wrappers separately from Comedilib without 'make'.
This commit is contained in:
Ian Abbott 2010-12-20 15:49:59 +00:00
parent 3fe8e6baac
commit cdb3a84f86

View file

@ -1,40 +1,48 @@
** General info on the swig-generated wrappers for Comedilib **
1) Regenerating the wrappers
The wrapper were made using swig-1.3.19. Any of the swig-1.3.x seris should work
N.B. the default swig on redhat systems is version 1.1. Upgrade to v-1.3.19. It's better!
run $> swig -python comedi.i
2) Building the module (section obsolete -Frank Hess)
i) edit the setup.py file so that the include and lib paths are correct for your system
ii) run $> python setup.py build
3) Installing the module (section obsolete -Frank Hess)
i) Manual installation I'm afraid. Copy comedi.py and _comedi.pyd files to somewhere in your PYTHONPATH
4) Using the module
All the comedilib functions are translated directly to python function. The various comedi structs
are now available as python classes (e.g. comedi_cmd_struct). The members of each struct are now
attributes of the class and can be set and retrieved in the usual way. Comedilib Functions which
take a pointer to a comedilib struct as an argument (in C) now, in python, accept the appropriate
struct python object.
For a multichannel acquisition, a C-array containing the channel list, gains and referencing is
required. This can be created using a swig-generated helper class: chanlist(n). This creates a C-array
of length n and type Unsigned Int. Individual members of the array can be accessed/set using
pythons indexing syntax:
mylist = chanlist(3) #creates a chanlist array of length 3
mylist[0] = 100 #set some values
mylist[1] = 200
mylist[2] = 300
The chanlist object can then be passed to a comedi_cmd_struct object, for example. N.B. The
chanlist object contains *no* length-checking or other error protection so use with care! Don't
try to get/set indexes outside the array bounds.
All the comedilib macros (e.g. CR_PACK) are now available as python functions.
check out the example test_comedi.py to clarify the above.
0) Installing required tools
The wrapper are made with SWIG. Any of the swig-1.3.x series should
work. Run
$ swig -version
to check the version you have installed, and upgrade if necessary.
1) Building the wrappers
Note: the following applies when building wrappers separately from
the comedilib library, using Python's distutils procedures instead
of Comedilib's `make`. In this case, Comedilib should be configured
with the `--disable-python-binding` option to prevent it building
and installing its own copy of the wrappers.
After building the main comedilib library (running `make` in the
base directory), just follow standard distutils procedures
$ python setup.py build
$ python setup.py install
2) Using the module
All the comedilib functions are translated directly to python
function. The various comedi structs are now available as python
classes (e.g. comedi_cmd_struct). The members of each struct are now
attributes of the class and can be set and retrieved in the usual
way. Comedilib functions which take a pointer to a comedilib struct
as an argument (in C) now, in python, accept the appropriate struct
python object.
For a multichannel acquisition, a C-array containing the channel
list, gains and referencing is required. This can be created using a
swig-generated helper class: chanlist(n). This creates a C-array of
length n and type Unsigned Int. Individual members of the array can
be accessed/set using pythons indexing syntax:
mylist = chanlist(3) #creates a chanlist array of length 3
mylist[0] = 100 #set some values
mylist[1] = 200
mylist[2] = 300
The chanlist object can then be passed to a comedi_cmd_struct
object, for example. N.B. The chanlist object contains *no*
length-checking or other error protection so use with care! Don't
try to get/set indexes outside the array bounds.
All the comedilib macros (e.g. CR_PACK) are now available as python
functions (e.g. `comedi.cr_pack`).
Look at the examples in demo/python to clarify the above.