From a939b8b0e6f07a40246b49d5961f3ba697ea1153 Mon Sep 17 00:00:00 2001 From: joan Date: Thu, 22 Dec 2016 18:07:09 +0000 Subject: [PATCH] V59 --- pigpio.c | 70 +++++++++++++++++++++++++++++++++++++++++---------- pigpio.h | 2 +- pigpio.py | 11 ++++---- pigpiod_if2.3 | 4 +-- pigpiod_if2.h | 4 +-- setup.py | 37 +++++++++++---------------- 6 files changed, 81 insertions(+), 47 deletions(-) diff --git a/pigpio.c b/pigpio.c index eacb301..22aefbf 100644 --- a/pigpio.c +++ b/pigpio.c @@ -25,7 +25,7 @@ OTHER DEALINGS IN THE SOFTWARE. For more information, please refer to */ -/* pigpio version 58 */ +/* pigpio version 59 */ /* include ------------------------------------------------------- */ @@ -897,6 +897,8 @@ typedef struct uint16_t width; uint16_t range; /* dutycycles specified by 0 .. range */ uint16_t freqIdx; + uint16_t deferOff; + uint16_t deferRng; } gpioInfo_t; typedef struct @@ -2507,6 +2509,7 @@ static void myGpioSetPwm(unsigned gpio, int oldVal, int newVal) { int switchGpioOff; int newOff, oldOff, realRange, cycles, i; + int deferOff, deferRng; DBG(DBG_INTERNAL, "myGpioSetPwm %d from %d to %d", gpio, oldVal, newVal); @@ -2520,6 +2523,18 @@ static void myGpioSetPwm(unsigned gpio, int oldVal, int newVal) newOff = (newVal * realRange)/gpioInfo[gpio].range; oldOff = (oldVal * realRange)/gpioInfo[gpio].range; + deferOff = gpioInfo[gpio].deferOff; + deferRng = gpioInfo[gpio].deferRng; + + if (gpioInfo[gpio].deferOff) + { + for (i=0; i oldOff) + { + for (i=0; i oldOff) + { + for (i=0; iI.SCL, PI_INPUT); now = gpioTick(); @@ -10348,7 +10391,7 @@ int bbI2CZip( { if (!ack) { - if ((bytes + outPos) < outLen) + if ((bytes + outPos) <= outLen) { for (i=0; i<(bytes-1); i++) { @@ -10373,7 +10416,7 @@ int bbI2CZip( { if (!ack) { - if ((bytes + inPos) < inLen) + if ((bytes + inPos) <= inLen) { for (i=0; i<(bytes-1); i++) { @@ -10382,7 +10425,7 @@ int bbI2CZip( } ack = I2CPutByte(w, inBuf[inPos++]); } - else status = PI_BAD_I2C_RLEN; + else status = PI_BAD_I2C_WLEN; } else status = PI_I2C_WRITE_FAILED; } else status = PI_BAD_I2C_CMD; @@ -11224,6 +11267,7 @@ static void *pthISRThread(void *x) { lseek(fd, 0, SEEK_SET); /* consume interrupt */ read(fd, buf, sizeof buf); + if (retval) { if (levels & (1<gpio)) level = PI_ON; else level = PI_OFF; diff --git a/pigpio.h b/pigpio.h index d421744..06d12a3 100644 --- a/pigpio.h +++ b/pigpio.h @@ -31,7 +31,7 @@ For more information, please refer to #include #include -#define PIGPIO_VERSION 58 +#define PIGPIO_VERSION 59 /*TEXT diff --git a/pigpio.py b/pigpio.py index b22202e..4876ab1 100644 --- a/pigpio.py +++ b/pigpio.py @@ -299,7 +299,7 @@ import threading import os import atexit -VERSION = "1.34" +VERSION = "1.35" exceptions = True @@ -1744,12 +1744,11 @@ class pi(): The watchdog may be cancelled by setting timeout to 0. - If no level change has been detected for the GPIO for timeout - milliseconds any notification for the GPIO has a report written - to the fifo with the flags set to indicate a watchdog timeout. + Once a watchdog has been started callbacks for the GPIO + will be triggered whenever there has been no GPIO activity + for the timeout interval. - The callback class interprets the flags and will - call registered callbacks for the GPIO with level TIMEOUT. + The callback will receive the special level TIMEOUT. ... pi.set_watchdog(23, 1000) # 1000 ms watchdog on GPIO 23 diff --git a/pigpiod_if2.3 b/pigpiod_if2.3 index 5b25e0c..d0d56a7 100644 --- a/pigpiod_if2.3 +++ b/pigpiod_if2.3 @@ -6065,7 +6065,7 @@ to cancel the callback. .EX typedef void (*CBFunc_t) .br - (unsigned user_gpio, unsigned level, uint32_t tick); + (int pi, unsigned user_gpio, unsigned level, uint32_t tick); .br .EE @@ -6079,7 +6079,7 @@ typedef void (*CBFunc_t) .EX typedef void (*CBFuncEx_t) .br - (unsigned user_gpio, unsigned level, uint32_t tick, void * userdata); + (int pi, unsigned user_gpio, unsigned level, uint32_t tick, void * userdata); .br .EE diff --git a/pigpiod_if2.h b/pigpiod_if2.h index dc6f701..0ed6719 100644 --- a/pigpiod_if2.h +++ b/pigpiod_if2.h @@ -3641,13 +3641,13 @@ to cancel the callback. CBFunc_t:: . . typedef void (*CBFunc_t) - (unsigned user_gpio, unsigned level, uint32_t tick); + (int pi, unsigned user_gpio, unsigned level, uint32_t tick); . . CBFuncEx_t:: . . typedef void (*CBFuncEx_t) - (unsigned user_gpio, unsigned level, uint32_t tick, void * userdata); + (int pi, unsigned user_gpio, unsigned level, uint32_t tick, void * userdata); . . char:: diff --git a/setup.py b/setup.py index 2921df8..619acd5 100644 --- a/setup.py +++ b/setup.py @@ -1,26 +1,17 @@ #!/usr/bin/env python -from setuptools import setup, find_packages +from distutils.core import setup -setup( - name='pigpio', - version='1.34', - author='joan', - author_email='joan@abyz.co.uk', - maintainer='joan', - maintainer_email='joan@abyz.co.uk', - url='http://abyz.co.uk/rpi/pigpio/python.html', - description='Raspberry Pi GPIO module', - long_description='Raspberry Python module to access the pigpio daemon', - download_url='http://abyz.co.uk/rpi/pigpio/pigpio.zip', - license='unlicense.org', - keywords=[ - 'raspberrypi', - 'gpio', - ], - packages=find_packages(), - classifiers=[ - "Programming Language :: Python :: 2", - "Programming Language :: Python :: 3", - ] -) +setup(name='pigpio', + version='1.35', + author='joan', + author_email='joan@abyz.co.uk', + maintainer='joan', + maintainer_email='joan@abyz.co.uk', + url='http://abyz.co.uk/rpi/pigpio/python.html/', + description='Raspberry gpio module', + long_description='Raspberry Python module to access the pigpio daemon', + download_url='http://abyz.co.uk/rpi/pigpio/pigpio.zip', + license='unlicense.org', + py_modules=['pigpio'] + )