Various bug fixes
diff --git a/CHANGES.txt b/CHANGES.txt
new file mode 100644
index 0000000..c504481
--- /dev/null
+++ b/CHANGES.txt
@@ -0,0 +1,8 @@
+v1.0.0 -- Branched from original WiringPi to deliver new WiringPi 2 functionality
+v1.0.1 -- Fixed build problems involving missing header files
+v1.0.2 -- Fixed build issue with piNes.c
+v1.0.3 -- Fixed bug in physical pin assignment mode
+v1.0.4 -- Added class wrapper, plus analogRead/Write functions
+v1.0.5 -- Second attempt at pretty Pypi page
+v1.0.6 -- Fixed spelling error in softToneCreate - Thanks oevsegneev
+v1.0.7 -- Added LCD functionality
diff --git a/MANIFEST.in b/MANIFEST.in
index eb7317d..4d941f2 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1 +1,2 @@
 graft WiringPi/wiringPi
+include *.txt
diff --git a/README.rst b/README.rst
new file mode 100644
index 0000000..fc19791
--- /dev/null
+++ b/README.rst
@@ -0,0 +1,75 @@
+======
+WiringPi 2 for Python
+======
+
+WARNING: This is an in-development library, it will not be bug free and fully featured.
+======
+
+Please tweet @gadgetoid, find Gadgetoid in IRC, email Phil at Gadgetoid dot com,
+or visit http://pi.gadgetoid.com/post/039-wiringpi-version-2-with-extra-python and
+comment if you have any problems, suggestions, questions or words of support.
+
+WiringPi: An implementation of most of the Arduino Wiring
+	functions for the Raspberry Pi
+
+WiringPi2: WiringPi version 2 implements new functions for managing IO expanders.
+
+Testing:
+========
+Build with gcc version 4.6.3 (Debian 4.6.3-14+rpi1)
+Built against Python 2.7.2, Python 3.2.3
+
+Prerequisites:
+==============
+You must have python-dev and python-setuptools installed
+If you manually rebuild the bindings with swig -python wiringpi.i
+
+Get/setup repo:
+===============
+git clone https://github.com/Gadgetoid/WiringPi2-Python.git
+cd WiringPi2-Python
+
+Build & install with:
+=====================
+sudo python setup.py install
+
+Or Python 3
+sudo python3 setup.py install
+
+Class-based Usage:
+==================
+Description incoming!
+
+Usage:
+======
+import wiringpi2
+wiringpi2.wiringPiSetup // For sequential pin numbering, one of these MUST be called before using IO functions
+OR
+wiringpi2.wiringPiSetupSys // For /sys/class/gpio with GPIO pin numbering
+OR
+wiringpi2.wiringPiSetupGpio // For GPIO pin numbering
+
+Setting up IO expanders (This example was tested on a quick2wire board with one digital IO expansion board connected via I2C):
+wiringpi2.mcp23017Setup(65,0x20)
+wiringpi2.pinMode(65,1)
+wiringpi2.digitalWrite(65,1)
+
+General IO:
+-----------
+wiringpi2.pinMode(1,1) // Set pin 1 to output
+wiringpi2.digitalWrite(1,1) // Write 1 HIGH to pin 1
+wiringpi2.digitalRead(1) // Read pin 1
+
+Bit shifting:
+-------------
+wiringpi2.shiftOut(1,2,0,123) // Shift out 123 (b1110110, byte 0-255) to data pin 1, clock pin 2
+
+Serial:
+-------
+serial = wiringpi2.serialOpen('/dev/ttyAMA0',9600) // Requires device/baud and returns an ID
+wiringpi2.serialPuts(serial,"hello")
+wiringpi2.serialClose(serial) // Pass in ID
+
+Full details at:
+----------------
+http://www.wiringpi.com
diff --git a/WiringPi/wiringPi/wiringPi.c b/WiringPi/wiringPi/wiringPi.c
index 59a3392..6bb8883 100644
--- a/WiringPi/wiringPi/wiringPi.c
+++ b/WiringPi/wiringPi/wiringPi.c
@@ -1083,7 +1083,7 @@
     }
     else if (wiringPiMode == WPI_MODE_PINS)
       pin = pinToGpio [pin] ;
-    else if (wiringPiMode == WPI_MODE_GPIO)
+    else if (wiringPiMode == WPI_MODE_PHYS)
       pin = physToGpio [pin] ;
     else if (wiringPiMode != WPI_MODE_GPIO)
       return ;
diff --git a/build.sh b/build.sh
new file mode 100755
index 0000000..8d072ea
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,3 @@
+swig2.0 -python wiringpi.i
+sudo python setup.py build install
+sudo python test.py
diff --git a/examples/ladder-board.py b/examples/ladder-board.py
new file mode 100644
index 0000000..de4542f
--- /dev/null
+++ b/examples/ladder-board.py
@@ -0,0 +1,27 @@
+import wiringpi2 as wiringpi
+INPUT = 0
+OUTPUT = 1
+LOW = 0
+HIGH = 1
+BUTTONS = [13,12,10,11]
+LEDS = [0,1,2,3,4,5,6,7,8,9]
+PUD_UP = 2
+
+wiringpi.wiringPiSetup()
+
+for button in BUTTONS:
+	wiringpi.pinMode(button,INPUT)
+	wiringpi.pullUpDnControl(button,PUD_UP)
+
+for led in LEDS:
+	wiringpi.pinMode(led,OUTPUT)
+
+while 1:
+	for index,button in enumerate(BUTTONS):
+		button_state = wiringpi.digitalRead(button)
+		first_led = LEDS[index*2]
+		second_led = LEDS[(index*2)+1]
+		#print str(button) + ' ' + str(button_state)
+		wiringpi.digitalWrite(first_led,1-button_state)
+		wiringpi.digitalWrite(second_led,1-button_state)
+	wiringpi.delay(20)
diff --git a/examples/n5510-mcp23017.py b/examples/n5510-mcp23017.py
new file mode 100644
index 0000000..fb12f77
--- /dev/null
+++ b/examples/n5510-mcp23017.py
@@ -0,0 +1,95 @@
+# Turns on each pin of an mcp23017 on address 0x20 ( quick2wire IO expander )
+import wiringpi2 as wiringpi
+
+PIN_BACKLIGHT = 67 # LED
+PIN_SCLK = 68 # Clock SCLK
+PIN_SDIN = 69 # DN(MOSI)
+PIN_DC = 70 # D/C
+PIN_RESET = 71 # RST Reset
+PIN_SCE = 72 # SCE
+
+#PIN_BACKLIGHT = 5
+#PIN_SCLK = 4
+#PIN_SDIN = 3
+#PIN_DC = 2
+#PIN_RESET = 1
+#PIN_SCE = 0
+
+OUTPUT = 1
+INPUT = 0
+HIGH = 1
+LOW = 0
+
+LCD_C = 0
+LCD_D = 1
+
+LCD_X = 84
+LCD_Y = 48
+LCD_SEGS = 504
+
+MSBFIRST = 1
+LSBFIRST = 0
+
+SLOW_DOWN = 400
+
+pin_base = 65
+i2c_addr = 0x21
+
+wiringpi.wiringPiSetup()
+wiringpi.mcp23017Setup(pin_base,i2c_addr)
+
+def slow_shift_out(data_pin, clock_pin, data):
+  for bit in bin(data).replace('0b','').rjust(8,'0'):
+    wiringpi.digitalWrite(clock_pin,LOW)
+    wiringpi.delay(SLOW_DOWN)
+    wiringpi.digitalWrite(data_pin,int(bit))
+    wiringpi.delay(SLOW_DOWN)
+    wiringpi.digitalWrite(clock_pin,HIGH)
+    wiringpi.delay(SLOW_DOWN)
+
+def lcd_write(dc, data):
+  wiringpi.digitalWrite(PIN_DC, dc)
+  wiringpi.digitalWrite(PIN_SCE, LOW)
+  wiringpi.delay(SLOW_DOWN)
+  #wiringpi.shiftOut(PIN_SDIN, PIN_SCLK, MSBFIRST, data)
+  slow_shift_out(PIN_SDIN, PIN_SCLK, data)
+  wiringpi.digitalWrite(PIN_SCE, HIGH)
+  wiringpi.delay(SLOW_DOWN)
+  #wiringpi.delay(2)
+
+def lcd_initialise():
+  wiringpi.pinMode(PIN_BACKLIGHT,OUTPUT)
+  wiringpi.digitalWrite(PIN_BACKLIGHT, HIGH)
+  wiringpi.pinMode(PIN_SCE, OUTPUT)
+  wiringpi.pinMode(PIN_RESET, OUTPUT)
+  wiringpi.pinMode(PIN_DC, OUTPUT)
+  wiringpi.pinMode(PIN_SDIN, OUTPUT)
+  wiringpi.pinMode(PIN_SCLK, OUTPUT)
+  wiringpi.digitalWrite(PIN_RESET, LOW)
+  wiringpi.delay(SLOW_DOWN)
+  wiringpi.digitalWrite(PIN_RESET, HIGH)
+  wiringpi.delay(SLOW_DOWN)
+  lcd_write(LCD_C, 0x21 )  # LCD Extended Commands.
+  lcd_write(LCD_C, 0xCC )  # Set LCD Vop (Contrast). 
+  lcd_write(LCD_C, 0x04 )  # Set Temp coefficent. //0x04
+  lcd_write(LCD_C, 0x14 )  # LCD bias mode 1:48. //0x13
+  lcd_write(LCD_C, 0x0C )  # LCD in normal mode.
+  lcd_write(LCD_C, 0x20 )
+  lcd_write(LCD_C, 0x0C )
+
+def lcd_clear():
+  for time in range(0, LCD_SEGS):
+    lcd_write(LCD_D, 0x00)
+
+def lcd_fill():
+  for time in range(0, LCD_SEGS):
+    lcd_write(LCD_D, 0xFF)
+
+
+lcd_initialise()
+
+for time in range(0,4):
+  lcd_clear()
+  wiringpi.delay(1000)
+  lcd_fill()
+  wiringpi.delay(1000)
\ No newline at end of file
diff --git a/examples/two-mcp23017.py b/examples/two-mcp23017.py
new file mode 100644
index 0000000..a6a38a0
--- /dev/null
+++ b/examples/two-mcp23017.py
@@ -0,0 +1,18 @@
+# Turns on each pin of an mcp23017 on address 0x20 ( quick2wire IO expander )
+import wiringpi2
+
+pin_base = 65
+i2c_addr = 0x20
+i2c_addr_2 = 0x21
+#pins = [65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80]
+
+wiringpi2.wiringPiSetup()
+wiringpi2.mcp23017Setup(pin_base,i2c_addr)
+wiringpi2.mcp23017Setup(pin_base+16,i2c_addr_2)
+
+#for pin in pins:
+for pin in range(65,96):
+	wiringpi2.pinMode(pin,1)
+	wiringpi2.digitalWrite(pin,1)
+#	wiringpi2.delay(1000)
+#	wiringpi2.digitalWrite(pin,0)
diff --git a/setup.py b/setup.py
index bb6706d..ff987a4 100644
--- a/setup.py
+++ b/setup.py
@@ -31,14 +31,14 @@
 
 setup(
     name = 'wiringpi2',
-    version = '1.0.1',
+    version = '1.0.7',
     author = "Philip Howard",
     author_email = "phil@gadgetoid.com",
     url = 'https://github.com/Gadgetoid/WiringPi2-Python/',
     description = """A python interface to WiringPi 2.0 library which allows for
     easily interfacing with the GPIO pins of the Raspberry Pi. Also supports
     i2c and SPI""",
-    long_description=open('README').read(),
+    long_description=open('README.rst','rt').read(),
     ext_modules = [ _wiringpi2 ],
     py_modules = ["wiringpi2"],
     install_requires=[],
diff --git a/test.py b/test.py
new file mode 100644
index 0000000..95f497e
--- /dev/null
+++ b/test.py
@@ -0,0 +1,4 @@
+import wiringpi2 as wiringpi
+io = wiringpi.GPIO(wiringpi.GPIO.WPI_MODE_PINS)
+print io.digitalRead(1)
+print io.analogRead(1)
diff --git a/wiringpi.i b/wiringpi.i
index 40c1644..1538c38 100644
--- a/wiringpi.i
+++ b/wiringpi.i
@@ -25,27 +25,34 @@
 
 %apply unsigned char { uint8_t };
 
+// Core wiringPi functions
+
 extern int  wiringPiSetup       (void) ;
 extern int  wiringPiSetupSys    (void) ;
 extern int  wiringPiSetupGpio   (void) ;
+extern int  wiringPiSetupPhys   (void) ;
 
 extern int  piFaceSetup (int pinbase) ;
 
+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 int  wpiPinToGpio        (int wpiPin) ;
-
-extern void pinMode           (int pin, int mode) ;
-extern int  getAlt            (int pin) ;
-extern void pullUpDnControl   (int pin, int pud) ;
-extern void digitalWrite      (int pin, int value) ;
-extern void digitalWriteByte  (int value) ;
-extern void gpioClockSet      (int pin, int freq) ;
-extern void pwmWrite          (int pin, int value) ;
-extern void setPadDrive       (int group, int value) ;
-extern int  digitalRead       (int pin) ;
-extern void pwmSetMode        (int mode) ;
-extern void pwmSetRange       (unsigned int range) ;
-extern void pwmSetClock       (int divisor) ;
+extern void setPadDrive         (int group, int value) ;
+extern int  getAlt              (int pin) ;
+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
 
@@ -58,6 +65,10 @@
 extern void piLock         (int key) ;
 extern void piUnlock       (int key) ;
 
+// Schedulling priority
+
+extern int piHiPri (int pri) ;
+
 // Extras from arduino land
 
 extern void         delay             (unsigned int howLong) ;
@@ -125,3 +136,16 @@
 extern int mcp23008Setup (int pinBase, 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,
+    int d0, int d1, int d2, int d3, int d4, int d5, int d6, int d7) ;
+
+%include "wiringpi2-class.py"
diff --git a/wiringpi2-class.py b/wiringpi2-class.py
new file mode 100644
index 0000000..822c18c
--- /dev/null
+++ b/wiringpi2-class.py
@@ -0,0 +1,162 @@
+%pythoncode %{
+class nes(object):
+  def setupNesJoystick(self,*args):
+    return setupNesJoystick(*args)
+  def readNesJoystick(self,*args):
+    return readNesJoystick(*args)
+
+class Serial(object):
+  device = '/dev/ttyAMA0'
+  baud = 9600
+  serial_id = 0
+  def printf(self,*args):
+    return serialPrintf(self.serial_id,*args)
+  def dataAvail(self,*args):
+    return serialDataAvail(self.serial_id,*args)
+  def getchar(self,*args):
+    return serialGetchar(self.serial_id,*args)
+  def putchar(self,*args):
+    return serialPutchar(self.serial_id,*args)
+  def puts(self,*args):
+    return serialPuts(self.serial_id,*args)
+  def __init__(self,device,baud):
+    self.device = device
+    self.baud = baud
+    self.serial_id = serialOpen(self.device,self.baud)
+  def __del__(self):
+    serialClose(self.serial_id)
+
+class GPIO(object):
+  WPI_MODE_PINS = 0
+  WPI_MODE_GPIO = 1
+  WPI_MODE_GPIO_SYS = 2
+  WPI_MODE_PHYS = 3
+  WPI_MODE_PIFACE = 4
+  WPI_MODE_UNINITIALISED = -1
+
+  INPUT = 0
+  OUTPUT = 1
+  PWM_OUTPUT = 2
+  GPIO_CLOCK = 3
+
+  LOW = 0
+  HIGH = 1
+
+  PUD_OFF = 0
+  PUD_DOWN = 1
+  PUD_UP = 2
+
+  PWM_MODE_MS = 0
+  PWM_MODE_BAL = 1
+
+  INT_EDGE_SETUP = 0
+  INT_EDGE_FALLING = 1
+  INT_EDGE_RISING = 2
+  INT_EDGE_BOTH = 3
+
+  LSBFIRST = 0
+  MSBFIRST = 1
+
+  MODE = 0
+  def __init__(self,pinmode=0):
+    self.MODE=pinmode
+    if pinmode==self.WPI_MODE_PINS:
+      wiringPiSetup()
+    if pinmode==self.WPI_MODE_GPIO:
+      wiringPiSetupGpio()
+    if pinmode==self.WPI_MODE_GPIO_SYS:
+      wiringPiSetupSys()
+    if pinmode==self.WPI_MODE_PHYS:
+      wiringPiSetupPhys()
+    if pinmode==self.WPI_MODE_PIFACE:
+      wiringPiSetupPiFace()
+
+  def delay(self,*args):
+    delay(*args)
+  def delayMicroseconds(self,*args):
+    delayMicroseconds(*args)
+  def millis(self):
+    return millis()
+  def micros(self):
+    return micros()
+
+  def piHiPri(self,*args):
+    return piHiPri(*args)
+
+  def piBoardRev(self):
+    return piBoardRev()
+  def wpiPinToGpio(self,*args):
+    return wpiPinToGpio(*args)
+  def setPadDrive(self,*args):
+    return setPadDrive(*args)
+  def getAlt(self,*args):
+    return getAlt(*args)
+  def digitalWriteByte(self,*args):
+    return digitalWriteByte(*args)
+
+  def pwmSetMode(self,*args):
+    pwmSetMode(*args)
+  def pwmSetRange(self,*args):
+    pwmSetRange(*args)
+  def pwmSetClock(self,*args):
+    pwmSetClock(*args)
+  def gpioClockSet(self,*args):
+    gpioClockSet(*args)
+  def pwmWrite(self,*args):
+    pwmWrite(*args)
+
+  def pinMode(self,*args):
+    pinMode(*args)
+
+  def digitalWrite(self,*args):
+    digitalWrite(*args)
+  def digitalRead(self,*args):
+    return digitalRead(*args)
+  def digitalWriteByte(self,*args):
+    digitalWriteByte(*args)
+
+  def analogWrite(self,*args):
+    analogWrite(*args)
+  def analogRead(self,*args):
+    return analogRead(*args)
+
+  def shiftOut(self,*args):
+    shiftOut(*args)
+  def shiftIn(self,*args):
+    return shiftIn(*args)
+
+  def pullUpDnControl(self,*args):
+    return pullUpDnControl(*args)
+
+  def waitForInterrupt(self,*args):
+    return waitForInterrupt(*args)
+  def wiringPiISR(self,*args):
+    return wiringPiISR(*args)
+
+  def softPwmCreate(self,*args):
+    return softPwmCreate(*args)
+  def softPwmWrite(self,*args):
+    return sofPwmWrite(*args)
+
+  def softToneCreate(self,*args):
+    return softToneCreate(*args)
+  def softToneWrite(self,*args):
+    return softToneWrite(*args)
+
+  def lcdHome(self,*args):
+    return lcdHome(self,*args)
+  def lcdCLear(self,*args):
+    return lcdClear(self,*args)
+  def lcdSendCommand(self,*args):
+    return lcdSendCommand(self,*args)
+  def lcdPosition(self,*args):
+    return lcdPosition(self,*args)
+  def lcdPutchar(self,*args):
+    return lcdPutchar(self,*args)
+  def lcdPuts(self,*args):
+    return lcdPuts(self,*args)
+  def lcdPrintf(self,*args):
+    return lcdPrintf(self,*args)
+  def lcdInit(self,*args):
+    return lcdInit(self,*args)
+%}
diff --git a/wiringpi2.py b/wiringpi2.py
index 5a9752d..2dad3e1 100644
--- a/wiringpi2.py
+++ b/wiringpi2.py
@@ -80,10 +80,42 @@
   return _wiringpi2.wiringPiSetupGpio()
 wiringPiSetupGpio = _wiringpi2.wiringPiSetupGpio
 
+def wiringPiSetupPhys():
+  return _wiringpi2.wiringPiSetupPhys()
+wiringPiSetupPhys = _wiringpi2.wiringPiSetupPhys
+
 def piFaceSetup(*args):
   return _wiringpi2.piFaceSetup(*args)
 piFaceSetup = _wiringpi2.piFaceSetup
 
+def pinMode(*args):
+  return _wiringpi2.pinMode(*args)
+pinMode = _wiringpi2.pinMode
+
+def pullUpDnControl(*args):
+  return _wiringpi2.pullUpDnControl(*args)
+pullUpDnControl = _wiringpi2.pullUpDnControl
+
+def digitalRead(*args):
+  return _wiringpi2.digitalRead(*args)
+digitalRead = _wiringpi2.digitalRead
+
+def digitalWrite(*args):
+  return _wiringpi2.digitalWrite(*args)
+digitalWrite = _wiringpi2.digitalWrite
+
+def pwmWrite(*args):
+  return _wiringpi2.pwmWrite(*args)
+pwmWrite = _wiringpi2.pwmWrite
+
+def analogRead(*args):
+  return _wiringpi2.analogRead(*args)
+analogRead = _wiringpi2.analogRead
+
+def analogWrite(*args):
+  return _wiringpi2.analogWrite(*args)
+analogWrite = _wiringpi2.analogWrite
+
 def piBoardRev():
   return _wiringpi2.piBoardRev()
 piBoardRev = _wiringpi2.piBoardRev
@@ -92,42 +124,18 @@
   return _wiringpi2.wpiPinToGpio(*args)
 wpiPinToGpio = _wiringpi2.wpiPinToGpio
 
-def pinMode(*args):
-  return _wiringpi2.pinMode(*args)
-pinMode = _wiringpi2.pinMode
+def setPadDrive(*args):
+  return _wiringpi2.setPadDrive(*args)
+setPadDrive = _wiringpi2.setPadDrive
 
 def getAlt(*args):
   return _wiringpi2.getAlt(*args)
 getAlt = _wiringpi2.getAlt
 
-def pullUpDnControl(*args):
-  return _wiringpi2.pullUpDnControl(*args)
-pullUpDnControl = _wiringpi2.pullUpDnControl
-
-def digitalWrite(*args):
-  return _wiringpi2.digitalWrite(*args)
-digitalWrite = _wiringpi2.digitalWrite
-
 def digitalWriteByte(*args):
   return _wiringpi2.digitalWriteByte(*args)
 digitalWriteByte = _wiringpi2.digitalWriteByte
 
-def gpioClockSet(*args):
-  return _wiringpi2.gpioClockSet(*args)
-gpioClockSet = _wiringpi2.gpioClockSet
-
-def pwmWrite(*args):
-  return _wiringpi2.pwmWrite(*args)
-pwmWrite = _wiringpi2.pwmWrite
-
-def setPadDrive(*args):
-  return _wiringpi2.setPadDrive(*args)
-setPadDrive = _wiringpi2.setPadDrive
-
-def digitalRead(*args):
-  return _wiringpi2.digitalRead(*args)
-digitalRead = _wiringpi2.digitalRead
-
 def pwmSetMode(*args):
   return _wiringpi2.pwmSetMode(*args)
 pwmSetMode = _wiringpi2.pwmSetMode
@@ -140,6 +148,10 @@
   return _wiringpi2.pwmSetClock(*args)
 pwmSetClock = _wiringpi2.pwmSetClock
 
+def gpioClockSet(*args):
+  return _wiringpi2.gpioClockSet(*args)
+gpioClockSet = _wiringpi2.gpioClockSet
+
 def wiringPiISR(*args):
   return _wiringpi2.wiringPiISR(*args)
 wiringPiISR = _wiringpi2.wiringPiISR
@@ -156,6 +168,10 @@
   return _wiringpi2.piUnlock(*args)
 piUnlock = _wiringpi2.piUnlock
 
+def piHiPri(*args):
+  return _wiringpi2.piHiPri(*args)
+piHiPri = _wiringpi2.piHiPri
+
 def delay(*args):
   return _wiringpi2.delay(*args)
 delay = _wiringpi2.delay
@@ -291,6 +307,199 @@
 def sr595Setup(*args):
   return _wiringpi2.sr595Setup(*args)
 sr595Setup = _wiringpi2.sr595Setup
+
+def lcdHome(*args):
+  return _wiringpi2.lcdHome(*args)
+lcdHome = _wiringpi2.lcdHome
+
+def lcdClear(*args):
+  return _wiringpi2.lcdClear(*args)
+lcdClear = _wiringpi2.lcdClear
+
+def lcdSendCommand(*args):
+  return _wiringpi2.lcdSendCommand(*args)
+lcdSendCommand = _wiringpi2.lcdSendCommand
+
+def lcdPosition(*args):
+  return _wiringpi2.lcdPosition(*args)
+lcdPosition = _wiringpi2.lcdPosition
+
+def lcdPutchar(*args):
+  return _wiringpi2.lcdPutchar(*args)
+lcdPutchar = _wiringpi2.lcdPutchar
+
+def lcdPuts(*args):
+  return _wiringpi2.lcdPuts(*args)
+lcdPuts = _wiringpi2.lcdPuts
+
+def lcdPrintf(*args):
+  return _wiringpi2.lcdPrintf(*args)
+lcdPrintf = _wiringpi2.lcdPrintf
+
+def lcdInit(*args):
+  return _wiringpi2.lcdInit(*args)
+lcdInit = _wiringpi2.lcdInit
+class nes(object):
+  def setupNesJoystick(self,*args):
+    return setupNesJoystick(*args)
+  def readNesJoystick(self,*args):
+    return readNesJoystick(*args)
+
+class Serial(object):
+  device = '/dev/ttyAMA0'
+  baud = 9600
+  serial_id = 0
+  def printf(self,*args):
+    return serialPrintf(self.serial_id,*args)
+  def dataAvail(self,*args):
+    return serialDataAvail(self.serial_id,*args)
+  def getchar(self,*args):
+    return serialGetchar(self.serial_id,*args)
+  def putchar(self,*args):
+    return serialPutchar(self.serial_id,*args)
+  def puts(self,*args):
+    return serialPuts(self.serial_id,*args)
+  def __init__(self,device,baud):
+    self.device = device
+    self.baud = baud
+    self.serial_id = serialOpen(self.device,self.baud)
+  def __del__(self):
+    serialClose(self.serial_id)
+
+class GPIO(object):
+  WPI_MODE_PINS = 0
+  WPI_MODE_GPIO = 1
+  WPI_MODE_GPIO_SYS = 2
+  WPI_MODE_PHYS = 3
+  WPI_MODE_PIFACE = 4
+  WPI_MODE_UNINITIALISED = -1
+
+  INPUT = 0
+  OUTPUT = 1
+  PWM_OUTPUT = 2
+  GPIO_CLOCK = 3
+
+  LOW = 0
+  HIGH = 1
+
+  PUD_OFF = 0
+  PUD_DOWN = 1
+  PUD_UP = 2
+
+  PWM_MODE_MS = 0
+  PWM_MODE_BAL = 1
+
+  INT_EDGE_SETUP = 0
+  INT_EDGE_FALLING = 1
+  INT_EDGE_RISING = 2
+  INT_EDGE_BOTH = 3
+
+  LSBFIRST = 0
+  MSBFIRST = 1
+
+  MODE = 0
+  def __init__(self,pinmode=0):
+    self.MODE=pinmode
+    if pinmode==self.WPI_MODE_PINS:
+      wiringPiSetup()
+    if pinmode==self.WPI_MODE_GPIO:
+      wiringPiSetupGpio()
+    if pinmode==self.WPI_MODE_GPIO_SYS:
+      wiringPiSetupSys()
+    if pinmode==self.WPI_MODE_PHYS:
+      wiringPiSetupPhys()
+    if pinmode==self.WPI_MODE_PIFACE:
+      wiringPiSetupPiFace()
+
+  def delay(self,*args):
+    delay(*args)
+  def delayMicroseconds(self,*args):
+    delayMicroseconds(*args)
+  def millis(self):
+    return millis()
+  def micros(self):
+    return micros()
+
+  def piHiPri(self,*args):
+    return piHiPri(*args)
+
+  def piBoardRev(self):
+    return piBoardRev()
+  def wpiPinToGpio(self,*args):
+    return wpiPinToGpio(*args)
+  def setPadDrive(self,*args):
+    return setPadDrive(*args)
+  def getAlt(self,*args):
+    return getAlt(*args)
+  def digitalWriteByte(self,*args):
+    return digitalWriteByte(*args)
+
+  def pwmSetMode(self,*args):
+    pwmSetMode(*args)
+  def pwmSetRange(self,*args):
+    pwmSetRange(*args)
+  def pwmSetClock(self,*args):
+    pwmSetClock(*args)
+  def gpioClockSet(self,*args):
+    gpioClockSet(*args)
+  def pwmWrite(self,*args):
+    pwmWrite(*args)
+
+  def pinMode(self,*args):
+    pinMode(*args)
+
+  def digitalWrite(self,*args):
+    digitalWrite(*args)
+  def digitalRead(self,*args):
+    return digitalRead(*args)
+  def digitalWriteByte(self,*args):
+    digitalWriteByte(*args)
+
+  def analogWrite(self,*args):
+    analogWrite(*args)
+  def analogRead(self,*args):
+    return analogRead(*args)
+
+  def shiftOut(self,*args):
+    shiftOut(*args)
+  def shiftIn(self,*args):
+    return shiftIn(*args)
+
+  def pullUpDnControl(self,*args):
+    return pullUpDnControl(*args)
+
+  def waitForInterrupt(self,*args):
+    return waitForInterrupt(*args)
+  def wiringPiISR(self,*args):
+    return wiringPiISR(*args)
+
+  def softPwmCreate(self,*args):
+    return softPwmCreate(*args)
+  def softPwmWrite(self,*args):
+    return sofPwmWrite(*args)
+
+  def softToneCreate(self,*args):
+    return softToneCreate(*args)
+  def softToneWrite(self,*args):
+    return softToneWrite(*args)
+
+  def lcdHome(self,*args):
+    return lcdHome(self,*args)
+  def lcdCLear(self,*args):
+    return lcdClear(self,*args)
+  def lcdSendCommand(self,*args):
+    return lcdSendCommand(self,*args)
+  def lcdPosition(self,*args):
+    return lcdPosition(self,*args)
+  def lcdPutchar(self,*args):
+    return lcdPutchar(self,*args)
+  def lcdPuts(self,*args):
+    return lcdPuts(self,*args)
+  def lcdPrintf(self,*args):
+    return lcdPrintf(self,*args)
+  def lcdInit(self,*args):
+    return lcdInit(self,*args)
+
 # This file is compatible with both classic and new-style classes.
 
 cvar = _wiringpi2.cvar
diff --git a/wiringpi2.pyc b/wiringpi2.pyc
new file mode 100644
index 0000000..6f3ae5c
--- /dev/null
+++ b/wiringpi2.pyc
Binary files differ
diff --git a/wiringpi_wrap.c b/wiringpi_wrap.c
index bce9851..063f987 100644
--- a/wiringpi_wrap.c
+++ b/wiringpi_wrap.c
@@ -3374,6 +3374,19 @@
 }
 
 
+SWIGINTERN PyObject *_wrap_wiringPiSetupPhys(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":wiringPiSetupPhys")) SWIG_fail;
+  result = (int)wiringPiSetupPhys();
+  resultobj = SWIG_From_int((int)(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_piFaceSetup(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   int arg1 ;
@@ -3396,6 +3409,200 @@
 }
 
 
+SWIGINTERN PyObject *_wrap_pinMode(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int arg2 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:pinMode",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "pinMode" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = (int)(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "pinMode" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = (int)(val2);
+  pinMode(arg1,arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_pullUpDnControl(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int arg2 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:pullUpDnControl",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "pullUpDnControl" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = (int)(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "pullUpDnControl" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = (int)(val2);
+  pullUpDnControl(arg1,arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_digitalRead(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:digitalRead",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "digitalRead" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = (int)(val1);
+  result = (int)digitalRead(arg1);
+  resultobj = SWIG_From_int((int)(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_digitalWrite(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int arg2 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:digitalWrite",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "digitalWrite" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = (int)(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "digitalWrite" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = (int)(val2);
+  digitalWrite(arg1,arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_pwmWrite(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int arg2 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:pwmWrite",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "pwmWrite" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = (int)(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "pwmWrite" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = (int)(val2);
+  pwmWrite(arg1,arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_analogRead(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:analogRead",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "analogRead" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = (int)(val1);
+  result = (int)analogRead(arg1);
+  resultobj = SWIG_From_int((int)(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_analogWrite(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int arg2 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:analogWrite",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "analogWrite" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = (int)(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "analogWrite" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = (int)(val2);
+  analogWrite(arg1,arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_piBoardRev(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   int result;
@@ -3431,199 +3638,6 @@
 }
 
 
-SWIGINTERN PyObject *_wrap_pinMode(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  int arg1 ;
-  int arg2 ;
-  int val1 ;
-  int ecode1 = 0 ;
-  int val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:pinMode",&obj0,&obj1)) SWIG_fail;
-  ecode1 = SWIG_AsVal_int(obj0, &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "pinMode" "', argument " "1"" of type '" "int""'");
-  } 
-  arg1 = (int)(val1);
-  ecode2 = SWIG_AsVal_int(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "pinMode" "', argument " "2"" of type '" "int""'");
-  } 
-  arg2 = (int)(val2);
-  pinMode(arg1,arg2);
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_getAlt(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  int arg1 ;
-  int val1 ;
-  int ecode1 = 0 ;
-  PyObject * obj0 = 0 ;
-  int result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:getAlt",&obj0)) SWIG_fail;
-  ecode1 = SWIG_AsVal_int(obj0, &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "getAlt" "', argument " "1"" of type '" "int""'");
-  } 
-  arg1 = (int)(val1);
-  result = (int)getAlt(arg1);
-  resultobj = SWIG_From_int((int)(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_pullUpDnControl(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  int arg1 ;
-  int arg2 ;
-  int val1 ;
-  int ecode1 = 0 ;
-  int val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:pullUpDnControl",&obj0,&obj1)) SWIG_fail;
-  ecode1 = SWIG_AsVal_int(obj0, &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "pullUpDnControl" "', argument " "1"" of type '" "int""'");
-  } 
-  arg1 = (int)(val1);
-  ecode2 = SWIG_AsVal_int(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "pullUpDnControl" "', argument " "2"" of type '" "int""'");
-  } 
-  arg2 = (int)(val2);
-  pullUpDnControl(arg1,arg2);
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_digitalWrite(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  int arg1 ;
-  int arg2 ;
-  int val1 ;
-  int ecode1 = 0 ;
-  int val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:digitalWrite",&obj0,&obj1)) SWIG_fail;
-  ecode1 = SWIG_AsVal_int(obj0, &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "digitalWrite" "', argument " "1"" of type '" "int""'");
-  } 
-  arg1 = (int)(val1);
-  ecode2 = SWIG_AsVal_int(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "digitalWrite" "', argument " "2"" of type '" "int""'");
-  } 
-  arg2 = (int)(val2);
-  digitalWrite(arg1,arg2);
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_digitalWriteByte(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  int arg1 ;
-  int val1 ;
-  int ecode1 = 0 ;
-  PyObject * obj0 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:digitalWriteByte",&obj0)) SWIG_fail;
-  ecode1 = SWIG_AsVal_int(obj0, &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "digitalWriteByte" "', argument " "1"" of type '" "int""'");
-  } 
-  arg1 = (int)(val1);
-  digitalWriteByte(arg1);
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_gpioClockSet(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  int arg1 ;
-  int arg2 ;
-  int val1 ;
-  int ecode1 = 0 ;
-  int val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:gpioClockSet",&obj0,&obj1)) SWIG_fail;
-  ecode1 = SWIG_AsVal_int(obj0, &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "gpioClockSet" "', argument " "1"" of type '" "int""'");
-  } 
-  arg1 = (int)(val1);
-  ecode2 = SWIG_AsVal_int(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "gpioClockSet" "', argument " "2"" of type '" "int""'");
-  } 
-  arg2 = (int)(val2);
-  gpioClockSet(arg1,arg2);
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_pwmWrite(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  int arg1 ;
-  int arg2 ;
-  int val1 ;
-  int ecode1 = 0 ;
-  int val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:pwmWrite",&obj0,&obj1)) SWIG_fail;
-  ecode1 = SWIG_AsVal_int(obj0, &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "pwmWrite" "', argument " "1"" of type '" "int""'");
-  } 
-  arg1 = (int)(val1);
-  ecode2 = SWIG_AsVal_int(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "pwmWrite" "', argument " "2"" of type '" "int""'");
-  } 
-  arg2 = (int)(val2);
-  pwmWrite(arg1,arg2);
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_setPadDrive(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   int arg1 ;
@@ -3654,7 +3668,7 @@
 }
 
 
-SWIGINTERN PyObject *_wrap_digitalRead(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_getAlt(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   int arg1 ;
   int val1 ;
@@ -3662,13 +3676,13 @@
   PyObject * obj0 = 0 ;
   int result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:digitalRead",&obj0)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"O:getAlt",&obj0)) SWIG_fail;
   ecode1 = SWIG_AsVal_int(obj0, &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "digitalRead" "', argument " "1"" of type '" "int""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "getAlt" "', argument " "1"" of type '" "int""'");
   } 
   arg1 = (int)(val1);
-  result = (int)digitalRead(arg1);
+  result = (int)getAlt(arg1);
   resultobj = SWIG_From_int((int)(result));
   return resultobj;
 fail:
@@ -3676,6 +3690,27 @@
 }
 
 
+SWIGINTERN PyObject *_wrap_digitalWriteByte(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:digitalWriteByte",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "digitalWriteByte" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = (int)(val1);
+  digitalWriteByte(arg1);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_pwmSetMode(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   int arg1 ;
@@ -3739,6 +3774,36 @@
 }
 
 
+SWIGINTERN PyObject *_wrap_gpioClockSet(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int arg2 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:gpioClockSet",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "gpioClockSet" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = (int)(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "gpioClockSet" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = (int)(val2);
+  gpioClockSet(arg1,arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN int Swig_var_waitForInterrupt_set(PyObject *_val) {
   {
     int res = SWIG_ConvertFunctionPtr(_val, (void**)(&waitForInterrupt), SWIGTYPE_p_f_int_int__int);
@@ -3862,6 +3927,28 @@
 }
 
 
+SWIGINTERN PyObject *_wrap_piHiPri(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:piHiPri",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "piHiPri" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = (int)(val1);
+  result = (int)piHiPri(arg1);
+  resultobj = SWIG_From_int((int)(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_delay(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   unsigned int arg1 ;
@@ -4963,30 +5050,386 @@
 }
 
 
+SWIGINTERN PyObject *_wrap_lcdHome(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:lcdHome",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "lcdHome" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = (int)(val1);
+  lcdHome(arg1);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_lcdClear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:lcdClear",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "lcdClear" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = (int)(val1);
+  lcdClear(arg1);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_lcdSendCommand(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  uint8_t arg2 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  unsigned char val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:lcdSendCommand",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "lcdSendCommand" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = (int)(val1);
+  ecode2 = SWIG_AsVal_unsigned_SS_char(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "lcdSendCommand" "', argument " "2"" of type '" "uint8_t""'");
+  } 
+  arg2 = (uint8_t)(val2);
+  lcdSendCommand(arg1,arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_lcdPosition(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int arg2 ;
+  int arg3 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:lcdPosition",&obj0,&obj1,&obj2)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "lcdPosition" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = (int)(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "lcdPosition" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = (int)(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "lcdPosition" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = (int)(val3);
+  lcdPosition(arg1,arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_lcdPutchar(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  uint8_t arg2 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  unsigned char val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:lcdPutchar",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "lcdPutchar" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = (int)(val1);
+  ecode2 = SWIG_AsVal_unsigned_SS_char(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "lcdPutchar" "', argument " "2"" of type '" "uint8_t""'");
+  } 
+  arg2 = (uint8_t)(val2);
+  lcdPutchar(arg1,arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_lcdPuts(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  char *arg2 = (char *) 0 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int res2 ;
+  char *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:lcdPuts",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "lcdPuts" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = (int)(val1);
+  res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "lcdPuts" "', argument " "2"" of type '" "char *""'");
+  }
+  arg2 = (char *)(buf2);
+  lcdPuts(arg1,arg2);
+  resultobj = SWIG_Py_Void();
+  if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_lcdPrintf__varargs__(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *varargs) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  char *arg2 = (char *) 0 ;
+  void *arg3 = 0 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int res2 ;
+  char *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:lcdPrintf",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "lcdPrintf" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = (int)(val1);
+  res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "lcdPrintf" "', argument " "2"" of type '" "char *""'");
+  }
+  arg2 = (char *)(buf2);
+  lcdPrintf(arg1,arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_lcdPrintf(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj;
+  PyObject *varargs;
+  PyObject *newargs;
+  
+  newargs = PyTuple_GetSlice(args,0,2);
+  varargs = PyTuple_GetSlice(args,2,PyTuple_Size(args)+1);
+  resultobj = _wrap_lcdPrintf__varargs__(NULL,newargs,varargs);
+  Py_XDECREF(newargs);
+  Py_XDECREF(varargs);
+  return resultobj;
+}
+
+
+SWIGINTERN PyObject *_wrap_lcdInit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int arg2 ;
+  int arg3 ;
+  int arg4 ;
+  int arg5 ;
+  int arg6 ;
+  int arg7 ;
+  int arg8 ;
+  int arg9 ;
+  int arg10 ;
+  int arg11 ;
+  int arg12 ;
+  int arg13 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  int val7 ;
+  int ecode7 = 0 ;
+  int val8 ;
+  int ecode8 = 0 ;
+  int val9 ;
+  int ecode9 = 0 ;
+  int val10 ;
+  int ecode10 = 0 ;
+  int val11 ;
+  int ecode11 = 0 ;
+  int val12 ;
+  int ecode12 = 0 ;
+  int val13 ;
+  int ecode13 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  PyObject * obj8 = 0 ;
+  PyObject * obj9 = 0 ;
+  PyObject * obj10 = 0 ;
+  PyObject * obj11 = 0 ;
+  PyObject * obj12 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOOOOOO:lcdInit",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9,&obj10,&obj11,&obj12)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "lcdInit" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = (int)(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "lcdInit" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = (int)(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "lcdInit" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = (int)(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "lcdInit" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = (int)(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "lcdInit" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = (int)(val5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "lcdInit" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = (int)(val6);
+  ecode7 = SWIG_AsVal_int(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "lcdInit" "', argument " "7"" of type '" "int""'");
+  } 
+  arg7 = (int)(val7);
+  ecode8 = SWIG_AsVal_int(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "lcdInit" "', argument " "8"" of type '" "int""'");
+  } 
+  arg8 = (int)(val8);
+  ecode9 = SWIG_AsVal_int(obj8, &val9);
+  if (!SWIG_IsOK(ecode9)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "lcdInit" "', argument " "9"" of type '" "int""'");
+  } 
+  arg9 = (int)(val9);
+  ecode10 = SWIG_AsVal_int(obj9, &val10);
+  if (!SWIG_IsOK(ecode10)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "lcdInit" "', argument " "10"" of type '" "int""'");
+  } 
+  arg10 = (int)(val10);
+  ecode11 = SWIG_AsVal_int(obj10, &val11);
+  if (!SWIG_IsOK(ecode11)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode11), "in method '" "lcdInit" "', argument " "11"" of type '" "int""'");
+  } 
+  arg11 = (int)(val11);
+  ecode12 = SWIG_AsVal_int(obj11, &val12);
+  if (!SWIG_IsOK(ecode12)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode12), "in method '" "lcdInit" "', argument " "12"" of type '" "int""'");
+  } 
+  arg12 = (int)(val12);
+  ecode13 = SWIG_AsVal_int(obj12, &val13);
+  if (!SWIG_IsOK(ecode13)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode13), "in method '" "lcdInit" "', argument " "13"" of type '" "int""'");
+  } 
+  arg13 = (int)(val13);
+  result = (int)lcdInit(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13);
+  resultobj = SWIG_From_int((int)(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 static PyMethodDef SwigMethods[] = {
 	 { (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL},
 	 { (char *)"wiringPiSetup", _wrap_wiringPiSetup, METH_VARARGS, NULL},
 	 { (char *)"wiringPiSetupSys", _wrap_wiringPiSetupSys, METH_VARARGS, NULL},
 	 { (char *)"wiringPiSetupGpio", _wrap_wiringPiSetupGpio, METH_VARARGS, NULL},
+	 { (char *)"wiringPiSetupPhys", _wrap_wiringPiSetupPhys, METH_VARARGS, NULL},
 	 { (char *)"piFaceSetup", _wrap_piFaceSetup, METH_VARARGS, NULL},
+	 { (char *)"pinMode", _wrap_pinMode, METH_VARARGS, NULL},
+	 { (char *)"pullUpDnControl", _wrap_pullUpDnControl, METH_VARARGS, NULL},
+	 { (char *)"digitalRead", _wrap_digitalRead, METH_VARARGS, NULL},
+	 { (char *)"digitalWrite", _wrap_digitalWrite, METH_VARARGS, NULL},
+	 { (char *)"pwmWrite", _wrap_pwmWrite, METH_VARARGS, NULL},
+	 { (char *)"analogRead", _wrap_analogRead, METH_VARARGS, NULL},
+	 { (char *)"analogWrite", _wrap_analogWrite, METH_VARARGS, NULL},
 	 { (char *)"piBoardRev", _wrap_piBoardRev, METH_VARARGS, NULL},
 	 { (char *)"wpiPinToGpio", _wrap_wpiPinToGpio, METH_VARARGS, NULL},
-	 { (char *)"pinMode", _wrap_pinMode, METH_VARARGS, NULL},
-	 { (char *)"getAlt", _wrap_getAlt, METH_VARARGS, NULL},
-	 { (char *)"pullUpDnControl", _wrap_pullUpDnControl, METH_VARARGS, NULL},
-	 { (char *)"digitalWrite", _wrap_digitalWrite, METH_VARARGS, NULL},
-	 { (char *)"digitalWriteByte", _wrap_digitalWriteByte, METH_VARARGS, NULL},
-	 { (char *)"gpioClockSet", _wrap_gpioClockSet, METH_VARARGS, NULL},
-	 { (char *)"pwmWrite", _wrap_pwmWrite, METH_VARARGS, NULL},
 	 { (char *)"setPadDrive", _wrap_setPadDrive, METH_VARARGS, NULL},
-	 { (char *)"digitalRead", _wrap_digitalRead, METH_VARARGS, NULL},
+	 { (char *)"getAlt", _wrap_getAlt, METH_VARARGS, NULL},
+	 { (char *)"digitalWriteByte", _wrap_digitalWriteByte, METH_VARARGS, NULL},
 	 { (char *)"pwmSetMode", _wrap_pwmSetMode, METH_VARARGS, NULL},
 	 { (char *)"pwmSetRange", _wrap_pwmSetRange, METH_VARARGS, NULL},
 	 { (char *)"pwmSetClock", _wrap_pwmSetClock, METH_VARARGS, NULL},
+	 { (char *)"gpioClockSet", _wrap_gpioClockSet, METH_VARARGS, NULL},
 	 { (char *)"wiringPiISR", _wrap_wiringPiISR, METH_VARARGS, NULL},
 	 { (char *)"piThreadCreate", _wrap_piThreadCreate, METH_VARARGS, NULL},
 	 { (char *)"piLock", _wrap_piLock, METH_VARARGS, NULL},
 	 { (char *)"piUnlock", _wrap_piUnlock, METH_VARARGS, NULL},
+	 { (char *)"piHiPri", _wrap_piHiPri, METH_VARARGS, NULL},
 	 { (char *)"delay", _wrap_delay, METH_VARARGS, NULL},
 	 { (char *)"delayMicroseconds", _wrap_delayMicroseconds, METH_VARARGS, NULL},
 	 { (char *)"millis", _wrap_millis, METH_VARARGS, NULL},
@@ -5021,6 +5464,14 @@
 	 { (char *)"mcp23s08Setup", _wrap_mcp23s08Setup, METH_VARARGS, NULL},
 	 { (char *)"mcp23008Setup", _wrap_mcp23008Setup, METH_VARARGS, NULL},
 	 { (char *)"sr595Setup", _wrap_sr595Setup, METH_VARARGS, NULL},
+	 { (char *)"lcdHome", _wrap_lcdHome, METH_VARARGS, NULL},
+	 { (char *)"lcdClear", _wrap_lcdClear, METH_VARARGS, NULL},
+	 { (char *)"lcdSendCommand", _wrap_lcdSendCommand, METH_VARARGS, NULL},
+	 { (char *)"lcdPosition", _wrap_lcdPosition, METH_VARARGS, NULL},
+	 { (char *)"lcdPutchar", _wrap_lcdPutchar, METH_VARARGS, NULL},
+	 { (char *)"lcdPuts", _wrap_lcdPuts, METH_VARARGS, NULL},
+	 { (char *)"lcdPrintf", _wrap_lcdPrintf, METH_VARARGS, NULL},
+	 { (char *)"lcdInit", _wrap_lcdInit, METH_VARARGS, NULL},
 	 { NULL, NULL, 0, NULL }
 };