This commit is contained in:
joan 2014-08-17 19:53:43 +01:00
parent fc6537d30c
commit dcacaec554
9 changed files with 126 additions and 64 deletions

View File

@ -2719,7 +2719,7 @@ level for pulseLen microseconds and then reset to not level.
.EX .EX
user_gpio: 0-31 user_gpio: 0-31
.br .br
pulseLen: 1-50 pulseLen: 1-100
.br .br
level: 0,1 level: 0,1
.br .br
@ -5184,7 +5184,7 @@ PI_PUD_UP 2
.br .br
.br .br
1-50, the length of a trigger pulse in microseconds. 1-100, the length of a trigger pulse in microseconds.
.br .br

View File

@ -25,7 +25,7 @@ OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org/> For more information, please refer to <http://unlicense.org/>
*/ */
/* pigpio version 19 */ /* pigpio version 20 */
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@ -4705,7 +4705,7 @@ static void *pthSocketThreadHandler(void *fdC)
case PI_CMD_PROCP: case PI_CMD_PROCP:
p[3] = myDoCommand(p, sizeof(buf)-1, buf+sizeof(int)); p[3] = myDoCommand(p, sizeof(buf)-1, buf+sizeof(int));
if (p[3] >= 0) if (((int)p[3]) >= 0)
{ {
memcpy(buf, &p[3], 4); memcpy(buf, &p[3], 4);
p[3] = 4 + (4*PI_MAX_SCRIPT_PARAMS); p[3] = 4 + (4*PI_MAX_SCRIPT_PARAMS);
@ -4732,7 +4732,7 @@ static void *pthSocketThreadHandler(void *fdC)
case PI_CMD_SPIX: case PI_CMD_SPIX:
case PI_CMD_SPIR: case PI_CMD_SPIR:
if (p[3] > 0) if (((int)p[3]) > 0)
{ {
write(sock, buf, p[3]); write(sock, buf, p[3]);
} }

View File

@ -31,7 +31,7 @@ For more information, please refer to <http://unlicense.org/>
#include <stdint.h> #include <stdint.h>
#include <pthread.h> #include <pthread.h>
#define PIGPIO_VERSION 19 #define PIGPIO_VERSION 20
/*TEXT /*TEXT
@ -2102,7 +2102,7 @@ level for pulseLen microseconds and then reset to not level.
. . . .
user_gpio: 0-31 user_gpio: 0-31
pulseLen: 1-50 pulseLen: 1-100
level: 0,1 level: 0,1
. . . .
@ -3411,7 +3411,7 @@ PI_PUD_UP 2
pulseLen:: pulseLen::
1-50, the length of a trigger pulse in microseconds. 1-100, the length of a trigger pulse in microseconds.
*pulses:: *pulses::

162
pigpio.py
View File

@ -246,7 +246,7 @@ import os
import atexit import atexit
import codecs import codecs
VERSION = "1.9" VERSION = "1.10"
exceptions = True exceptions = True
@ -651,22 +651,39 @@ else:
def _b(x): def _b(x):
return codecs.latin_1_encode(x)[0] return codecs.latin_1_encode(x)[0]
def _u2i(number): def u2i(number):
"""Converts a 32 bit unsigned number to signed.""" """
Converts a 32 bit unsigned number to signed.
number:= an unsigned 32 bit number
...
print(u2i(4294967272))
-24
print(u2i(37))
37
...
"""
mask = (2 ** 32) - 1 mask = (2 ** 32) - 1
if number & (1 << 31): if number & (1 << 31):
v = number | ~mask v = number | ~mask
else: else:
v = number & mask v = number & mask
if v >= 0:
return v;
else:
if exceptions:
raise error(error_text(v))
else:
return v return v
def _pigpio_command(sl, cmd, p1, p2): def _u2i(number):
"""
Converts a 32 bit unsigned number to signed. If the number
is negative it indicates an error. On error a pigpio
exception will be raised if exceptions is True.
"""
v = u2i(number)
if v < 0:
if exceptions:
raise error(error_text(v))
return v
def _pigpio_command(sl, cmd, p1, p2, rl=True):
""" """
Runs a pigpio socket command. Runs a pigpio socket command.
@ -678,10 +695,10 @@ def _pigpio_command(sl, cmd, p1, p2):
sl.l.acquire() sl.l.acquire()
sl.s.send(struct.pack('IIII', cmd, p1, p2, 0)) sl.s.send(struct.pack('IIII', cmd, p1, p2, 0))
dummy, res = struct.unpack('12sI', sl.s.recv(16)) dummy, res = struct.unpack('12sI', sl.s.recv(16))
sl.l.release() if rl: sl.l.release()
return res return res
def _pigpio_command_ext(sl, cmd, p1, p2, p3, extents): def _pigpio_command_ext(sl, cmd, p1, p2, p3, extents, rl=True):
""" """
Runs an extended pigpio socket command. Runs an extended pigpio socket command.
@ -701,7 +718,7 @@ def _pigpio_command_ext(sl, cmd, p1, p2, p3, extents):
sl.l.acquire() sl.l.acquire()
sl.s.sendall(ext) sl.s.sendall(ext)
dummy, res = struct.unpack('12sI', sl.s.recv(16)) dummy, res = struct.unpack('12sI', sl.s.recv(16))
sl.l.release() if rl: sl.l.release()
return res return res
class _callback_ADT: class _callback_ADT:
@ -1772,10 +1789,15 @@ class pi():
(count, data) = pi.i2c_read_device(h, 12) (count, data) = pi.i2c_read_device(h, 12)
... ...
""" """
bytes = _u2i(_pigpio_command(self.sl, _PI_CMD_I2CRD, handle, count)) # Don't raise exception. Must release lock.
bytes = u2i(
_pigpio_command(self.sl, _PI_CMD_I2CRD, handle, count, False))
if bytes > 0: if bytes > 0:
return bytes, self._rxbuf(bytes) data = self._rxbuf(bytes)
return bytes, "" else:
data = ""
self.sl.l.release()
return bytes, data
def i2c_write_device(self, handle, data): def i2c_write_device(self, handle, data):
""" """
@ -2030,10 +2052,14 @@ class pi():
# process read failure # process read failure
... ...
""" """
bytes = _u2i(_pigpio_command(self.sl, _PI_CMD_I2CRK, handle, reg)) # Don't raise exception. Must release lock.
bytes = u2i(_pigpio_command(self.sl, _PI_CMD_I2CRK, handle, reg, False))
if bytes > 0: if bytes > 0:
return bytes, self._rxbuf(bytes) data = self._rxbuf(bytes)
return bytes, "" else:
data = ""
self.sl.l.release()
return bytes, data
def i2c_block_process_call(self, handle, reg, data): def i2c_block_process_call(self, handle, reg, data):
""" """
@ -2071,11 +2097,16 @@ class pi():
# I p3 len # I p3 len
## extension ## ## extension ##
# s len data bytes # s len data bytes
bytes = _u2i(_pigpio_command_ext(
self.sl, _PI_CMD_I2CPK, handle, reg, len(data), [data])) # Don't raise exception. Must release lock.
bytes = u2i(_pigpio_command_ext(
self.sl, _PI_CMD_I2CPK, handle, reg, len(data), [data]), False)
if bytes > 0: if bytes > 0:
return bytes, self._rxbuf(bytes) data = self._rxbuf(bytes)
return bytes, "" else:
data = ""
self.sl.l.release()
return bytes, data
def i2c_write_i2c_block_data(self, handle, reg, data): def i2c_write_i2c_block_data(self, handle, reg, data):
""" """
@ -2135,11 +2166,16 @@ class pi():
## extension ## ## extension ##
# I count # I count
extents = [struct.pack("I", count)] extents = [struct.pack("I", count)]
bytes = _u2i(_pigpio_command_ext(
self.sl, _PI_CMD_I2CRI, handle, reg, 4, extents)) # Don't raise exception. Must release lock.
bytes = u2i(_pigpio_command_ext(
self.sl, _PI_CMD_I2CRI, handle, reg, 4, extents), False)
if bytes > 0: if bytes > 0:
return bytes, self._rxbuf(bytes) data = self._rxbuf(bytes)
return bytes, "" else:
data = ""
self.sl.l.release()
return bytes, data
def spi_open(self, spi_channel, spi_baud, spi_flags=0): def spi_open(self, spi_channel, spi_baud, spi_flags=0):
""" """
@ -2231,11 +2267,15 @@ class pi():
# error path # error path
... ...
""" """
bytes = _u2i(_pigpio_command( # Don't raise exception. Must release lock.
self.sl, _PI_CMD_SPIR, handle, count)) bytes = u2i(_pigpio_command(
self.sl, _PI_CMD_SPIR, handle, count, False))
if bytes > 0: if bytes > 0:
return bytes, self._rxbuf(bytes) data = self._rxbuf(bytes)
return bytes, "" else:
data = ""
self.sl.l.release()
return bytes, data
def spi_write(self, handle, data): def spi_write(self, handle, data):
""" """
@ -2290,11 +2330,16 @@ class pi():
# I p3 len # I p3 len
## extension ## ## extension ##
# s len data bytes # s len data bytes
bytes = _u2i(_pigpio_command_ext(
self.sl, _PI_CMD_SPIX, handle, 0, len(data), [data])) # Don't raise exception. Must release lock.
bytes = u2i(_pigpio_command_ext(
self.sl, _PI_CMD_SPIX, handle, 0, len(data), [data]), False)
if bytes > 0: if bytes > 0:
return bytes, self._rxbuf(bytes) data = self._rxbuf(bytes)
return bytes, "" else:
data = ""
self.sl.l.release()
return bytes, data
def serial_open(self, tty, ser_baud, ser_flags=0): def serial_open(self, tty, ser_baud, ser_flags=0):
""" """
@ -2382,11 +2427,15 @@ class pi():
# process read data # process read data
... ...
""" """
bytes = _u2i(_pigpio_command(self.sl, _PI_CMD_SERR, handle, count)) # Don't raise exception. Must release lock.
bytes = u2i(
_pigpio_command(self.sl, _PI_CMD_SERR, handle, count, False))
if bytes > 0: if bytes > 0:
return bytes, self._rxbuf(bytes) data = self._rxbuf(bytes)
return bytes, "" else:
data = ""
self.sl.l.release()
return bytes, data
def serial_write(self, handle, data): def serial_write(self, handle, data):
""" """
@ -2436,7 +2485,7 @@ class pi():
level for pulse_len microseconds and then reset to not level. level for pulse_len microseconds and then reset to not level.
user_gpio:= 0-31 user_gpio:= 0-31
pulse_len:= 1-50 pulse_len:= 1-100
level:= 0-1 level:= 0-1
... ...
@ -2535,11 +2584,19 @@ class pi():
(s, pars) = pi.script_status(sid) (s, pars) = pi.script_status(sid)
... ...
""" """
status = _u2i(_pigpio_command(self.sl, _PI_CMD_PROCP, script_id, 0)) # Don't raise exception. Must release lock.
if status > 0: bytes = u2i(
params = struct.unpack('I10i', self.sl.s.recv(44)) _pigpio_command(self.sl, _PI_CMD_PROCP, script_id, 0, False))
return params[0], params[1:] if bytes > 0:
return status, () data = self._rxbuf(bytes)
pars = struct.unpack('11i', data)
status = pars[0]
params = pars[1:]
else:
status = bytes
params = ()
self.sl.l.release()
return status, params
def stop_script(self, script_id): def stop_script(self, script_id):
""" """
@ -2601,10 +2658,15 @@ class pi():
(count, data) = pi.bb_serial_read(4) (count, data) = pi.bb_serial_read(4)
... ...
""" """
bytes = _u2i(_pigpio_command(self.sl, _PI_CMD_SLR, user_gpio, 10000)) # Don't raise exception. Must release lock.
bytes = u2i(
_pigpio_command(self.sl, _PI_CMD_SLR, user_gpio, 10000, False))
if bytes > 0: if bytes > 0:
return bytes, self._rxbuf(bytes) data = self._rxbuf(bytes)
return bytes, "" else:
data = ""
self.sl.l.release()
return bytes, data
def bb_serial_read_close(self, user_gpio): def bb_serial_read_close(self, user_gpio):
@ -2956,8 +3018,8 @@ def xref():
PUD_OFF = 0 PUD_OFF = 0
PUD_UP = 2 PUD_UP = 2
pulse_len: 1-50 pulse_len: 1-100
A whole number. The length of the trigger pulse in microseconds.
pulses: pulses:
A list of class pulse objects defining the characteristics of a A list of class pulse objects defining the characteristics of a

View File

@ -1502,7 +1502,7 @@ level for pulseLen microseconds and then reset to not level.
.EX .EX
user_gpio: 0-31. user_gpio: 0-31.
.br .br
pulseLen: 1-50. pulseLen: 1-100.
.br .br
level: 0,1. level: 0,1.
.br .br
@ -3149,7 +3149,7 @@ PI_PUD_UP 2
.br .br
.IP "\fBpulseLen\fP" 0 .IP "\fBpulseLen\fP" 0
1-50, the length of a trigger pulse in microseconds. 1-100, the length of a trigger pulse in microseconds.
.br .br

View File

@ -1120,7 +1120,7 @@ level for pulseLen microseconds and then reset to not level.
. . . .
user_gpio: 0-31. user_gpio: 0-31.
pulseLen: 1-50. pulseLen: 1-100.
level: 0,1. level: 0,1.
. . . .
@ -2044,7 +2044,7 @@ PI_PUD_UP 2
. . . .
pulseLen:: pulseLen::
1-50, the length of a trigger pulse in microseconds. 1-100, the length of a trigger pulse in microseconds.
*pulses:: *pulses::
An array of pulsed to be added to a waveform. An array of pulsed to be added to a waveform.

View File

@ -3,7 +3,7 @@
from distutils.core import setup from distutils.core import setup
setup(name='pigpio', setup(name='pigpio',
version='1.9', version='1.10',
author='joan', author='joan',
author_email='joan@abyz.co.uk', author_email='joan@abyz.co.uk',
maintainer='joan', maintainer='joan',

2
x_pigs
View File

@ -86,7 +86,7 @@ s=$(pigs pfs $GPIO 800)
if [[ $s = 800 ]]; then echo "PFS-b ok"; else echo "PFS-b fail ($s)"; fi if [[ $s = 800 ]]; then echo "PFS-b ok"; else echo "PFS-b fail ($s)"; fi
s=$(pigs pigpv) s=$(pigs pigpv)
if [[ $s = 19 ]]; then echo "PIGPV ok"; else echo "PIGPV fail ($s)"; fi if [[ $s = 20 ]]; then echo "PIGPV ok"; else echo "PIGPV fail ($s)"; fi
s=$(pigs prs $GPIO 255) s=$(pigs prs $GPIO 255)
if [[ $s = 250 ]]; then echo "PRG-a ok"; else echo "PRG-a fail ($s)"; fi if [[ $s = 250 ]]; then echo "PRG-a ok"; else echo "PRG-a fail ($s)"; fi

2
x_pipe
View File

@ -119,7 +119,7 @@ if [[ $s = 800 ]]; then echo "PFS-b ok"; else echo "PFS-b fail ($s)"; fi
echo "pigpv" >/dev/pigpio echo "pigpv" >/dev/pigpio
read -t 1 s </dev/pigout read -t 1 s </dev/pigout
if [[ $s = 19 ]]; then echo "PIGPV ok"; else echo "PIGPV fail ($s)"; fi if [[ $s = 20 ]]; then echo "PIGPV ok"; else echo "PIGPV fail ($s)"; fi
echo "prs $GPIO 255" >/dev/pigpio echo "prs $GPIO 255" >/dev/pigpio
read -t 1 s </dev/pigout read -t 1 s </dev/pigout