Mercurial > code > home > repos > light9
diff light8/serport.i @ 0:45b12307c695
Initial revision
author | drewp |
---|---|
date | Wed, 03 Jul 2002 09:37:57 +0000 |
parents | |
children | 0b86bf6808f8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/light8/serport.i Wed Jul 03 09:37:57 2002 +0000 @@ -0,0 +1,50 @@ +%module serport + +%{ +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/ioctl.h> +#include <fcntl.h> +#include <linux/i2c.h> +#include <linux/i2c-dev.h> +#include <unistd.h> +%} + + +%typemap(python,in) __u8 { + if( !PyInt_Check($input)) { + PyErr_SetString(PyExc_TypeError,"not an integer"); + return NULL; + } + $1 = ($type) PyInt_AsLong($input); +} + +%typemap(python,out) __s32 { + $result = Py_BuildValue("i", ($type) $1); +} + +%inline %{ + + __s32 i2c_smbus_write_byte(int file, __u8 value); + __s32 i2c_smbus_read_byte(int file); + + PyObject *read_all_adc(int file) { + PyObject *t=PyTuple_New(4); + + #define CHAN_TO_TUPLE_POS(chan,idx) i2c_smbus_write_byte(file, chan);\ + PyTuple_SetItem(t,idx,PyInt_FromLong(i2c_smbus_read_byte(file))); + + /* + these are shuffled here to match the way the pots read in. in + the returned tuple, 0=left pot..3=right pot. + */ + CHAN_TO_TUPLE_POS(1,0) + CHAN_TO_TUPLE_POS(2,1) + CHAN_TO_TUPLE_POS(3,2) + CHAN_TO_TUPLE_POS(0,3) + + return t; + + } + +%}