mirror of
git://soft.sys114.com/WiringPi2-Python
synced 2025-12-19 02:58:41 +09:00
Partial update to latest WiringPi
This commit is contained in:
@@ -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.
|
||||
// Now pre-open the /sys/class node - but it may already be open if
|
||||
// we are in Sys mode...
|
||||
|
||||
if (sysFds [bcmGpioPin] != -1)
|
||||
close (sysFds [bcmGpioPin]) ;
|
||||
|
||||
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:
|
||||
|
||||
@@ -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) ;
|
||||
|
||||
10
setup.py
10
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',
|
||||
]
|
||||
)
|
||||
|
||||
10
wiringpi.i
10
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"
|
||||
|
||||
14
wiringpi2.py
14
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)
|
||||
|
||||
BIN
wiringpi2.pyc
BIN
wiringpi2.pyc
Binary file not shown.
106
wiringpi_wrap.c
106
wiringpi_wrap.c
@@ -2972,6 +2972,8 @@ static swig_module_info swig_module = {swig_types, 6, 0, 0, 0, 0};
|
||||
#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"
|
||||
@@ -2980,6 +2982,7 @@ static swig_module_info swig_module = {swig_types, 6, 0, 0, 0, 0};
|
||||
#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/mcp23x0817.h"
|
||||
#include "WiringPi/wiringPi/mcp23s17.h"
|
||||
@@ -2998,6 +3001,7 @@ static swig_module_info swig_module = {swig_types, 6, 0, 0, 0, 0};
|
||||
#include "WiringPi/devLib/piFace.h"
|
||||
#include "WiringPi/devLib/ds1302.h"
|
||||
#include "WiringPi/devLib/piNes.h"
|
||||
#include "WiringPi/devLib/piGlow.h"
|
||||
|
||||
|
||||
SWIGINTERNINLINE PyObject*
|
||||
@@ -6774,6 +6778,105 @@ fail:
|
||||
}
|
||||
|
||||
|
||||
SWIGINTERN PyObject *_wrap_piGlow1(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:piGlow1",&obj0,&obj1,&obj2)) SWIG_fail;
|
||||
ecode1 = SWIG_AsVal_int(obj0, &val1);
|
||||
if (!SWIG_IsOK(ecode1)) {
|
||||
SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "piGlow1" "', 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 '" "piGlow1" "', 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 '" "piGlow1" "', argument " "3"" of type '" "int""'");
|
||||
}
|
||||
arg3 = (int)(val3);
|
||||
piGlow1(arg1,arg2,arg3);
|
||||
resultobj = SWIG_Py_Void();
|
||||
return resultobj;
|
||||
fail:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
SWIGINTERN PyObject *_wrap_piGlowLeg(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:piGlowLeg",&obj0,&obj1)) SWIG_fail;
|
||||
ecode1 = SWIG_AsVal_int(obj0, &val1);
|
||||
if (!SWIG_IsOK(ecode1)) {
|
||||
SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "piGlowLeg" "', 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 '" "piGlowLeg" "', argument " "2"" of type '" "int""'");
|
||||
}
|
||||
arg2 = (int)(val2);
|
||||
piGlowLeg(arg1,arg2);
|
||||
resultobj = SWIG_Py_Void();
|
||||
return resultobj;
|
||||
fail:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
SWIGINTERN PyObject *_wrap_piGlowRing(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:piGlowRing",&obj0,&obj1)) SWIG_fail;
|
||||
ecode1 = SWIG_AsVal_int(obj0, &val1);
|
||||
if (!SWIG_IsOK(ecode1)) {
|
||||
SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "piGlowRing" "', 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 '" "piGlowRing" "', argument " "2"" of type '" "int""'");
|
||||
}
|
||||
arg2 = (int)(val2);
|
||||
piGlowRing(arg1,arg2);
|
||||
resultobj = SWIG_Py_Void();
|
||||
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},
|
||||
@@ -6885,6 +6988,9 @@ static PyMethodDef SwigMethods[] = {
|
||||
{ (char *)"lcd128x64setup", _wrap_lcd128x64setup, METH_VARARGS, NULL},
|
||||
{ (char *)"setupNesJoystick", _wrap_setupNesJoystick, METH_VARARGS, NULL},
|
||||
{ (char *)"readNesJoystick", _wrap_readNesJoystick, METH_VARARGS, NULL},
|
||||
{ (char *)"piGlow1", _wrap_piGlow1, METH_VARARGS, NULL},
|
||||
{ (char *)"piGlowLeg", _wrap_piGlowLeg, METH_VARARGS, NULL},
|
||||
{ (char *)"piGlowRing", _wrap_piGlowRing, METH_VARARGS, NULL},
|
||||
{ NULL, NULL, 0, NULL }
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user