Function bindings for all the things
diff --git a/wiringpi.i b/wiringpi.i
index 7f97312..1cf28e1 100644
--- a/wiringpi.i
+++ b/wiringpi.i
@@ -1,29 +1,37 @@
 %module wiringpi2
 
 %{
-#include "WiringPi/devLib/font.h"
-#include "WiringPi/devLib/maxdetect.h"
-#include "WiringPi/devLib/ds1302.h"
-#include "WiringPi/devLib/gertboard.h"
-#include "WiringPi/devLib/lcd.h"
-#include "WiringPi/devLib/lcd128x64.h"
-#include "WiringPi/wiringPi/mcp23008.h"
+#include "WiringPi/wiringPi/wiringPi.h"
+#include "WiringPi/wiringPi/wiringPiSPI.h"
+#include "WiringPi/wiringPi/wiringPiI2C.h"
+#include "WiringPi/wiringPi/wiringSerial.h"
+#include "WiringPi/wiringPi/wiringShift.h"
 #include "WiringPi/wiringPi/mcp23017.h"
+#include "WiringPi/wiringPi/mcp4802.h"
+#include "WiringPi/wiringPi/mcp3422.h"
 #include "WiringPi/wiringPi/mcp23s08.h"
-#include "WiringPi/wiringPi/mcp23s17.h"
-#include "WiringPi/wiringPi/mcp23x0817.h"
+#include "WiringPi/wiringPi/mcp23008.h"
 #include "WiringPi/wiringPi/mcp23x08.h"
-#include "WiringPi/devLib/piFace.h"
-#include "WiringPi/devLib/piNes.h"
+#include "WiringPi/wiringPi/mcp23016.h"
+#include "WiringPi/wiringPi/mcp3002.h"
+#include "WiringPi/wiringPi/mcp23016reg.h"
+#include "WiringPi/wiringPi/mcp23x0817.h"
+#include "WiringPi/wiringPi/mcp23s17.h"
+#include "WiringPi/wiringPi/pcf8574.h"
+#include "WiringPi/wiringPi/pcf8591.h"
+#include "WiringPi/wiringPi/drc.h"
 #include "WiringPi/wiringPi/softPwm.h"
 #include "WiringPi/wiringPi/softServo.h"
 #include "WiringPi/wiringPi/softTone.h"
 #include "WiringPi/wiringPi/sr595.h"
-#include "WiringPi/wiringPi/wiringPi.h"
-#include "WiringPi/wiringPi/wiringPiI2C.h"
-#include "WiringPi/wiringPi/wiringPiSPI.h"
-#include "WiringPi/wiringPi/wiringSerial.h"
-#include "WiringPi/wiringPi/wiringShift.h"
+#include "WiringPi/devLib/gertboard.h"
+#include "WiringPi/devLib/lcd128x64.h"
+#include "WiringPi/devLib/font.h"
+#include "WiringPi/devLib/lcd.h"
+#include "WiringPi/devLib/maxdetect.h"
+#include "WiringPi/devLib/piFace.h"
+#include "WiringPi/devLib/ds1302.h"
+#include "WiringPi/devLib/piNes.h"
 %}
 
 %apply unsigned char { uint8_t };
@@ -35,7 +43,7 @@
 extern int  wiringPiSetupGpio   (void) ;
 extern int  wiringPiSetupPhys   (void) ;
 
-extern int  piFaceSetup (int pinbase) ;
+extern int  piFaceSetup (const int pinBase) ;
 
 extern void pinMode             (int pin, int mode) ;
 extern void pullUpDnControl     (int pin, int pud) ;
@@ -81,14 +89,14 @@
 
 // WiringSerial
 
-extern int   serialOpen      (char *device, int baud) ;
-extern void  serialClose     (int fd) ;
-extern void  serialFlush     (int fd) ;
-extern void  serialPutchar   (int fd, unsigned char c) ;
-extern void  serialPuts      (int fd, char *s) ;
-extern void  serialPrintf    (int fd, char *message, ...) ;
-extern int   serialDataAvail (int fd) ;
-extern int   serialGetchar   (int fd) ;
+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) ;
 
 // Shifting
 
@@ -134,24 +142,73 @@
 extern int  softPwmCreate (int pin, int value, int range) ;
 extern void softPwmWrite  (int pin, int value) ;
 
+// MCP and stuff
 
+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 mcp23017Setup (int pinBase, int i2cAddress) ;
-
-extern int mcp23s08Setup (int pinBase, int spiPort, int devId) ;
-extern int mcp23008Setup (int pinBase, int i2cAddress) ;
+extern int mcp3002Setup (int pinBase, int spiChannel) ;
+extern int mcp3422Setup (int pinBase, int i2cAddress, int channels, 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 sr595Setup (int pinBase, int numPins, int dataPin, int clockPin, int latchPin) ;
 
-extern void lcdHome        (int fd) ;
-extern void lcdClear       (int fd) ;
-extern void lcdSendCommand (int fd, uint8_t command) ;
-extern void lcdPosition    (int fd, int x, int y) ;
-extern void lcdPutchar     (int fd, uint8_t data) ;
-extern void lcdPuts        (int fd, char *string) ;
-extern void lcdPrintf      (int fd, char *message, ...) ;
-
-extern int  lcdInit (int rows, int cols, int bits, int rs, int strb,
+// 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		  (int rows, int cols, int bits, int rs, int strb,
     int d0, int d1, int d2, int d3, int d4, int d5, int d6, int d7) ;
 
+// 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) ;
+
+// LCD128x64
+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) ;
+
+// NES Joystick
+extern int          setupNesJoystick (int dPin, int cPin, int lPin) ;
+extern unsigned int  readNesJoystick (int joystick) ;
+
+
+
 %include "wiringpi2-class.py"