comedilib/swig/python/README.txt
W. Trevor King db4fd99309 Suggest people use PYTHONPATH rather than adjusting sys.path internally.
The old method only worked out of the box if you were running Python
2.1 on a 586.  I imagine that is too small a slice of current users to
be worth hard coding ;).
2012-03-13 09:30:45 -04:00

53 lines
2.3 KiB
Text

** General info on the swig-generated wrappers for Comedilib **
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
If you want to test the wrappers before installing them, you will
need to set the `PYTHONPATH` environment variable so Python can find
the compiled modules. On my system, that looks like
$ PYTHONPATH=build/lib.linux-i686-2.7/ ../../demo/python/info.py
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.