Merge pull request #365 from joan2937/v77-release

V77 release
This commit is contained in:
Guy McSwain 2020-06-28 10:24:11 -05:00 committed by GitHub
commit a2997c58a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 120 additions and 170 deletions

2
.gitignore vendored
View File

@ -13,6 +13,8 @@ build
dist
*.egg-info
tmp/
# DOC files
DOC/dbase/pigpio.sqlite.*
DOC/tmp

Binary file not shown.

View File

@ -501,6 +501,13 @@ gpioHardwareRevision
Related code.
?4|https://pypi.org/project/nrf24/|2020-04-20|NRF24
Python Package Index (Pypi) NRF24 module.
pip install nrf24
?4|https://github.com/bjarne-hansen/py-nrf24|2020-04-20|NRF24
Code and example usage of the Pypi NRF24 module. Cleaned up and added support for reading from multiple pipes using open_reading_pipe(pipe, address) and open_writing_pipe(address) in order to be more "compatible" with the way NRF24 is used on Arduinos.
?4|https://github.com/stripcode/pigpio-stepper-motor|2016-08-12|Stepper Motor
Stepper motor code.

View File

@ -320,7 +320,7 @@ WVAG trips :: Add generic pulses to waveform :: gpioWaveAddGeneric
WVAS u b db sb o bvs :: Add serial data to waveform :: gpioWaveAddSerial
WVCRE :: Create a waveform :: gpioWaveCreate
WVCAP :: Create a waveform of fixed size :: gpioWaveCreatePad
WVCAP percent :: Create a waveform of fixed size :: gpioWaveCreatePad
WVDEL wid :: Delete selected waveform :: gpioWaveDelete
WVTX wid :: Transmits waveform once :: gpioWaveTxSend
@ -2610,7 +2610,7 @@ $ pigs wvas 7 38400 8 2 0 0x41 0x42
WVTAT ::
This command returns the id of the waveform currently
being transmitted.
being transmitted. Chained waves are not supported.
Returns the waveform id or one of the following special
values:
@ -2786,20 +2786,13 @@ ERROR: attempt to create an empty waveform
WVCAP ::
Similar to [*WVCRE*], this command creates a waveform but pads the consumed
resources to a fixed size, specified as a percent of total resource.
Padded waves of equal size can be re-cycled efficiently allowing newly
created waves to re-use the resources of deleted waves of the same dimension.
Create a waveform of fixed size. Similar to [*WVCRE*], this command creates a waveform but pads the consumed resources to a fixed size, specified as a [*percent*] of the total resources. Padded waves of equal size can be re-cycled efficiently allowing newly created waves to re-use the resources of deleted waves of the same dimension.
Upon success a wave id (>=0) is returned. On error a negative status
code will be returned.
Upon success a wave id (>=0) is returned. On error a negative status code will be returned.
The data provided by the [*WVAG*] and [*WVAS*] commands are
consumed by this command.
The data provided by the [*WVAG*] and [*WVAS*] commands are consumed by this command.
As many waveforms may be created as there is space available.
The wave id is passed to [*WVTX*] or [*WVTXR*] to specify the
waveform to transmit.
As many waveforms may be created as there is space available. The wave id is passed to [*WVTX*] or [*WVTXR*] to specify the waveform to transmit.
Normal usage would be
@ -2813,8 +2806,9 @@ Step 4. [*WVTX*] or [*WVTXR*] with the id of the waveform to transmit.
Repeat steps 2 - 4 as needed.
Step 5. Any wave id can now be deleted and another wave of the same size
can be created in its place.
Step 5. Any wave id can now be deleted and another wave of the same size can be created in its place.
Example
...
# Create a wave that consumes 50% of the total resource:
@ -3200,6 +3194,11 @@ must match an entry in /opt/pigpio/access.
pdc :: hardware PWM dutycycle (0-1000000)
The command expects a dutycycle.
percent :: percent (1-100)
The percent of wave resources to allocate to a wave. It can be useful
to create waves of fixed sizes to prevent wave fragmentation (where
there are plenty of resources but not a large enough contiguous space).
pf :: hardware PWM frequency (1-125M, 1-187.5M for the BCM2711)
The command expects a frequency.

View File

@ -1,7 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta name="generator" content="Bluefish 2.2.10" >
<meta name="generator" content="Bluefish 2.2.11" >
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>download</title>
</head>
@ -14,12 +14,14 @@ pigpiod).<br>
compilation of pigpio.c, takes 100 seconds on early model
Pis.&nbsp; Be patient.&nbsp; The overall install takes just over 3
minutes.</span><br style="font-weight: bold;">
<h3>Download and install (V75)<br></h3>
<code>wget https://github.com/joan2937/pigpio/archive/v75.zip<br>
unzip v75.zip<br>
cd pigpio-75<br>
<h3>Download and install latest version<br></h3>
<code>
wget https://github.com/joan2937/pigpio/archive/master.zip<br>
unzip master.zip<br>
cd pigpio-master<br>
make<br>
sudo make install<br></code><br>
sudo make install<br>
</code>
<br>
If the Python part of the install fails it may be because you need
the setup tools.<br>

View File

@ -10,13 +10,6 @@
pigpio is a library for the Raspberry which allows control of the
General Purpose Input Outputs (GPIO).&nbsp; pigpio works on all
versions of the Pi.
<p><b>At the moment pigpio on the Pi4B is experimental. I am not
sure if the DMA channels being used are safe. The Pi4B defaults are
primary channel 7, secondary channel 6. If these channels do not
work you will have to experiment. You can set the channels used by
the pigpio daemon by invoking it with the -d and -e options, e.g.
<small>sudo pigpiod -d 5 -e 8</small> to specify primary 5,
secondary 8.</b></p>
<p><a href="download.html">Download</a><br></p>
<h3>Features<br></h3>
<ul>
@ -627,7 +620,7 @@ links.<br></p>
Languages</h3>
<p>There are several third party projects which provide wrappers
for pigpio.<br></p>
<p>Some I am aware of are:<br></p>
<p>Some are listed here:<br></p>
<ul>
<li><a href="https://github.com/skvamme/pigpio">Erlang</a>
(skvamme)</li>
@ -642,7 +635,9 @@ diozero, a high level wrapper around pigpio, Pi4J, wiringPi etc
"https://github.com/unosquare/pigpio-dotnet">.NET/mono</a>
(unosquare)</li>
<li><a href="https://github.com/fivdi/pigpio">Node.js</a>
(fivdi)</li>
A wrapper for the pigpio C library (fivdi)</li>
<li><a href="https://github.com/guymcswain/pigpio-client">Node.js</a>
A client for pigpio socket interface (guymcswain)</li>
<li><a href="https://metacpan.org/pod/RPi::PIGPIO">Perl</a> (Gligan
Calin Horea)</li>
<li><a href=
@ -652,6 +647,8 @@ Calin Horea)</li>
"https://github.com/vasmalltalk/pigpio-vast">Smalltalk</a>(Instantiations)</li>
<li><a href=
"https://github.com/UBogun/Xojo-pigpio">Xojo</a>(UBogun)</li>
<li><a href=
"https://github.com/eugenedakin/pigpio-GPIO">Xojo</a>(Eugene Dakin)</li>
</ul>
<hr style="width: 100%; height: 2px;">
<p><font size="-2">The PWM and servo pulses are timed using the DMA

View File

@ -189,6 +189,28 @@ error PI_INITIALISED.
.br
.br
If you intend to rely on signals sent to your application, you should
turn off the internal signal handling as shown in this example:
.br
.br
.EX
int cfg = gpioCfgGetInternals();
.br
cfg |= PI_CFG_NOSIGHANDLER; // (1<<10)
.br
gpioCfgSetInternals(cfg);
.br
int status = gpioInitialise();
.br
.EE
.br
.br
.SH OVERVIEW
@ -689,8 +711,6 @@ gpioCfgMemAlloc Configure DMA memory allocation mode
gpioCfgNetAddr Configure allowed network addresses
.br
.br
gpioCfgInternals Configure misc. internals (DEPRECATED)
.br
gpioCfgGetInternals Get internal configuration settings
.br
@ -3026,7 +3046,7 @@ int main(int argc, char *argv[])
.IP "\fBint gpioWaveTxAt(void)\fP"
.IP "" 4
This function returns the id of the waveform currently being
transmitted.
transmitted using \fBgpioWaveTxSend\fP. Chained waves are not supported.
.br
@ -7896,22 +7916,6 @@ numSockAddr: 0-256 (0 means all addresses allowed)
.EE
.IP "\fBint gpioCfgInternals(unsigned cfgWhat, unsigned cfgVal)\fP"
.IP "" 4
Used to tune internal settings.
.br
.br
.EX
cfgWhat: see source code
.br
cfgVal: see source code
.br
.EE
.IP "\fBuint32_t gpioCfgGetInternals(void)\fP"
.IP "" 4
This function returns the current library internal configuration
@ -7932,6 +7936,10 @@ cfgVal: see source code
.EE
.br
.br
.IP "\fBint gpioCustom1(unsigned arg1, unsigned arg2, char *argx, unsigned argc)\fP"
.IP "" 4
This function is available for user customisation.

View File

@ -25,7 +25,7 @@ OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org/>
*/
/* pigpio version 76 */
/* pigpio version 77 */
/* include ------------------------------------------------------- */
@ -950,6 +950,7 @@ typedef struct
uint32_t nfRBitV;
uint32_t gfSteadyUs;
uint8_t gfInitialised;
uint32_t gfTick;
uint32_t gfLBitV;
uint32_t gfRBitV;
@ -3000,7 +3001,9 @@ static void waveCBsOOLs(int *numCBs, int *numBOOLs, int *numTOOLs)
for (i=0; i<numWaves; i++)
{
if (waves[i].gpioOn || waves[i].gpioOff) {numCB++; numBOOL++;}
if (waves[i].gpioOn) {numBOOL++;}
if (waves[i].gpioOff) {numBOOL++;}
if (waves[i].gpioOn || waves[i].gpioOff) {numCB++;}
if (waves[i].flags & WAVE_FLAG_READ) {numCB++; numTOOL++;}
if (waves[i].flags & WAVE_FLAG_TICK) {numCB++; numTOOL++;}
@ -5683,7 +5686,7 @@ unsigned alert_delays[]=
static void alertGlitchFilter(gpioSample_t *sample, int numSamples)
{
int i, j, diff;
uint32_t steadyUs, changedTick, RBitV, LBitV;
uint32_t steadyUs, changedTick, RBitV, LBitV, initialised;
uint32_t bit, bitV;
for (i=0; i<=PI_MAX_USER_GPIO; i++)
@ -5692,6 +5695,17 @@ static void alertGlitchFilter(gpioSample_t *sample, int numSamples)
if (monitorBits & bit & gFilterBits)
{
initialised = gpioAlert[i].gfInitialised;
if (!initialised && numSamples > 0)
{
/* Initialise filter with first sample */
bitV = sample[0].level & bit;
gpioAlert[i].gfRBitV = bitV;
gpioAlert[i].gfLBitV = bitV;
gpioAlert[i].gfTick = sample[0].tick;
gpioAlert[i].gfInitialised = 1;
}
steadyUs = gpioAlert[i].gfSteadyUs;
RBitV = gpioAlert[i].gfRBitV;
LBitV = gpioAlert[i].gfLBitV;
@ -12333,18 +12347,8 @@ int gpioGlitchFilter(unsigned gpio, unsigned steady)
if (steady)
{
gpioAlert[gpio].gfTick = systReg[SYST_CLO];
if (gpioRead_Bits_0_31() & (1<<gpio))
{
gpioAlert[gpio].gfLBitV = (1<<gpio);
gpioAlert[gpio].gfRBitV = 0 ;
}
else
{
gpioAlert[gpio].gfLBitV = 0 ;
gpioAlert[gpio].gfRBitV = (1<<gpio);
}
/* Initialise values next time we process alerts */
gpioAlert[gpio].gfInitialised = 0;
}
gpioAlert[gpio].gfSteadyUs = steady;
@ -13998,44 +14002,6 @@ int gpioCfgSetInternals(uint32_t cfgVal)
return 0;
}
int gpioCfgInternals(unsigned cfgWhat, unsigned cfgVal)
{
int retVal = PI_BAD_CFG_INTERNAL;
DBG(DBG_USER, "cfgWhat=%u, cfgVal=%d", cfgWhat, cfgVal);
switch(cfgWhat)
{
case 562484977:
if (cfgVal) gpioCfg.internals |= PI_CFG_STATS;
else gpioCfg.internals &= (~PI_CFG_STATS);
DBG(DBG_ALWAYS, "show stats is %u", cfgVal);
retVal = 0;
break;
case 984762879:
if ((cfgVal >= DBG_ALWAYS) && (cfgVal <= DBG_MAX_LEVEL))
{
gpioCfg.dbgLevel = cfgVal;
gpioCfg.internals = (gpioCfg.internals & (~0xF)) | cfgVal;
DBG(DBG_ALWAYS, "Debug level is %u", cfgVal);
retVal = 0;
}
break;
}
return retVal;
}
/* include any user customisations */

View File

@ -30,7 +30,7 @@ For more information, please refer to <http://unlicense.org/>
#include <stdint.h>
#include <pthread.h>
#define PIGPIO_VERSION 76
#define PIGPIO_VERSION 77
/*TEXT
@ -106,6 +106,16 @@ return error PI_NOT_INITIALISED.
If the library is initialised the [*gpioCfg**] functions will return
error PI_INITIALISED.
If you intend to rely on signals sent to your application, you should
turn off the internal signal handling as shown in this example:
. .
int cfg = gpioCfgGetInternals();
cfg |= PI_CFG_NOSIGHANDLER; // (1<<10)
gpioCfgSetInternals(cfg);
int status = gpioInitialise();
. .
TEXT*/
/*OVERVIEW
@ -377,7 +387,6 @@ gpioCfgSocketPort Configure socket port
gpioCfgMemAlloc Configure DMA memory allocation mode
gpioCfgNetAddr Configure allowed network addresses
gpioCfgInternals Configure misc. internals (DEPRECATED)
gpioCfgGetInternals Get internal configuration settings
gpioCfgSetInternals Set internal configuration settings
@ -2181,7 +2190,7 @@ D*/
int gpioWaveTxAt(void);
/*D
This function returns the id of the waveform currently being
transmitted.
transmitted using [*gpioWaveTxSend*]. Chained waves are not supported.
Returns the waveform id or one of the following special values:
@ -4975,18 +4984,6 @@ numSockAddr: 0-256 (0 means all addresses allowed)
D*/
/*F*/
int gpioCfgInternals(unsigned cfgWhat, unsigned cfgVal);
/*D
Used to tune internal settings.
. .
cfgWhat: see source code
cfgVal: see source code
. .
D*/
/*F*/
uint32_t gpioCfgGetInternals(void);
/*D
@ -5003,6 +5000,7 @@ settings.
. .
cfgVal: see source code
. .
D*/

View File

@ -2466,7 +2466,7 @@ class pi():
def wave_tx_at(self):
"""
Returns the id of the waveform currently being
transmitted.
transmitted using [*wave_send**]. Chained waves are not supported.
Returns the waveform id or one of the following special
values:
@ -5055,7 +5055,7 @@ class pi():
by calling the tally function. The count may be reset to zero
by calling the reset_tally function.
The callback may be cancelled by calling the event_cancel function.
The callback may be canceled by calling the cancel function.
An event may have multiple callbacks (although I can't think of
a reason to do so).
@ -5072,7 +5072,7 @@ class pi():
cb2.reset_tally()
cb1.event_cancel() # To cancel callback cb1.
cb1.cancel() # To cancel callback cb1.
...
"""

View File

@ -2829,7 +2829,7 @@ int main(int argc, char *argv[])
.IP "\fBint wave_tx_at(int pi)\fP"
.IP "" 4
This function returns the id of the waveform currently being
transmitted.
transmitted by \fBwave_send*\fP. Chained waves are not supported.
.br

View File

@ -1609,7 +1609,7 @@ D*/
int wave_tx_at(int pi);
/*D
This function returns the id of the waveform currently being
transmitted.
transmitted by [*wave_send**]. Chained waves are not supported.
. .
pi: >=0 (as returned by [*pigpio_start*]).

36
pigs.1
View File

@ -548,8 +548,8 @@ Add serial data to waveform
.B WVCRE
Create a waveform
.P
.B WVCAP
Create a waveform of fixed size
.B WVCAP percent
Create a waveform of fixed size
.P
.B WVDEL wid
Delete selected waveform
@ -4823,7 +4823,7 @@ $ pigs wvas 7 38400 8 2 0 0x41 0x42
.br
This command returns the id of the waveform currently
being transmitted.
being transmitted. Chained waves are not supported.
.br
Returns the waveform id or one of the following special
@ -5142,27 +5142,20 @@ ERROR: attempt to create an empty waveform
.br
.IP "\fBWVCAP \fP - Create a waveform of fixed size"
.IP "\fBWVCAP percent\fP - Create a waveform of fixed size"
.IP "" 4
.br
Similar to \fBWVCRE\fP, this command creates a waveform but pads the consumed
resources to a fixed size, specified as a percent of total resource.
Padded waves of equal size can be re-cycled efficiently allowing newly
created waves to re-use the resources of deleted waves of the same dimension.
Create a waveform of fixed size. Similar to \fBWVCRE\fP, this command creates a waveform but pads the consumed resources to a fixed size, specified as a \fBpercent\fP of the total resources. Padded waves of equal size can be re-cycled efficiently allowing newly created waves to re-use the resources of deleted waves of the same dimension.
.br
Upon success a wave id (>=0) is returned. On error a negative status
code will be returned.
Upon success a wave id (>=0) is returned. On error a negative status code will be returned.
.br
The data provided by the \fBWVAG\fP and \fBWVAS\fP commands are
consumed by this command.
The data provided by the \fBWVAG\fP and \fBWVAS\fP commands are consumed by this command.
.br
As many waveforms may be created as there is space available.
The wave id is passed to \fBWVTX\fP or \fBWVTXR\fP to specify the
waveform to transmit.
As many waveforms may be created as there is space available. The wave id is passed to \fBWVTX\fP or \fBWVTXR\fP to specify the waveform to transmit.
.br
Normal usage would be
@ -5183,8 +5176,10 @@ Step 4. \fBWVTX\fP or \fBWVTXR\fP with the id of the waveform to transmit.
Repeat steps 2 - 4 as needed.
.br
Step 5. Any wave id can now be deleted and another wave of the same size
can be created in its place.
Step 5. Any wave id can now be deleted and another wave of the same size can be created in its place.
.br
Example
.br
@ -5881,6 +5876,13 @@ The command expects a dutycycle.
.br
.IP "\fBpercent\fP - percent (1-100)" 0
The percent of wave resources to allocate to a wave. It can be useful
to create waves of fixed sizes to prevent wave fragmentation (where
there are plenty of resources but not a large enough contiguous space).
.br
.IP "\fBpf\fP - hardware PWM frequency (1-125M, 1-187.5M for the BCM2711)" 0
The command expects a frequency.

View File

@ -1,31 +0,0 @@
#!/bin/sh
### BEGIN INIT INFO
# Provides: pigpiod
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: pigpio daemon
# Description: pigpio daemon required to control GPIO pins via pigpio $
### END INIT INFO
# Actions
case "$1" in
start)
pigpiod
;;
stop)
pkill pigpiod
;;
restart)
pkill pigpiod
pigpiod
;;
*)
echo "Usage: $0 start" >&2
exit 3
;;
esac
exit 0