153 lines
3.3 KiB
C
153 lines
3.3 KiB
C
/* Compy: COMedi PYthon interface
|
|
* A simple hack sharded object for importing into Python
|
|
* to start using Comedi drivers for Digital I/O
|
|
*
|
|
* Extensively referenced xxmodule.c and others from python distribution
|
|
* misc comedi examples.
|
|
*
|
|
* Blaine Lee Copyright 11/2000 Licence LGPL 2.0
|
|
*
|
|
* V 0.3 changed to tuple parsing & added version number __version__()
|
|
* V 0.21 Resynced with sorce that had printstats debugging code in it
|
|
* V 0.2 Added card number, so that multiple cards are supported
|
|
* V 0.1 First release, only 'trig' type transfers are supported
|
|
*
|
|
*/
|
|
|
|
#include <Python.h>
|
|
#include <stdio.h> /* for printf() */
|
|
#include <comedilib.h>
|
|
|
|
#define maxcards 4
|
|
|
|
static short trigdata;
|
|
static comedi_t *compy_it[maxcards];
|
|
static comedi_trig trig;
|
|
static int trigchan[2];
|
|
static printstats=1;
|
|
static int debug = 1;
|
|
|
|
/*******************************/
|
|
static PyObject *
|
|
compy_open(self, args)
|
|
PyObject *self;
|
|
PyObject *args;
|
|
{
|
|
const char *filen;
|
|
int card;
|
|
|
|
if (!PyArg_ParseTuple(args, "isi", &card, &filen, &printstats))
|
|
return NULL;
|
|
if ((card < 0) || (card >= maxcards))
|
|
return NULL;
|
|
|
|
if(printstats)
|
|
printf("compy open '%s'\n",filen);
|
|
|
|
compy_it[card]=comedi_open(filen);
|
|
|
|
if(debug)
|
|
printf("open returned %p\n",compy_it[card]);
|
|
|
|
return Py_BuildValue("i", 1);
|
|
}
|
|
|
|
static PyObject *
|
|
compy_data_read(PyObject *self, PyObject *args)
|
|
{
|
|
int subd, chan;
|
|
int card;
|
|
lsampl_t data;
|
|
|
|
if (!PyArg_ParseTuple(args, "(iii)", &card, &subd, &chan))
|
|
return NULL;
|
|
if ((card < 0) || (card >= maxcards))
|
|
return NULL;
|
|
if(debug)
|
|
printf("compy trig dev %d subd %d chan %d\n",card,subd,chan);
|
|
|
|
comedi_data_read(compy_it[card],subd,chan,0,0,&data);
|
|
|
|
if(debug)
|
|
printf("comedi_data_read value %d\n",data);
|
|
|
|
return Py_BuildValue("i", data);
|
|
}
|
|
|
|
static PyObject *
|
|
compy_trig(self, args)
|
|
PyObject *self;
|
|
PyObject *args;
|
|
{
|
|
int dev, chan, data;
|
|
int card;
|
|
|
|
if (!PyArg_ParseTuple(args, "(iii)i", &card, &dev, &chan, &data))
|
|
return NULL;
|
|
if ((card < 0) || (card >= maxcards))
|
|
return NULL;
|
|
if(printstats)
|
|
printf("compy trig card %d dev %d chanel %d val %d\n",card,dev,chan,data);
|
|
|
|
trig.subdev=dev;
|
|
trig.chanlist[0]=chan;
|
|
trig.data[0]=data;
|
|
|
|
comedi_trigger(compy_it[card],&trig);
|
|
|
|
return Py_BuildValue("i", trig.data[0]);
|
|
}
|
|
|
|
static PyObject *
|
|
compy_close(self, args)
|
|
PyObject *self;
|
|
PyObject *args;
|
|
{
|
|
int card;
|
|
|
|
if (!PyArg_ParseTuple(args, "i", &card))
|
|
return NULL;
|
|
if ((card < 0) || (card >= maxcards))
|
|
return NULL;
|
|
if(printstats)
|
|
printf("compy close %d\n",card);
|
|
comedi_close(compy_it[card]);
|
|
|
|
return Py_BuildValue("i", 1);
|
|
}
|
|
|
|
#define Version 3
|
|
|
|
static PyObject *
|
|
compy_version(self, args)
|
|
PyObject *self;
|
|
PyObject *args;
|
|
{
|
|
if(printstats)
|
|
printf("Compy version %d\n",Version);
|
|
|
|
return Py_BuildValue("i", Version);
|
|
}
|
|
|
|
|
|
/* List of functions defined in the module */
|
|
|
|
static PyMethodDef comedi_methods[] = {
|
|
{"open", compy_open, METH_VARARGS},
|
|
{"trig", compy_trig, METH_VARARGS},
|
|
{"data_read", compy_data_read, METH_VARARGS},
|
|
{"close", compy_close, METH_VARARGS},
|
|
{"__version__", compy_version, METH_VARARGS},
|
|
{NULL, NULL} /* sentinel */
|
|
};
|
|
|
|
/* Initialization function for the module (*must* be called initxx) */
|
|
|
|
DL_EXPORT(void)
|
|
initcomedi()
|
|
{
|
|
/* Create the module and add the functions */
|
|
(void) Py_InitModule("comedi", comedi_methods);
|
|
}
|
|
|
|
|