/* Copyright 1999 Red Hat, Inc.
*
* This software may be freely redistributed under the terms of the GNU
* public license.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
#include "kudzu.h"
#include "Python.h"
typedef struct {
char * name;
int value;
} TableEntry;
static TableEntry classTable[] = {
{ "CLASS_UNSPEC", CLASS_UNSPEC },
{ "CLASS_OTHER", CLASS_OTHER },
{ "CLASS_NETWORK", CLASS_NETWORK },
{ "CLASS_SCSI", CLASS_SCSI },
{ "CLASS_VIDEO", CLASS_VIDEO },
{ "CLASS_AUDIO", CLASS_AUDIO },
{ "CLASS_MOUSE", CLASS_MOUSE },
{ "CLASS_MODEM", CLASS_MODEM },
{ "CLASS_CDROM", CLASS_CDROM },
{ "CLASS_TAPE", CLASS_TAPE },
{ "CLASS_FLOPPY", CLASS_FLOPPY },
{ "CLASS_SCANNER", CLASS_SCANNER },
{ "CLASS_HD", CLASS_HD },
{ "CLASS_RAID", CLASS_RAID },
{ "CLASS_PRINTER", CLASS_PRINTER },
{ "CLASS_CAPTURE", CLASS_CAPTURE },
{ "CLASS_KEYBOARD", CLASS_KEYBOARD },
{ NULL },
} ;
static int numClassEntries = sizeof (classTable) / sizeof classTable[0];
static TableEntry busTable[] = {
{ "BUS_UNSPEC", BUS_UNSPEC },
{ "BUS_OTHER", BUS_OTHER },
{ "BUS_PCI", BUS_PCI },
{ "BUS_SBUS", BUS_SBUS },
{ "BUS_PSAUX", BUS_PSAUX },
{ "BUS_SERIAL", BUS_SERIAL },
{ "BUS_PARALLEL", BUS_PARALLEL },
{ "BUS_SCSI", BUS_SCSI },
{ "BUS_IDE", BUS_IDE },
{ "BUS_KEYBOARD", BUS_KEYBOARD },
/* { "BUS_ISAPNP", BUS_ISAPNP }, */
{ NULL },
} ;
static int numBusEntries = sizeof (busTable) / sizeof busTable[0];
static TableEntry modeTable[] = {
{ "PROBE_ALL", PROBE_ALL },
{ "PROBE_SAFE", PROBE_SAFE },
{ "PROBE_ONE", PROBE_ONE },
{ NULL },
} ;
static int numModeEntries = sizeof (modeTable) / sizeof modeTable[0];
static PyObject * doProbe (PyObject * self, PyObject * args) {
int class, bus, mode;
struct device ** devices, ** tmp;
PyObject * list;
if (!PyArg_ParseTuple(args, "iii", &class, &bus, &mode))
return NULL;
devices = probeDevices(class, bus, mode);
list = PyList_New(0);
if (!devices)
return list;
tmp = devices;
while (*tmp) {
PyList_Append (list, Py_BuildValue("(sss)",
(*tmp)->device,
(*tmp)->driver,
(*tmp)->desc));
tmp++;
}
tmp = devices;
while (*tmp) {
(*tmp)->freeDevice (*tmp);
tmp++;
}
free(devices);
return list;
}
static PyMethodDef kudzuMethods[] = {
{ "probe", (PyCFunction) doProbe, METH_VARARGS, NULL },
{ NULL }
} ;
static void registerTable (PyObject * dict, TableEntry * table) {
int i;
i = 0;
while (table[i].name) {
PyDict_SetItemString(dict, table[i].name,
PyInt_FromLong (table[i].value));
i++;
}
}
void initkudzu (void) {
PyObject * m, * dict;
int i;
m = Py_InitModule("kudzu", kudzuMethods);
dict = PyModule_GetDict(m);
registerTable (dict, classTable);
registerTable (dict, busTable);
registerTable (dict, modeTable);
initializeDeviceList();
}