For more information, please refer to <http://unlicense.org/>
*/
-/* pigpio version 58 */
+/* pigpio version 59 */
/* include ------------------------------------------------------- */
uint16_t width;
uint16_t range; /* dutycycles specified by 0 .. range */
uint16_t freqIdx;
+ uint16_t deferOff;
+ uint16_t deferRng;
} gpioInfo_t;
typedef struct
{
int switchGpioOff;
int newOff, oldOff, realRange, cycles, i;
+ int deferOff, deferRng;
DBG(DBG_INTERNAL,
"myGpioSetPwm %d from %d to %d", gpio, oldVal, 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<SUPERLEVEL; i+=deferRng)
+ {
+ myClearGpioOff(gpio, i+deferOff);
+ }
+ gpioInfo[gpio].deferOff = 0;
+ }
+
if (newOff != oldOff)
{
if (newOff && oldOff) /* PWM CHANGE */
for (i=0; i<SUPERLEVEL; i+=realRange)
mySetGpioOff(gpio, i+newOff);
- for (i=0; i<SUPERLEVEL; i+=realRange)
- myClearGpioOff(gpio, i+oldOff);
+ if (newOff > oldOff)
+ {
+ for (i=0; i<SUPERLEVEL; i+=realRange)
+ myClearGpioOff(gpio, i+oldOff);
+ }
+ else
+ {
+ gpioInfo[gpio].deferOff = oldOff;
+ gpioInfo[gpio].deferRng = realRange;
+ }
}
else if (newOff) /* PWM START */
{
static void myGpioSetServo(unsigned gpio, int oldVal, int newVal)
{
int newOff, oldOff, realRange, cycles, i;
+ int deferOff, deferRng;
DBG(DBG_INTERNAL,
"myGpioSetServo %d from %d to %d", gpio, oldVal, newVal);
newOff = (newVal * realRange)/20000;
oldOff = (oldVal * realRange)/20000;
+ deferOff = gpioInfo[gpio].deferOff;
+ deferRng = gpioInfo[gpio].deferRng;
+
+ if (gpioInfo[gpio].deferOff)
+ {
+ for (i=0; i<SUPERLEVEL; i+=deferRng)
+ {
+ myClearGpioOff(gpio, i+deferOff);
+ }
+ gpioInfo[gpio].deferOff = 0;
+ }
+
if (newOff != oldOff)
{
if (newOff && oldOff) /* SERVO CHANGE */
for (i=0; i<SUPERLEVEL; i+=realRange)
mySetGpioOff(gpio, i+newOff);
- for (i=0; i<SUPERLEVEL; i+=realRange)
- myClearGpioOff(gpio, i+oldOff);
+ if (newOff > oldOff)
+ {
+ for (i=0; i<SUPERLEVEL; i+=realRange)
+ myClearGpioOff(gpio, i+oldOff);
+ }
+ else
+ {
+ gpioInfo[gpio].deferOff = oldOff;
+ gpioInfo[gpio].deferRng = realRange;
+ }
}
else if (newOff) /* SERVO START */
{
/* schedule new gpio on */
- for (i=0; i<SUPERCYCLE; i+=cycles)
- mySetGpioOn(gpio, i);
+ for (i=0; i<SUPERCYCLE; i+=cycles) mySetGpioOn(gpio, i);
}
else /* SERVO STOP */
{
*(gpioReg + GPPUD) = pud;
- myGpioDelay(20);
+ myGpioDelay(1);
*(gpioReg + GPPUDCLK0 + BANK) = BIT;
- myGpioDelay(20);
+ myGpioDelay(1);
*(gpioReg + GPPUD) = 0;
static void I2C_clock_stretch(wfRx_t *w)
{
- uint32_t now, max_stretch=10000;
+ uint32_t now, max_stretch=100000;
myGpioSetMode(w->I.SCL, PI_INPUT);
now = gpioTick();
{
if (!ack)
{
- if ((bytes + outPos) < outLen)
+ if ((bytes + outPos) <= outLen)
{
for (i=0; i<(bytes-1); i++)
{
{
if (!ack)
{
- if ((bytes + inPos) < inLen)
+ if ((bytes + inPos) <= inLen)
{
for (i=0; i<(bytes-1); i++)
{
}
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;
{
lseek(fd, 0, SEEK_SET); /* consume interrupt */
read(fd, buf, sizeof buf);
+
if (retval)
{
if (levels & (1<<isr->gpio)) level = PI_ON; else level = PI_OFF;
#!/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']
+ )