From fa09d1898de31ac03730ca0787c903e8e9c92d27 Mon Sep 17 00:00:00 2001 From: Philip Howard Date: Mon, 1 Apr 2013 21:11:00 +0000 Subject: [PATCH] Various bug fixes --- CHANGES.txt | 8 + MANIFEST.in | 1 + README.rst | 75 +++++ WiringPi/wiringPi/wiringPi.c | 2 +- build.sh | 3 + examples/ladder-board.py | 27 ++ examples/n5510-mcp23017.py | 95 ++++++ examples/two-mcp23017.py | 18 ++ setup.py | 4 +- test.py | 4 + wiringpi.i | 50 ++- wiringpi2-class.py | 162 ++++++++++ wiringpi2.py | 255 +++++++++++++-- wiringpi2.pyc | Bin 0 -> 25869 bytes wiringpi_wrap.c | 595 ++++++++++++++++++++++++++++++----- 15 files changed, 1188 insertions(+), 111 deletions(-) create mode 100644 CHANGES.txt create mode 100644 README.rst create mode 100755 build.sh create mode 100644 examples/ladder-board.py create mode 100644 examples/n5510-mcp23017.py create mode 100644 examples/two-mcp23017.py create mode 100644 test.py create mode 100644 wiringpi2-class.py create mode 100644 wiringpi2.pyc 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 @@ void digitalWrite (int pin, int value) } 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 @@ _wiringpi2 = Extension( 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 int piThreadCreate (void *(*fn)(void *)) ; 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 mcp23s08Setup (int pinBase, int spiPort, int devId) ; 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,53 +80,61 @@ def wiringPiSetupGpio(): 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 piBoardRev(): - return _wiringpi2.piBoardRev() -piBoardRev = _wiringpi2.piBoardRev - -def wpiPinToGpio(*args): - return _wiringpi2.wpiPinToGpio(*args) -wpiPinToGpio = _wiringpi2.wpiPinToGpio - def pinMode(*args): return _wiringpi2.pinMode(*args) pinMode = _wiringpi2.pinMode -def getAlt(*args): - return _wiringpi2.getAlt(*args) -getAlt = _wiringpi2.getAlt - 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 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 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 + +def wpiPinToGpio(*args): + return _wiringpi2.wpiPinToGpio(*args) +wpiPinToGpio = _wiringpi2.wpiPinToGpio + def setPadDrive(*args): return _wiringpi2.setPadDrive(*args) setPadDrive = _wiringpi2.setPadDrive -def digitalRead(*args): - return _wiringpi2.digitalRead(*args) -digitalRead = _wiringpi2.digitalRead +def getAlt(*args): + return _wiringpi2.getAlt(*args) +getAlt = _wiringpi2.getAlt + +def digitalWriteByte(*args): + return _wiringpi2.digitalWriteByte(*args) +digitalWriteByte = _wiringpi2.digitalWriteByte def pwmSetMode(*args): return _wiringpi2.pwmSetMode(*args) @@ -140,6 +148,10 @@ def pwmSetClock(*args): 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 @@ def piUnlock(*args): 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 @@ mcp23008Setup = _wiringpi2.mcp23008Setup 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 0000000000000000000000000000000000000000..6f3ae5c2b84ccd3c3e013a0c53a51927b8afa645 GIT binary patch literal 25869 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