diff --git a/bindings.i b/bindings.i index a604ff1..92b5fdd 100644 --- a/bindings.i +++ b/bindings.i @@ -1,3 +1,4 @@ +// Generated by generate-bindings.py - do not edit manually! // Header file WiringPi/wiringPi/wiringPi.h extern int wiringPiFailure (int fatal, const char *message, ...) ; @@ -15,8 +16,6 @@ extern void digitalWrite (int pin, int value) ; extern void pwmWrite (int pin, int value) ; extern int analogRead (int pin) ; extern void analogWrite (int pin, int value) ; -extern int wiringPiSetupPiFace (void) ; -extern int wiringPiSetupPiFaceForGpioProg (void) ; // Don't use this - for gpio program only extern int piBoardRev (void) ; extern void piBoardId (int *model, int *rev, int *mem, int *maker, int *overVolted) ; extern int wpiPinToGpio (int wpiPin) ; diff --git a/generate-bindings.py b/generate-bindings.py index 31fad85..e140dc8 100644 --- a/generate-bindings.py +++ b/generate-bindings.py @@ -40,12 +40,15 @@ HEADERS = [ "WiringPi/devLib/piNes.h" ] def is_c_decl(line): - if "wiringPiISR" in line: - return False + for fn in ['wiringPiISR','wiringPiSetupPiFace','wiringPiSetupPiFaceForGpioProg']: + if fn in line: + return False for prefix in ['extern','void','int','uint8_t']: if line.startswith(prefix): return True +print("// Generated by generate-bindings.py - do not edit manually!") + for file in HEADERS: print("\n// Header file {}".format(file)) h = open(file).read().split('\n') diff --git a/wiringpi.i b/wiringpi.i index 3580b3d..0988f69 100644 --- a/wiringpi.i +++ b/wiringpi.i @@ -34,7 +34,6 @@ #include "WiringPi/devLib/lcd128x64.h" #include "WiringPi/devLib/lcd.h" #include "WiringPi/devLib/maxdetect.h" -#include "WiringPi/devLib/piFace.h" #include "WiringPi/devLib/piGlow.h" #include "WiringPi/devLib/piNes.h" %} @@ -238,6 +237,33 @@ static void wiringPiISRWrapper(int pin, int mode, PyObject *PyFunc) { %rename("wiringPiISR") wiringPiISRWrapper (int pin, int mode, PyObject *PyFunc); static void wiringPiISRWrapper(int pin, int mode, PyObject *PyFunc); +%typemap(in) unsigned char data [8] { + /* Check if is a list */ + if (PyList_Check($input)) { + if(PyList_Size($input) != 8){ + PyErr_SetString(PyExc_TypeError,"must contain 8 items"); + return NULL; + } + int i = 0; + $1 = (unsigned char *) malloc(8); + for (i = 0; i < 8; i++) { + PyObject *o = PyList_GetItem($input,i); + if (PyInt_Check(o) && PyInt_AsLong(PyList_GetItem($input,i)) <= 255 && PyInt_AsLong(PyList_GetItem($input,i)) >= 0) + $1[i] = PyInt_AsLong(PyList_GetItem($input,i)); + else { + PyErr_SetString(PyExc_TypeError,"list must contain integers 0-255"); + return NULL; + } + } + } else { + PyErr_SetString(PyExc_TypeError,"not a list"); + return NULL; + } +}; + +%typemap(freearg) unsigned char data [8] { + free((unsigned char *) $1); +} %typemap(in) (unsigned char *data, int len) { $1 = (unsigned char *) PyString_AsString($input);