diff --git a/Makefile b/Makefile index 8808aac..2afb13a 100644 --- a/Makefile +++ b/Makefile @@ -2,8 +2,7 @@ all: bindings python setup.py build bindings: - grep -PhR "(?s)extern [^\"](.*);" WiringPi/ > bindings.i - swig2.0 -python wiringpi.i + swig3.0 -python wiringpi.i install: sudo python setup.py install diff --git a/bindings.i b/bindings.i new file mode 100644 index 0000000..a604ff1 --- /dev/null +++ b/bindings.i @@ -0,0 +1,211 @@ + +// Header file WiringPi/wiringPi/wiringPi.h +extern int wiringPiFailure (int fatal, const char *message, ...) ; +extern struct wiringPiNodeStruct *wiringPiFindNode (int pin) ; +extern struct wiringPiNodeStruct *wiringPiNewNode (int pinBase, int numPins) ; +extern int wiringPiSetup (void) ; +extern int wiringPiSetupSys (void) ; +extern int wiringPiSetupGpio (void) ; +extern int wiringPiSetupPhys (void) ; +extern void pinModeAlt (int pin, int mode) ; +extern void pinMode (int pin, int mode) ; +extern void pullUpDnControl (int pin, int pud) ; +extern int digitalRead (int pin) ; +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) ; +extern int physPinToGpio (int physPin) ; +extern void setPadDrive (int group, int value) ; +extern int getAlt (int pin) ; +extern void pwmToneWrite (int pin, int freq) ; +extern void digitalWriteByte (int value) ; +extern void pwmSetMode (int mode) ; +extern void pwmSetRange (unsigned int range) ; +extern void pwmSetClock (int divisor) ; +extern void gpioClockSet (int pin, int freq) ; +extern int waitForInterrupt (int pin, int mS) ; +extern int piThreadCreate (void *(*fn)(void *)) ; +extern void piLock (int key) ; +extern void piUnlock (int key) ; +extern int piHiPri (const int pri) ; +extern void delay (unsigned int howLong) ; +extern void delayMicroseconds (unsigned int howLong) ; +extern unsigned int millis (void) ; +extern unsigned int micros (void) ; + +// Header file WiringPi/wiringPi/wiringPiI2C.h +extern int wiringPiI2CRead (int fd) ; +extern int wiringPiI2CReadReg8 (int fd, int reg) ; +extern int wiringPiI2CReadReg16 (int fd, int reg) ; +extern int wiringPiI2CWrite (int fd, int data) ; +extern int wiringPiI2CWriteReg8 (int fd, int reg, int data) ; +extern int wiringPiI2CWriteReg16 (int fd, int reg, int data) ; +extern int wiringPiI2CSetupInterface (const char *device, int devId) ; +extern int wiringPiI2CSetup (const int devId) ; + +// Header file WiringPi/wiringPi/wiringPiSPI.h +int wiringPiSPIGetFd (int channel) ; +int wiringPiSPIDataRW (int channel, unsigned char *data, int len) ; +int wiringPiSPISetupMode (int channel, int speed, int mode) ; +int wiringPiSPISetup (int channel, int speed) ; + +// Header file WiringPi/wiringPi/wiringSerial.h +extern int serialOpen (const char *device, const int baud) ; +extern void serialClose (const int fd) ; +extern void serialFlush (const int fd) ; +extern void serialPutchar (const int fd, const unsigned char c) ; +extern void serialPuts (const int fd, const char *s) ; +extern void serialPrintf (const int fd, const char *message, ...) ; +extern int serialDataAvail (const int fd) ; +extern int serialGetchar (const int fd) ; + +// Header file WiringPi/wiringPi/wiringShift.h +extern uint8_t shiftIn (uint8_t dPin, uint8_t cPin, uint8_t order) ; +extern void shiftOut (uint8_t dPin, uint8_t cPin, uint8_t order, uint8_t val) ; + +// Header file WiringPi/wiringPi/wpiExtensions.h +extern int loadWPiExtension (char *progName, char *extensionData, int verbose) ; + +// Header file WiringPi/wiringPi/drcSerial.h +extern int drcSetupSerial (const int pinBase, const int numPins, const char *device, const int baud) ; + +// Header file WiringPi/wiringPi/max31855.h +extern int max31855Setup (int pinBase, int spiChannel) ; + +// Header file WiringPi/wiringPi/max5322.h +extern int max5322Setup (int pinBase, int spiChannel) ; + +// Header file WiringPi/wiringPi/mcp23008.h +extern int mcp23008Setup (const int pinBase, const int i2cAddress) ; + +// Header file WiringPi/wiringPi/mcp23016.h +extern int mcp23016Setup (const int pinBase, const int i2cAddress) ; + +// Header file WiringPi/wiringPi/mcp23016reg.h + +// Header file WiringPi/wiringPi/mcp23017.h +extern int mcp23017Setup (const int pinBase, const int i2cAddress) ; + +// Header file WiringPi/wiringPi/mcp23s08.h +extern int mcp23s08Setup (const int pinBase, const int spiPort, const int devId) ; + +// Header file WiringPi/wiringPi/mcp23s17.h +extern int mcp23s17Setup (int pinBase, int spiPort, int devId) ; + +// Header file WiringPi/wiringPi/mcp23x0817.h + +// Header file WiringPi/wiringPi/mcp23x08.h + +// Header file WiringPi/wiringPi/mcp3002.h +extern int mcp3002Setup (int pinBase, int spiChannel) ; + +// Header file WiringPi/wiringPi/mcp3004.h +extern int mcp3004Setup (int pinBase, int spiChannel) ; + +// Header file WiringPi/wiringPi/mcp3422.h +extern int mcp3422Setup (int pinBase, int i2cAddress, int sampleRate, int gain) ; + +// Header file WiringPi/wiringPi/mcp4802.h +extern int mcp4802Setup (int pinBase, int spiChannel) ; + +// Header file WiringPi/wiringPi/pcf8574.h +extern int pcf8574Setup (const int pinBase, const int i2cAddress) ; + +// Header file WiringPi/wiringPi/pcf8591.h +extern int pcf8591Setup (const int pinBase, const int i2cAddress) ; + +// Header file WiringPi/wiringPi/sn3218.h +extern int sn3218Setup (int pinBase) ; + +// Header file WiringPi/wiringPi/softPwm.h +extern int softPwmCreate (int pin, int value, int range) ; +extern void softPwmWrite (int pin, int value) ; +extern void softPwmStop (int pin) ; + +// Header file WiringPi/wiringPi/softServo.h +extern void softServoWrite (int pin, int value) ; +extern int softServoSetup (int p0, int p1, int p2, int p3, int p4, int p5, int p6, int p7) ; + +// Header file WiringPi/wiringPi/softTone.h +extern int softToneCreate (int pin) ; +extern void softToneStop (int pin) ; +extern void softToneWrite (int pin, int freq) ; + +// Header file WiringPi/wiringPi/sr595.h +extern int sr595Setup (const int pinBase, const int numPins, + const int dataPin, const int clockPin, const int latchPin) ; + +// Header file WiringPi/devLib/ds1302.h +extern unsigned int ds1302rtcRead (const int reg) ; +extern void ds1302rtcWrite (const int reg, const unsigned int data) ; +extern unsigned int ds1302ramRead (const int addr) ; +extern void ds1302ramWrite (const int addr, const unsigned int data) ; +extern void ds1302clockRead (int clockData [8]) ; +extern void ds1302clockWrite (const int clockData [8]) ; +extern void ds1302trickleCharge (const int diodes, const int resistors) ; +extern void ds1302setup (const int clockPin, const int dataPin, const int csPin) ; + +// Header file WiringPi/devLib/font.h + +// Header file WiringPi/devLib/gertboard.h +extern void gertboardAnalogWrite (const int chan, const int value) ; +extern int gertboardAnalogRead (const int chan) ; +extern int gertboardSPISetup (void) ; +extern int gertboardAnalogSetup (const int pinBase) ; + +// Header file WiringPi/devLib/lcd128x64.h +extern void lcd128x64setOrigin (int x, int y) ; +extern void lcd128x64setOrientation (int orientation) ; +extern void lcd128x64orientCoordinates (int *x, int *y) ; +extern void lcd128x64getScreenSize (int *x, int *y) ; +extern void lcd128x64point (int x, int y, int colour) ; +extern void lcd128x64line (int x0, int y0, int x1, int y1, int colour) ; +extern void lcd128x64lineTo (int x, int y, int colour) ; +extern void lcd128x64rectangle (int x1, int y1, int x2, int y2, int colour, int filled) ; +extern void lcd128x64circle (int x, int y, int r, int colour, int filled) ; +extern void lcd128x64ellipse (int cx, int cy, int xRadius, int yRadius, int colour, int filled) ; +extern void lcd128x64putchar (int x, int y, int c, int bgCol, int fgCol) ; +extern void lcd128x64puts (int x, int y, const char *str, int bgCol, int fgCol) ; +extern void lcd128x64update (void) ; +extern void lcd128x64clear (int colour) ; +extern int lcd128x64setup (void) ; + +// Header file WiringPi/devLib/lcd.h +extern void lcdHome (const int fd) ; +extern void lcdClear (const int fd) ; +extern void lcdDisplay (const int fd, int state) ; +extern void lcdCursor (const int fd, int state) ; +extern void lcdCursorBlink (const int fd, int state) ; +extern void lcdSendCommand (const int fd, unsigned char command) ; +extern void lcdPosition (const int fd, int x, int y) ; +extern void lcdCharDef (const int fd, int index, unsigned char data [8]) ; +extern void lcdPutchar (const int fd, unsigned char data) ; +extern void lcdPuts (const int fd, const char *string) ; +extern void lcdPrintf (const int fd, const char *message, ...) ; +extern int lcdInit (const int rows, const int cols, const int bits, + const int rs, const int strb, + const int d0, const int d1, const int d2, const int d3, const int d4, + const int d5, const int d6, const int d7) ; + +// Header file WiringPi/devLib/maxdetect.h +int maxDetectRead (const int pin, unsigned char buffer [4]) ; +int readRHT03 (const int pin, int *temp, int *rh) ; + +// Header file WiringPi/devLib/piFace.h +extern int piFaceSetup (const int pinBase) ; + +// Header file WiringPi/devLib/piGlow.h +extern void piGlow1 (const int leg, const int ring, const int intensity) ; +extern void piGlowLeg (const int leg, const int intensity) ; +extern void piGlowRing (const int ring, const int intensity) ; +extern void piGlowSetup (int clear) ; + +// Header file WiringPi/devLib/piNes.h +extern int setupNesJoystick (int dPin, int cPin, int lPin) ; +extern unsigned int readNesJoystick (int joystick) ; diff --git a/generate-bindings.py b/generate-bindings.py new file mode 100644 index 0000000..31fad85 --- /dev/null +++ b/generate-bindings.py @@ -0,0 +1,67 @@ +HEADERS = [ +"WiringPi/wiringPi/wiringPi.h", +"WiringPi/wiringPi/wiringPiI2C.h", +"WiringPi/wiringPi/wiringPiSPI.h", +"WiringPi/wiringPi/wiringSerial.h", +"WiringPi/wiringPi/wiringShift.h", +"WiringPi/wiringPi/wpiExtensions.h", + +"WiringPi/wiringPi/drcSerial.h", +"WiringPi/wiringPi/max31855.h", +"WiringPi/wiringPi/max5322.h", +"WiringPi/wiringPi/mcp23008.h", +"WiringPi/wiringPi/mcp23016.h", +"WiringPi/wiringPi/mcp23016reg.h", +"WiringPi/wiringPi/mcp23017.h", +"WiringPi/wiringPi/mcp23s08.h", +"WiringPi/wiringPi/mcp23s17.h", +"WiringPi/wiringPi/mcp23x0817.h", +"WiringPi/wiringPi/mcp23x08.h", +"WiringPi/wiringPi/mcp3002.h", +"WiringPi/wiringPi/mcp3004.h", +"WiringPi/wiringPi/mcp3422.h", +"WiringPi/wiringPi/mcp4802.h", +"WiringPi/wiringPi/pcf8574.h", +"WiringPi/wiringPi/pcf8591.h", +"WiringPi/wiringPi/sn3218.h", +"WiringPi/wiringPi/softPwm.h", +"WiringPi/wiringPi/softServo.h", +"WiringPi/wiringPi/softTone.h", +"WiringPi/wiringPi/sr595.h", + +"WiringPi/devLib/ds1302.h", +"WiringPi/devLib/font.h", +"WiringPi/devLib/gertboard.h", +"WiringPi/devLib/lcd128x64.h", +"WiringPi/devLib/lcd.h", +"WiringPi/devLib/maxdetect.h", +"WiringPi/devLib/piFace.h", +"WiringPi/devLib/piGlow.h", +"WiringPi/devLib/piNes.h" +] +def is_c_decl(line): + if "wiringPiISR" in line: + return False + for prefix in ['extern','void','int','uint8_t']: + if line.startswith(prefix): + return True + +for file in HEADERS: + print("\n// Header file {}".format(file)) + h = open(file).read().split('\n') + extern = False + cont = False + if 'extern "C" {' not in h: + extern = True + for line in h: + line = line.strip() + if cont: + print("\t{}".format(line)) + cont = ";" not in line + continue + if line.startswith('extern "C"'): + extern = True + continue + if is_c_decl(line) and extern: + print(line) + cont = ";" not in line diff --git a/wiringpi.i b/wiringpi.i index 5d3f5b8..3580b3d 100644 --- a/wiringpi.i +++ b/wiringpi.i @@ -234,160 +234,10 @@ static void wiringPiISRWrapper(int pin, int mode, PyObject *PyFunc) { %} -extern int wiringPiFailure (int fatal, const char *message, ...) ; -extern struct wiringPiNodeStruct *wiringPiFindNode (int pin) ; -extern struct wiringPiNodeStruct *wiringPiNewNode (int pinBase, int numPins) ; - -// Core wiringPi functions -extern int wiringPiSetup (void) ; -extern int wiringPiSetupSys (void) ; -extern int wiringPiSetupGpio (void) ; -extern int wiringPiSetupPhys (void) ; - -extern void pinModeAlt (int pin, int mode) ; -extern void pinMode (int pin, int mode) ; -extern void pullUpDnControl (int pin, int pud) ; -extern int digitalRead (int pin) ; -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) ; - -// On-Board Raspberry Pi hardware specific stuff -extern int piBoardRev (void) ; -extern void piBoardId (int *model, int *rev, int *mem, int *maker, int *overVolted) ; -extern int wpiPinToGpio (int wpiPin) ; -extern int physPinToGpio (int physPin) ; -extern void setPadDrive (int group, int value) ; -extern int getAlt (int pin) ; -extern void pwmToneWrite (int pin, int freq) ; -extern void digitalWriteByte (int value) ; -extern void pwmSetMode (int mode) ; -extern void pwmSetRange (unsigned int range) ; -extern void pwmSetClock (int divisor) ; -extern void gpioClockSet (int pin, int freq) ; - -// Interrupts -extern int waitForInterrupt (int pin, int mS) ; - // overlay normal function with our wrapper %rename("wiringPiISR") wiringPiISRWrapper (int pin, int mode, PyObject *PyFunc); static void wiringPiISRWrapper(int pin, int mode, PyObject *PyFunc); -// note: native C function is not exported: -//extern int wiringPiISR (int pin, int mode, void (*function)(void)) ; - -// Threads -extern int piThreadCreate (void *(*fn)(void *)) ; -extern void piLock (int key) ; -extern void piUnlock (int key) ; - -// Schedulling priority - -extern int piHiPri (const int pri) ; - -// Delays and Timing -extern void delay (unsigned int howLong) ; -extern void delayMicroseconds (unsigned int howLong) ; -extern unsigned int millis (void) ; -extern unsigned int micros (void) ; - -// ds1302 -extern unsigned int ds1302rtcRead (const int reg) ; -extern void ds1302rtcWrite (const int reg, const unsigned int data) ; -extern unsigned int ds1302ramRead (const int addr) ; -extern void ds1302ramWrite (const int addr, const unsigned int data) ; -extern void ds1302clockRead (int clockData [8]) ; -extern void ds1302clockWrite (const int clockData [8]) ; -extern void ds1302trickleCharge (const int diodes, const int resistors) ; -extern void ds1302setup (const int clockPin, const int dataPin, const int csPin) ; - -// Gertboard -extern void gertboardAnalogWrite (const int chan, const int value) ; -extern int gertboardAnalogRead (const int chan) ; -extern int gertboardSPISetup (void) ; -extern int gertboardAnalogSetup (const int pinBase) ; - -// LCD 128x64 -extern void lcd128x64setOrigin (int x, int y) ; -extern void lcd128x64setOrientation (int orientation) ; -extern void lcd128x64orientCoordinates (int *x, int *y) ; -extern void lcd128x64getScreenSize (int *x, int *y) ; -extern void lcd128x64point (int x, int y, int colour) ; -extern void lcd128x64line (int x0, int y0, int x1, int y1, int colour) ; -extern void lcd128x64lineTo (int x, int y, int colour) ; -extern void lcd128x64rectangle (int x1, int y1, int x2, int y2, int colour, int filled) ; -extern void lcd128x64circle (int x, int y, int r, int colour, int filled) ; -extern void lcd128x64ellipse (int cx, int cy, int xRadius, int yRadius, int colour, int filled) ; -extern void lcd128x64putchar (int x, int y, int c, int bgCol, int fgCol) ; -extern void lcd128x64puts (int x, int y, const char *str, int bgCol, int fgCol) ; -extern void lcd128x64update (void) ; -extern void lcd128x64clear (int colour) ; -extern int lcd128x64setup (void) ; - -// LCD -extern void lcdHome (const int fd) ; -extern void lcdClear (const int fd) ; -extern void lcdDisplay (const int fd, int state) ; -extern void lcdCursor (const int fd, int state) ; -extern void lcdCursorBlink (const int fd, int state) ; -extern void lcdSendCommand (const int fd, unsigned char command) ; -extern void lcdPosition (const int fd, int x, int y) ; -extern void lcdCharDef (const int fd, int index, unsigned char data [8]) ; -extern void lcdPutchar (const int fd, unsigned char data) ; -extern void lcdPuts (const int fd, const char *string) ; -extern void lcdPrintf (const int fd, const char *message, ...) ; -extern int lcdInit (const int rows, const int cols, const int bits, - const int rs, const int strb, - const int d0, const int d1, const int d2, const int d3, const int d4, - const int d5, const int d6, const int d7) ; - -// PiFace -extern int piFaceSetup (const int pinBase) ; - -// PiGlow -extern void piGlow1 (const int leg, const int ring, const int intensity) ; -extern void piGlowLeg (const int leg, const int intensity) ; -extern void piGlowRing (const int ring, const int intensity) ; -extern void piGlowSetup (int clear) ; - -// NES -extern int setupNesJoystick (int dPin, int cPin, int lPin) ; -extern unsigned int readNesJoystick (int joystick) ; - -// Various IC setup functions -extern int sr595Setup (const int pinBase, const int numPins, const int dataPin, const int clockPin, const int latchPin) ; -extern int drcSetupSerial (const int pinBase, const int numPins, const char *device, const int baud) ; -extern int max31855Setup (int pinBase, int spiChannel) ; -extern int max5322Setup (int pinBase, int spiChannel) ; -extern int mcp23008Setup (const int pinBase, const int i2cAddress) ; -extern int mcp23016Setup (const int pinBase, const int i2cAddress) ; -extern int mcp23017Setup (const int pinBase, const int i2cAddress) ; -extern int mcp23s08Setup (const int pinBase, const int spiPort, const int devId) ; -extern int mcp23s17Setup (int pinBase, int spiPort, int devId) ; -extern int mcp3002Setup (int pinBase, int spiChannel) ; -extern int mcp3004Setup (int pinBase, int spiChannel) ; -extern int mcp3422Setup (int pinBase, int i2cAddress, int sampleRate, int gain) ; -extern int mcp4802Setup (int pinBase, int spiChannel) ; -extern int pcf8574Setup (const int pinBase, const int i2cAddress) ; -extern int pcf8591Setup (const int pinBase, const int i2cAddress) ; -extern int sn3218Setup (int pinBase) ; - -// Soft PWM -extern int softPwmCreate (int pin, int value, int range) ; -extern void softPwmWrite (int pin, int value) ; -extern void softPwmStop (int pin) ; - -// Soft Servo -extern void softServoWrite (int pin, int value) ; -extern int softServoSetup (int p0, int p1, int p2, int p3, int p4, int p5, int p6, int p7) ; - -// Soft Tone -extern int softToneCreate (int pin) ; -extern void softToneStop (int pin) ; -extern void softToneWrite (int pin, int freq) ; - -// SPI %typemap(in) (unsigned char *data, int len) { $1 = (unsigned char *) PyString_AsString($input); @@ -398,34 +248,6 @@ extern void softToneWrite (int pin, int freq) ; $result = SWIG_Python_AppendOutput($result, PyString_FromStringAndSize((char *) $1, result)); }; -int wiringPiSPIGetFd (int channel) ; -int wiringPiSPIDataRW (int channel, unsigned char *data, int len) ; -int wiringPiSPISetupMode (int channel, int speed, int mode) ; -int wiringPiSPISetup (int channel, int speed) ; - -// I2C -extern int wiringPiI2CRead (int fd) ; -extern int wiringPiI2CReadReg8 (int fd, int reg) ; -extern int wiringPiI2CReadReg16 (int fd, int reg) ; -extern int wiringPiI2CWrite (int fd, int data) ; -extern int wiringPiI2CWriteReg8 (int fd, int reg, int data) ; -extern int wiringPiI2CWriteReg16 (int fd, int reg, int data) ; -extern int wiringPiI2CSetupInterface (const char *device, int devId) ; -extern int wiringPiI2CSetup (const int devId) ; - -// WiringSerial -extern int serialOpen (const char *device, const int baud) ; -extern void serialClose (const int fd) ; -extern void serialFlush (const int fd) ; -extern void serialPutchar (const int fd, const unsigned char c) ; -extern void serialPuts (const int fd, const char *s) ; -extern void serialPrintf (const int fd, const char *message, ...) ; -extern int serialDataAvail (const int fd) ; -extern int serialGetchar (const int fd) ; - -// Shift Register -extern uint8_t shiftIn (uint8_t dPin, uint8_t cPin, uint8_t order) ; -extern void shiftOut (uint8_t dPin, uint8_t cPin, uint8_t order, uint8_t val) ; - +%include "bindings.i" %include "constants.py" %include "wiringpi2-class.py"