From d9fc85a610a30dafabbb3a9d092a3bf34c846ee2 Mon Sep 17 00:00:00 2001 From: Philip Howard Date: Tue, 13 Aug 2013 16:38:26 +0100 Subject: [PATCH] Partial update to latest WiringPi --- WiringPi/wiringPi/wiringPi.c | 70 +++++++++++++++++------ WiringPi/wiringPi/wiringPi.h | 6 +- setup.py | 10 ++++ wiringpi.i | 10 +++- wiringpi2.py | 14 ++++- wiringpi2.pyc | Bin 35770 -> 36351 bytes wiringpi_wrap.c | 106 +++++++++++++++++++++++++++++++++++ 7 files changed, 195 insertions(+), 21 deletions(-) diff --git a/WiringPi/wiringPi/wiringPi.c b/WiringPi/wiringPi/wiringPi.c index b8e381a..b54ad29 100644 --- a/WiringPi/wiringPi/wiringPi.c +++ b/WiringPi/wiringPi/wiringPi.c @@ -88,7 +88,7 @@ #define PI_GPIO_MASK (0xFFFFFFC0) -static struct wiringPiNodeStruct *wiringPiNodes = NULL ; +struct wiringPiNodeStruct *wiringPiNodes = NULL ; // BCM Magic @@ -118,7 +118,6 @@ static struct wiringPiNodeStruct *wiringPiNodes = NULL ; #define FSEL_INPT 0b000 #define FSEL_OUTP 0b001 #define FSEL_ALT0 0b100 -#define FSEL_ALT0 0b100 #define FSEL_ALT1 0b101 #define FSEL_ALT2 0b110 #define FSEL_ALT3 0b111 @@ -213,7 +212,13 @@ int wiringPiReturnCodes = FALSE ; // sysFds: // Map a file descriptor from the /sys/class/gpio/gpioX/value -static int sysFds [64] ; +static int sysFds [64] = +{ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, +} ; // ISR Data @@ -833,7 +838,7 @@ void gpioClockSet (int pin, int freq) ********************************************************************************* */ -static struct wiringPiNodeStruct *wiringPiFindNode (int pin) +struct wiringPiNodeStruct *wiringPiFindNode (int pin) { struct wiringPiNodeStruct *node = wiringPiNodes ; @@ -919,6 +924,32 @@ void pinEnableED01Pi (int pin) ********************************************************************************* */ +/* + * pinModeAlt: + * This is an un-documented special to let you set any pin to any mode + ********************************************************************************* + */ + +void pinModeAlt (int pin, int mode) +{ + int fSel, shift ; + + if ((pin & PI_GPIO_MASK) == 0) // On-board pin + { + /**/ if (wiringPiMode == WPI_MODE_PINS) + pin = pinToGpio [pin] ; + else if (wiringPiMode == WPI_MODE_PHYS) + pin = physToGpio [pin] ; + else if (wiringPiMode != WPI_MODE_GPIO) + return ; + + fSel = gpioToGPFSEL [pin] ; + shift = gpioToShift [pin] ; + + *(gpio + fSel) = (*(gpio + fSel) & ~(7 << shift)) | ((mode & 0x7) << shift) ; + } +} + /* * pinMode: @@ -1304,7 +1335,8 @@ int wiringPiISR (int pin, int mode, void (*function)(void)) char c ; int bcmGpioPin ; - pin &= 63 ; + if ((pin < 0) || (pin > 63)) + return wiringPiFailure (WPI_FATAL, "wiringPiISR: pin must be 0-63 (%d)\n", pin) ; /**/ if (wiringPiMode == WPI_MODE_UNINITIALISED) return wiringPiFailure (WPI_FATAL, "wiringPiISR: wiringPi has not been initialised. Unable to continue.\n") ; @@ -1333,26 +1365,26 @@ int wiringPiISR (int pin, int mode, void (*function)(void)) sprintf (pinS, "%d", bcmGpioPin) ; if ((pid = fork ()) < 0) // Fail - return pid ; + return wiringPiFailure (WPI_FATAL, "wiringPiISR: fork failed: %s\n", strerror (errno)) ; if (pid == 0) // Child, exec { execl ("/usr/local/bin/gpio", "gpio", "edge", pinS, modeS, (char *)NULL) ; - return -1 ; // Failure ... + return wiringPiFailure (WPI_FATAL, "wiringPiISR: execl failed: %s\n", strerror (errno)) ; } else // Parent, wait wait (NULL) ; } -// Now pre-open the /sys/class node - it may already be open if -// we are in Sys mode or if we call here twice, if-so, we'll close it. - - if (sysFds [bcmGpioPin] != -1) - close (sysFds [bcmGpioPin]) ; +// Now pre-open the /sys/class node - but it may already be open if +// we are in Sys mode... - sprintf (fName, "/sys/class/gpio/gpio%d/value", bcmGpioPin) ; - if ((sysFds [bcmGpioPin] = open (fName, O_RDWR)) < 0) - return -1 ; + if (sysFds [bcmGpioPin] == -1) + { + sprintf (fName, "/sys/class/gpio/gpio%d/value", bcmGpioPin) ; + if ((sysFds [bcmGpioPin] = open (fName, O_RDWR)) < 0) + return wiringPiFailure (WPI_FATAL, "wiringPiISR: unable to open %s: %s\n", fName, strerror (errno)) ; + } // Clear any initial pending interrupt @@ -1441,6 +1473,8 @@ void delayMicrosecondsHard (unsigned int howLong) void delayMicroseconds (unsigned int howLong) { struct timespec sleeper ; + unsigned int uSecs = howLong % 1000000 ; + unsigned int wSecs = howLong / 1000000 ; /**/ if (howLong == 0) return ; @@ -1448,8 +1482,8 @@ void delayMicroseconds (unsigned int howLong) delayMicrosecondsHard (howLong) ; else { - sleeper.tv_sec = 0 ; - sleeper.tv_nsec = (long)(howLong * 1000) ; + sleeper.tv_sec = wSecs ; + sleeper.tv_nsec = (long)(uSecs * 1000L) ; nanosleep (&sleeper, NULL) ; } } @@ -1532,7 +1566,7 @@ int wiringPiSetup (void) // Open the master /dev/memory device - if ((fd = open ("/dev/mem", O_RDWR | O_SYNC) ) < 0) + if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0) return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: Unable to open /dev/mem: %s\n", strerror (errno)) ; // GPIO: diff --git a/WiringPi/wiringPi/wiringPi.h b/WiringPi/wiringPi/wiringPi.h index 600b318..ce4680a 100644 --- a/WiringPi/wiringPi/wiringPi.h +++ b/WiringPi/wiringPi/wiringPi.h @@ -104,6 +104,8 @@ struct wiringPiNodeStruct struct wiringPiNodeStruct *next ; } ; +extern struct wiringPiNodeStruct *wiringPiNodes ; + // Function prototypes // c++ wrappers thanks to a comment by Nick Lott @@ -119,13 +121,15 @@ extern int wiringPiFailure (int fatal, const char *message, ...) ; // Core wiringPi functions -extern struct wiringPiNodeStruct *wiringPiNewNode (int pinBase, int numPins) ; +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) ; diff --git a/setup.py b/setup.py index 17db3f1..ac52a91 100644 --- a/setup.py +++ b/setup.py @@ -7,13 +7,17 @@ _wiringpi2 = Extension( sources=[ 'WiringPi/wiringPi/wiringPi.c', 'WiringPi/wiringPi/wiringPiSPI.c', + 'WiringPi/wiringPi/max31855.c', + 'WiringPi/wiringPi/max5322.c', 'WiringPi/wiringPi/drc.c', + 'WiringPi/wiringPi/sn3218.c', 'WiringPi/wiringPi/mcp23s17.c', 'WiringPi/wiringPi/pcf8591.c', 'WiringPi/wiringPi/softTone.c', 'WiringPi/wiringPi/wiringSerial.c', 'WiringPi/wiringPi/mcp23008.c', 'WiringPi/wiringPi/mcp3002.c', + 'WiringPi/wiringPi/mcp3004.c', 'WiringPi/wiringPi/piHiPri.c', 'WiringPi/wiringPi/sr595.c', 'WiringPi/wiringPi/wiringShift.c', @@ -34,6 +38,7 @@ _wiringpi2 = Extension( 'WiringPi/devLib/lcd.c', 'WiringPi/devLib/piFace.c', 'WiringPi/devLib/piNes.c', + 'WiringPi/devLib/piGlow.c', 'wiringpi_wrap.c' ], ) @@ -54,7 +59,10 @@ setup( headers=[ 'WiringPi/wiringPi/wiringPi.h', 'WiringPi/wiringPi/wiringPiI2C.h', + 'WiringPi/wiringPi/max31855.h', + 'WiringPi/wiringPi/max5322.h', 'WiringPi/wiringPi/drc.h', + 'WiringPi/wiringPi/sn3218.h', 'WiringPi/wiringPi/mcp23s08.h', 'WiringPi/wiringPi/mcp3422.h', 'WiringPi/wiringPi/softServo.h', @@ -74,6 +82,7 @@ setup( 'WiringPi/wiringPi/pcf8591.h', 'WiringPi/wiringPi/mcp23017.h', 'WiringPi/wiringPi/mcp3002.h', + 'WiringPi/wiringPi/mcp3004.h', 'WiringPi/wiringPi/softPwm.h', 'WiringPi/devLib/ds1302.h', 'WiringPi/devLib/gertboard.h', @@ -83,5 +92,6 @@ setup( 'WiringPi/devLib/lcd128x64.h', 'WiringPi/devLib/maxdetect.h', 'WiringPi/devLib/piNes.h' + 'WiringPi/devLib/piGlow.h', ] ) diff --git a/wiringpi.i b/wiringpi.i index 1cf28e1..1780955 100644 --- a/wiringpi.i +++ b/wiringpi.i @@ -6,6 +6,8 @@ #include "WiringPi/wiringPi/wiringPiI2C.h" #include "WiringPi/wiringPi/wiringSerial.h" #include "WiringPi/wiringPi/wiringShift.h" +#include "WiringPi/wiringPi/max31855.h" +#include "WiringPi/wiringPi/max5322.h" #include "WiringPi/wiringPi/mcp23017.h" #include "WiringPi/wiringPi/mcp4802.h" #include "WiringPi/wiringPi/mcp3422.h" @@ -14,7 +16,9 @@ #include "WiringPi/wiringPi/mcp23x08.h" #include "WiringPi/wiringPi/mcp23016.h" #include "WiringPi/wiringPi/mcp3002.h" +#include "WiringPi/wiringPi/mcp3004.h" #include "WiringPi/wiringPi/mcp23016reg.h" +#include "WiringPi/wiringPi/sn3218.h" #include "WiringPi/wiringPi/mcp23x0817.h" #include "WiringPi/wiringPi/mcp23s17.h" #include "WiringPi/wiringPi/pcf8574.h" @@ -32,6 +36,7 @@ #include "WiringPi/devLib/piFace.h" #include "WiringPi/devLib/ds1302.h" #include "WiringPi/devLib/piNes.h" +#include "WiringPi/devLib/piGlow.h" %} %apply unsigned char { uint8_t }; @@ -209,6 +214,9 @@ extern int lcd128x64setup (void) ; extern int setupNesJoystick (int dPin, int cPin, int lPin) ; extern unsigned int readNesJoystick (int joystick) ; - +// 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) ; %include "wiringpi2-class.py" diff --git a/wiringpi2.py b/wiringpi2.py index 5fb5c37..2a3557d 100644 --- a/wiringpi2.py +++ b/wiringpi2.py @@ -503,6 +503,18 @@ setupNesJoystick = _wiringpi2.setupNesJoystick def readNesJoystick(*args): return _wiringpi2.readNesJoystick(*args) readNesJoystick = _wiringpi2.readNesJoystick + +def piGlow1(*args): + return _wiringpi2.piGlow1(*args) +piGlow1 = _wiringpi2.piGlow1 + +def piGlowLeg(*args): + return _wiringpi2.piGlowLeg(*args) +piGlowLeg = _wiringpi2.piGlowLeg + +def piGlowRing(*args): + return _wiringpi2.piGlowRing(*args) +piGlowRing = _wiringpi2.piGlowRing class nes(object): def setupNesJoystick(self,*args): return setupNesJoystick(*args) @@ -658,7 +670,7 @@ class GPIO(object): def softPwmCreate(self,*args): return softPwmCreate(*args) def softPwmWrite(self,*args): - return softPwmWrite(*args) + return sofPwmWrite(*args) def softToneCreate(self,*args): return softToneCreate(*args) diff --git a/wiringpi2.pyc b/wiringpi2.pyc index 9735e5b3daceeb1a54af06a522a90f0b27f75f14..0ddd717b47dccff1a37ad109d523e0424313a74e 100644 GIT binary patch delta 1201 zcmX|>YiN^a6vvc49-RmpSoLM5Uu%aEkb8gE^eO?HHzN8hg^%k!ur;u1(T3 zO>2h;?tn#WwO!T89JOs)2Sv~i3W6|@!M2YDLD;8(4mMHHbB=97-v9f{@BcjSC3)V= z4Owr8twzVos`BU;<#wA{csY5$kGFVvnK8(3FhOHNU_4;J4+i@$G!DVQ)RRZ0nLcAY z-Nx@Q-*yXNw-J+4lM=v`nzWj<@uUqhSD1D_PDZMnF^4@FgFTBjTeLj}dlzl4XtM_U z7VV0BQS(T?ik$J}47yBH{n^65OFlS6x0|*q9?U- z7pERroEm^y`r8|?xyqv6A+}E9y2K5NwH|>w`mOb|3hhCAwg)NVtAN$i<*VEJeyB7u z#=a&oDlsPUqr|wxO^KffKK$A_!dO{Yb$koJTKx{PZ5^;q=>fLVytl;J>G$D=1rvmN zr8a*EHZfg;%@k`NhplS&2g1-mbAdW~7O1VXC*(ADBqsG-w-`Sz*eCvTIOPhO=s<9q zUPe|?G`X5~hY*gFFVaZAhrEDF?O`uHjP0a1VT2AgKR{5=vnh%YR(iw~RcehPbSj-s zA|wbxpVH+{grw50IKmmFzv4(u$=#GpAidzd`y@g}n^~q_rRGxzc|F!YOatoVsDnyd zP9vPt_A%3Wb%8So7t~qbA&}At(?zE3w6iPboZ~ybr2bhK!mv`h8+m2Oh}u*XM%CR< zA&e_|(g-(rne3wfnQkdv%mm?Qr9C|ezc7u!gnmAqMVM4__aaOy%`nX<**R>uYw@1| zZ^l6VK2EzvVxvSsVn$+C;;zK6h3C0ya7_!}q=|uATAug993}E=;T{d;r-;5^XM?<>o|?Q+++m$}cr18!b}Q~&?~ delta 1136 zcmY+CT}V@57{}jdZgVpg(Kbp%OiCpT3ekveRzY4wmS!JHw#~ijW=^N`+f6q=nrIUG zM531Yl}Uo83#=}ppsu2epsOyjya?(>s*A#qdfvC~q=$3<=l}aZ&w1a6bIzYJ)ze{B zR>Y5(DAU)md>acL8oHb4a=+6t#_0rB#h4RVF)%0t#=8cyhM{}u^{Yr;wu6;Z;$hv4 zbum^{>|xx?LTS5_dKvEsr#>ZZXWSo7JC&3gBUq)675f<1vU3?d!TtK!e9XN3M)e!; zn=2a+mT=W3;H{E+?Fh}e0l~N{X8_bV=t)3Rryf1#eK3ak7IUng>fBmyJ=SP-RB5*~ zq-gW0R3N%4LAR}NI$W^nTn+U$yR|NATRksaH|y18smC3S38iks7*R%qs3r=T6f%WN z=Chd6smAqE9mL|V(vvjWpsNTMEgHOIi`)~hqE}59V~`Oo9x(_>7ZO^*-=AO@7kpR9 zgpg?=Gq@T!uNfuFg1P(vfRX0R!TB-=?2_(Oxg8Qi&LW4%tI$D`Oa>~PkSyIHy8}|B zduw+>s&oyG>a@LE28$B={U2;r;C&%;xZy~`wLpR99-$%Vsr(tC5!2;jbM-P5(rQU) zX->wn8V(n*#Fd4cHD0Kt3-_<>Vy_@Ik=nlX;V7Hu3m*MwsP>v zuJ5fJPc$FJ!8VR-&4)45!y!PGQRpMhMyt10vqEoVKz7HpbGRYh9JwLcalFF?H)Zyv zgTt_N-98Q@