This commit is contained in:
joan 2016-03-01 21:41:36 +00:00
parent 89fca37587
commit 46eb4d6056
15 changed files with 1803 additions and 1486 deletions

View File

@ -26,7 +26,7 @@ For more information, please refer to <http://unlicense.org/>
*/ */
/* /*
This version is for pigpio version 46+ This version is for pigpio version 47+
*/ */
#include <stdio.h> #include <stdio.h>
@ -172,6 +172,7 @@ cmdInfo_t cmdInfo[]=
{PI_CMD_WVAG, "WVAG", 192, 2}, // gpioWaveAddGeneric {PI_CMD_WVAG, "WVAG", 192, 2}, // gpioWaveAddGeneric
{PI_CMD_WVAS, "WVAS", 196, 2}, // gpioWaveAddSerial {PI_CMD_WVAS, "WVAS", 196, 2}, // gpioWaveAddSerial
{PI_CMD_WVTAT, "WVTAT", 101, 2}, // gpioWaveTxAt
{PI_CMD_WVBSY, "WVBSY", 101, 2}, // gpioWaveTxBusy {PI_CMD_WVBSY, "WVBSY", 101, 2}, // gpioWaveTxBusy
{PI_CMD_WVCHA, "WVCHA", 197, 0}, // gpioWaveChain {PI_CMD_WVCHA, "WVCHA", 197, 0}, // gpioWaveChain
{PI_CMD_WVCLR, "WVCLR", 101, 0}, // gpioWaveClear {PI_CMD_WVCLR, "WVCLR", 101, 0}, // gpioWaveClear
@ -235,15 +236,15 @@ cmdInfo_t cmdInfo[]=
char * cmdUsage = "\n\ char * cmdUsage = "\n\
BC1 bits Clear gpios in bank 1\n\ BC1 bits Clear GPIO in bank 1\n\
BC2 bits Clear gpios in bank 2\n\ BC2 bits Clear GPIO in bank 2\n\
BI2CC sda Close bit bang I2C\n\ BI2CC sda Close bit bang I2C\n\
BI2CO sda scl baud | Open bit bang I2C\n\ BI2CO sda scl baud | Open bit bang I2C\n\
BI2CZ sda ... I2C bit bang multiple transactions\n\ BI2CZ sda ... I2C bit bang multiple transactions\n\
BR1 Read bank 1 gpios\n\ BR1 Read bank 1 GPIO\n\
BR2 Read bank 2 gpios\n\ BR2 Read bank 2 GPIO\n\
BS1 bits Set gpios in bank 2\n\ BS1 bits Set GPIO in bank 2\n\
BS2 bits Set gpios in bank 2\n\ BS2 bits Set GPIO in bank 2\n\
\n\ \n\
CF1 ... Custom function 1\n\ CF1 ... Custom function 1\n\
CF2 ... Custom function 2\n\ CF2 ... Custom function 2\n\
@ -251,11 +252,11 @@ CF2 ... Custom function 2\n\
CGI Configuration get internals\n\ CGI Configuration get internals\n\
CSI v Configuration set internals\n\ CSI v Configuration set internals\n\
\n\ \n\
FG g steady Set glitch filter on gpio\n\ FG g steady Set glitch filter on GPIO\n\
FN g steady active | Set noise filter on gpio\n\ FN g steady active | Set noise filter on GPIO\n\
\n\ \n\
GDC g Get PWM dutycycle for gpio\n\ GDC g Get PWM dutycycle for GPIO\n\
GPW g Get servo pulsewidth for gpio\n\ GPW g Get servo pulsewidth for GPIO\n\
\n\ \n\
H/HELP Display command help\n\ H/HELP Display command help\n\
HC g f Set hardware clock frequency\n\ HC g f Set hardware clock frequency\n\
@ -281,8 +282,8 @@ I2CWS h b SMBus Write Byte: write byte\n\
I2CWW h r word SMBus Write Word Data: write word to register\n\ I2CWW h r word SMBus Write Word Data: write word to register\n\
I2CZ h ... I2C multiple transactions\n\ I2CZ h ... I2C multiple transactions\n\
\n\ \n\
M/MODES g mode Set gpio mode\n\ M/MODES g mode Set GPIO mode\n\
MG/MODEG g Get gpio mode\n\ MG/MODEG g Get GPIO mode\n\
MICS n Delay for microseconds\n\ MICS n Delay for microseconds\n\
MILS n Delay for milliseconds\n\ MILS n Delay for milliseconds\n\
\n\ \n\
@ -291,24 +292,24 @@ NC h Close notification\n\
NO Request a notification\n\ NO Request a notification\n\
NP h Pause notification\n\ NP h Pause notification\n\
\n\ \n\
P/PWM g v Set gpio PWM value\n\ P/PWM g v Set GPIO PWM value\n\
PARSE text Validate script\n\ PARSE text Validate script\n\
PFG g Get gpio PWM frequency\n\ PFG g Get GPIO PWM frequency\n\
PFS g v Set gpio PWM frequency\n\ PFS g v Set GPIO PWM frequency\n\
PIGPV Get pigpio library version\n\ PIGPV Get pigpio library version\n\
PRG g Get gpio PWM range\n\ PRG g Get GPIO PWM range\n\
PROC text Store script\n\ PROC text Store script\n\
PROCD sid Delete script\n\ PROCD sid Delete script\n\
PROCP sid Get script status and parameters\n\ PROCP sid Get script status and parameters\n\
PROCR sid ... Run script\n\ PROCR sid ... Run script\n\
PROCS sid Stop script\n\ PROCS sid Stop script\n\
PRRG g Get gpio PWM real range\n\ PRRG g Get GPIO PWM real range\n\
PRS g v Set gpio PWM range\n\ PRS g v Set GPIO PWM range\n\
PUD g pud Set gpio pull up/down\n\ PUD g pud Set GPIO pull up/down\n\
\n\ \n\
R/READ g Read gpio level\n\ R/READ g Read GPIO level\n\
\n\ \n\
S/SERVO g v Set gpio servo pulsewidth\n\ S/SERVO g v Set GPIO servo pulsewidth\n\
SERC h Close serial handle\n\ SERC h Close serial handle\n\
SERDA h Check for serial data ready to read\n\ SERDA h Check for serial data ready to read\n\
SERO text baud flags | Open serial device at baud with flags\n\ SERO text baud flags | Open serial device at baud with flags\n\
@ -316,9 +317,9 @@ SERR h n Read bytes from serial handle\n\
SERRB h Read byte from serial handle\n\ SERRB h Read byte from serial handle\n\
SERW h ... Write bytes to serial handle\n\ SERW h ... Write bytes to serial handle\n\
SERWB h byte Write byte to serial handle\n\ SERWB h byte Write byte to serial handle\n\
SLR g v Read bit bang serial data from gpio\n\ SLR g v Read bit bang serial data from GPIO\n\
SLRC g Close gpio for bit bang serial data\n\ SLRC g Close GPIO for bit bang serial data\n\
SLRO g baud bitlen | Open gpio for bit bang serial data\n\ SLRO g baud bitlen | Open GPIO for bit bang serial data\n\
SLRI g invert Invert serial logic (1 invert, 0 normal)\n\ SLRI g invert Invert serial logic (1 invert, 0 normal)\n\
SPIC h SPI close handle\n\ SPIC h SPI close handle\n\
SPIO channel baud flags | SPI open channel at baud with flags\n\ SPIO channel baud flags | SPI open channel at baud with flags\n\
@ -327,10 +328,10 @@ SPIW h ... SPI write bytes to handle\n\
SPIX h ... SPI transfer bytes to handle\n\ SPIX h ... SPI transfer bytes to handle\n\
\n\ \n\
T/TICK Get current tick\n\ T/TICK Get current tick\n\
TRIG g micros l Trigger level for micros on gpio\n\ TRIG g micros l Trigger level for micros on GPIO\n\
\n\ \n\
W/WRITE g l Write level to gpio\n\ W/WRITE g l Write level to GPIO\n\
WDOG g millis Set millisecond watchdog on gpio\n\ WDOG g millis Set millisecond watchdog on GPIO\n\
WVAG triplets Wave add generic pulses\n\ WVAG triplets Wave add generic pulses\n\
WVAS g baud bitlen stopbits offset ... | Wave add serial data\n\ WVAS g baud bitlen stopbits offset ... | Wave add serial data\n\
WVBSY Check if wave busy\n\ WVBSY Check if wave busy\n\
@ -345,6 +346,7 @@ WVNEW Start a new empty wave\n\
WVSC 0,1,2 Wave get DMA control block stats\n\ WVSC 0,1,2 Wave get DMA control block stats\n\
WVSM 0,1,2 Wave get micros stats\n\ WVSM 0,1,2 Wave get micros stats\n\
WVSP 0,1,2 Wave get pulses stats\n\ WVSP 0,1,2 Wave get pulses stats\n\
WVTAT Returns the current transmitting wave\n\
WVTX wid Transmit wave as one-shot\n\ WVTX wid Transmit wave as one-shot\n\
WVTXM wid wmde Transmit wave using mode\n\ WVTXM wid wmde Transmit wave using mode\n\
WVTXR wid Transmit wave repeatedly\n\ WVTXR wid Transmit wave repeatedly\n\
@ -364,8 +366,8 @@ typedef struct
static errInfo_t errInfo[]= static errInfo_t errInfo[]=
{ {
{PI_INIT_FAILED , "pigpio initialisation failed"}, {PI_INIT_FAILED , "pigpio initialisation failed"},
{PI_BAD_USER_GPIO , "gpio not 0-31"}, {PI_BAD_USER_GPIO , "GPIO not 0-31"},
{PI_BAD_GPIO , "gpio not 0-53"}, {PI_BAD_GPIO , "GPIO not 0-53"},
{PI_BAD_MODE , "mode not 0-7"}, {PI_BAD_MODE , "mode not 0-7"},
{PI_BAD_LEVEL , "level not 0-1"}, {PI_BAD_LEVEL , "level not 0-1"},
{PI_BAD_PUD , "pud not 0-2"}, {PI_BAD_PUD , "pud not 0-2"},
@ -400,11 +402,11 @@ static errInfo_t errInfo[]=
{PI_BAD_WAVE_BAUD , "baud rate not 50-250K(RX)/50-1M(TX)"}, {PI_BAD_WAVE_BAUD , "baud rate not 50-250K(RX)/50-1M(TX)"},
{PI_TOO_MANY_PULSES , "waveform has too many pulses"}, {PI_TOO_MANY_PULSES , "waveform has too many pulses"},
{PI_TOO_MANY_CHARS , "waveform has too many chars"}, {PI_TOO_MANY_CHARS , "waveform has too many chars"},
{PI_NOT_SERIAL_GPIO , "no bit bang serial read in progress on gpio"}, {PI_NOT_SERIAL_GPIO , "no bit bang serial read in progress on GPIO"},
{PI_BAD_SERIAL_STRUC , "bad (null) serial structure parameter"}, {PI_BAD_SERIAL_STRUC , "bad (null) serial structure parameter"},
{PI_BAD_SERIAL_BUF , "bad (null) serial buf parameter"}, {PI_BAD_SERIAL_BUF , "bad (null) serial buf parameter"},
{PI_NOT_PERMITTED , "no permission to update gpio"}, {PI_NOT_PERMITTED , "no permission to update GPIO"},
{PI_SOME_PERMITTED , "no permission to update one or more gpios"}, {PI_SOME_PERMITTED , "no permission to update one or more GPIO"},
{PI_BAD_WVSC_COMMND , "bad WVSC subcommand"}, {PI_BAD_WVSC_COMMND , "bad WVSC subcommand"},
{PI_BAD_WVSM_COMMND , "bad WVSM subcommand"}, {PI_BAD_WVSM_COMMND , "bad WVSM subcommand"},
{PI_BAD_WVSP_COMMND , "bad WVSP subcommand"}, {PI_BAD_WVSP_COMMND , "bad WVSP subcommand"},
@ -412,7 +414,7 @@ static errInfo_t errInfo[]=
{PI_BAD_SCRIPT , "invalid script"}, {PI_BAD_SCRIPT , "invalid script"},
{PI_BAD_SCRIPT_ID , "unknown script id"}, {PI_BAD_SCRIPT_ID , "unknown script id"},
{PI_BAD_SER_OFFSET , "add serial data offset > 30 minute"}, {PI_BAD_SER_OFFSET , "add serial data offset > 30 minute"},
{PI_GPIO_IN_USE , "gpio already in use"}, {PI_GPIO_IN_USE , "GPIO already in use"},
{PI_BAD_SERIAL_COUNT , "must read at least a byte at a time"}, {PI_BAD_SERIAL_COUNT , "must read at least a byte at a time"},
{PI_BAD_PARAM_NUM , "script parameter id not 0-9"}, {PI_BAD_PARAM_NUM , "script parameter id not 0-9"},
{PI_DUP_TAG , "script has duplicate tag"}, {PI_DUP_TAG , "script has duplicate tag"},
@ -454,10 +456,10 @@ static errInfo_t errInfo[]=
{PI_SPI_XFER_FAILED , "spi xfer/read/write failed"}, {PI_SPI_XFER_FAILED , "spi xfer/read/write failed"},
{PI_BAD_POINTER , "bad (NULL) pointer"}, {PI_BAD_POINTER , "bad (NULL) pointer"},
{PI_NO_AUX_SPI , "need a B+ for auxiliary SPI"}, {PI_NO_AUX_SPI , "need a B+ for auxiliary SPI"},
{PI_NOT_PWM_GPIO , "gpio is not in use for PWM"}, {PI_NOT_PWM_GPIO , "GPIO is not in use for PWM"},
{PI_NOT_SERVO_GPIO , "gpio is not in use for servo pulses"}, {PI_NOT_SERVO_GPIO , "GPIO is not in use for servo pulses"},
{PI_NOT_HCLK_GPIO , "gpio has no hardware clock"}, {PI_NOT_HCLK_GPIO , "GPIO has no hardware clock"},
{PI_NOT_HPWM_GPIO , "gpio has no hardware PWM"}, {PI_NOT_HPWM_GPIO , "GPIO has no hardware PWM"},
{PI_BAD_HPWM_FREQ , "hardware PWM frequency not 1-125M"}, {PI_BAD_HPWM_FREQ , "hardware PWM frequency not 1-125M"},
{PI_BAD_HPWM_DUTY , "hardware PWM dutycycle not 0-1M"}, {PI_BAD_HPWM_DUTY , "hardware PWM dutycycle not 0-1M"},
{PI_BAD_HCLK_FREQ , "hardware clock frequency not 4689-250M"}, {PI_BAD_HCLK_FREQ , "hardware clock frequency not 4689-250M"},
@ -470,7 +472,7 @@ static errInfo_t errInfo[]=
{PI_TOO_MANY_SEGS , "too many I2C transaction segments"}, {PI_TOO_MANY_SEGS , "too many I2C transaction segments"},
{PI_BAD_I2C_SEG , "an I2C transaction segment failed"}, {PI_BAD_I2C_SEG , "an I2C transaction segment failed"},
{PI_BAD_SMBUS_CMD , "SMBus command not supported by driver"}, {PI_BAD_SMBUS_CMD , "SMBus command not supported by driver"},
{PI_NOT_I2C_GPIO , "no bit bang I2C in progress on gpio"}, {PI_NOT_I2C_GPIO , "no bit bang I2C in progress on GPIO"},
{PI_BAD_I2C_WLEN , "bad I2C write length"}, {PI_BAD_I2C_WLEN , "bad I2C write length"},
{PI_BAD_I2C_RLEN , "bad I2C read length"}, {PI_BAD_I2C_RLEN , "bad I2C read length"},
{PI_BAD_I2C_CMD , "bad I2C command"}, {PI_BAD_I2C_CMD , "bad I2C command"},

429
pigpio.3

File diff suppressed because it is too large Load Diff

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 46 */ /* pigpio version 47 */
/* include ------------------------------------------------------- */ /* include ------------------------------------------------------- */
@ -2181,6 +2181,8 @@ static int myDoCommand(uint32_t *p, unsigned bufSize, char *buf)
} }
break; break;
case PI_CMD_WVTAT: res = gpioWaveTxAt(); break;
case PI_CMD_WVTX: case PI_CMD_WVTX:
res = gpioWaveTxSend(p[1], PI_WAVE_MODE_ONE_SHOT); break; res = gpioWaveTxSend(p[1], PI_WAVE_MODE_ONE_SHOT); break;
@ -4789,6 +4791,53 @@ static unsigned dmaNowAtICB(void)
/* ----------------------------------------------------------------------- */ /* ----------------------------------------------------------------------- */
static int dmaNowAtOCB(void)
{
unsigned cb;
unsigned page;
uint32_t cbAddr;
cbAddr = dmaOut[DMA_CONBLK_AD];
if (!cbAddr) return -PI_NO_TX_WAVE;
page = 0;
/* which page are we dma'ing? */
while (1)
{
cb = (cbAddr - ((int)dmaOBus[page])) / 32;
if (cb < CBS_PER_OPAGE) return (page*CBS_PER_OPAGE) + cb;
if (page++ >= DMAO_PAGES) break;
}
/* Try twice */
cbAddr = dmaOut[DMA_CONBLK_AD];
if (!cbAddr) return -PI_NO_TX_WAVE;
page = 0;
/* which page are we dma'ing? */
while (1)
{
cb = (cbAddr - ((int)dmaOBus[page])) / 32;
if (cb < CBS_PER_OPAGE) return (page*CBS_PER_OPAGE) + cb;
if (page++ >= DMAO_PAGES) break;
}
return -PI_WAVE_NOT_FOUND;
}
/* ----------------------------------------------------------------------- */
unsigned rawWaveCB(void) unsigned rawWaveCB(void)
{ {
unsigned cb; unsigned cb;
@ -8560,7 +8609,7 @@ int rawWaveAddSPI(
unsigned spiBitLast, unsigned spiBitLast,
unsigned spiBits) unsigned spiBits)
{ {
int p, dbv, bit, halfbit; int p, bit, dbv, halfbit;
int rising_edge[2], read_cycle[2]; int rising_edge[2], read_cycle[2];
uint32_t on_bits, off_bits; uint32_t on_bits, off_bits;
int tx_bit_pos; int tx_bit_pos;
@ -8600,27 +8649,32 @@ int rawWaveAddSPI(
p++; p++;
} }
/* preset initial mosi bit in case it's read at leading clock bit */
on_bits = 0; on_bits = 0;
off_bits = 0; off_bits = 0;
tx_bit_pos = 0; tx_bit_pos = 0;
/* preset initial mosi bit */
if (getBitInBytes(tx_bit_pos, buf, spiTxBits)) if (getBitInBytes(tx_bit_pos, buf, spiTxBits))
{ {
dbv = 1;
on_bits |= (1<<(spi->mosi)); on_bits |= (1<<(spi->mosi));
dbv = 1;
} }
else else
{ {
off_bits |= (1<<(spi->mosi));
dbv = 0; dbv = 0;
off_bits |= (1<<(spi->mosi));
} }
if (!spi->clk_pha) tx_bit_pos ++;
if (spi->ss_pol) off_bits |= (1<<spiSS); if (spi->ss_pol) off_bits |= (1<<spiSS);
else on_bits |= (1<<spiSS); else on_bits |= (1<<spiSS);
if (spi->clk_pol) on_bits |= (1<<(spi->clk));
else off_bits |= (1<<(spi->clk));
wf[2][p].gpioOn = on_bits; wf[2][p].gpioOn = on_bits;
wf[2][p].gpioOff = off_bits; wf[2][p].gpioOff = off_bits;
wf[2][p].flags = 0; wf[2][p].flags = 0;
@ -8649,7 +8703,7 @@ int rawWaveAddSPI(
{ {
if (getBitInBytes(tx_bit_pos, buf, spiTxBits)) if (getBitInBytes(tx_bit_pos, buf, spiTxBits))
{ {
if (!dbv) on_bits |= (1<<(spi->mosi)); if (!dbv) on_bits |= (1<<(spi->mosi));
dbv = 1; dbv = 1;
} }
else else
@ -9345,6 +9399,30 @@ int gpioWaveTxBusy(void)
return 0; return 0;
} }
/*-------------------------------------------------------------------------*/
int gpioWaveTxAt(void)
{
int i, cb;
DBG(DBG_USER, "");
CHECK_INITED;
cb = dmaNowAtOCB();
if (cb < 0) return -cb;
for (i=0; i<PI_MAX_WAVES; i++)
{
if ( !waveInfo[i].deleted &&
(cb >= waveInfo[i].botCB) &&
(cb <= waveInfo[i].topCB) ) return i;
}
return PI_WAVE_NOT_FOUND;
}
/* ----------------------------------------------------------------------- */ /* ----------------------------------------------------------------------- */
int gpioWaveTxStop(void) int gpioWaveTxStop(void)

515
pigpio.h

File diff suppressed because it is too large Load Diff

440
pigpio.py

File diff suppressed because it is too large Load Diff

View File

@ -35,7 +35,7 @@ DMA memory allocation mode
default AUTO default AUTO
.IP "\fB-b value\fP" .IP "\fB-b value\fP"
gpio sample buffer in milliseconds GPIO sample buffer in milliseconds
100-10000 100-10000
default 120 default 120
@ -90,9 +90,9 @@ display pigpio version and exit
.IP "\fB-x mask\fP" .IP "\fB-x mask\fP"
gpios which may be updated GPIO which may be updated
A 54 bit mask with (1<<n) set if the user may update gpio #n. A 54 bit mask with (1<<n) set if the user may update GPIO #n.
default is the set of user gpios for the board revision default is the set of user GPIO for the board revision
.br .br
@ -125,12 +125,12 @@ pigpio provides a rudimentary permissions system for commands issued via the soc
.br .br
.br .br
All gpios may be read. All GPIO may be read.
.br .br
.br .br
Only the user gpios for the board type or those specified by the -x option may be updated. Only the user GPIO for the board type or those specified by the -x option may be updated.
.br .br
@ -154,21 +154,21 @@ In this context an update includes the following:
.br .br
.br .br
gpio mode set GPIO mode set
.br .br
gpio pull/up down GPIO pull/up down
.br .br
gpio write GPIO write
.br .br
gpio set PWM (including range and frequency) GPIO set PWM (including range and frequency)
.br .br
gpio set servo GPIO set servo
.br .br
.br .br
In addition the bank clear and set commands, and the wave commands will only In addition the bank clear and set commands, and the wave commands will only
affect updateable gpios. affect updateable GPIO.
.br .br
@ -178,18 +178,18 @@ There are several special cases.
.br .br
.br .br
The activity LED (green) may be written (gpio 16 for type 1 and 2 The activity LED (green) may be written (GPIO 16 for type 1 and 2
boards, gpio 47 for type 3 boards) boards, GPIO 47 for type 3 boards)
.br .br
.br .br
The power LED (red) may be written on type 3 boards (gpio 35). The power LED (red) may be written on type 3 boards (GPIO 35).
.br .br
.br .br
The high USB power mode gpio may be written (gpio 38 for type 3 boards). The high USB power mode GPIO may be written (GPIO 38 for type 3 boards).
.SH SEE ALSO .SH SEE ALSO

View File

@ -27,7 +27,7 @@ USE THE MORE VERSATILE pigpiod_if2 LIBRARY.
.br .br
pigpiod_if is a C library for the Raspberry which allows control pigpiod_if is a C library for the Raspberry which allows control
of the gpios via the socket interface to the pigpio daemon. of the GPIO via the socket interface to the pigpio daemon.
.br .br
.br .br
@ -37,17 +37,17 @@ of the gpios via the socket interface to the pigpio daemon.
.br .br
.br .br
o PWM on any of gpios 0-31 o PWM on any of GPIO 0-31
.br .br
.br .br
o servo pulses on any of gpios 0-31 o servo pulses on any of GPIO 0-31
.br .br
.br .br
o callbacks when any of gpios 0-31 change state o callbacks when any of GPIO 0-31 change state
.br .br
@ -57,17 +57,17 @@ o callbacks at timed intervals
.br .br
.br .br
o reading/writing all of the gpios in a bank as one operation o reading/writing all of the GPIO in a bank as one operation
.br .br
.br .br
o individually setting gpio modes, reading and writing o individually setting GPIO modes, reading and writing
.br .br
.br .br
o notifications when any of gpios 0-31 change state o notifications when any of GPIO 0-31 change state
.br .br
@ -77,7 +77,7 @@ o the construction of output waveforms with microsecond timing
.br .br
.br .br
o rudimentary permission control over gpios o rudimentary permission control over GPIO
.br .br
@ -97,11 +97,11 @@ o creating and running scripts on the pigpio daemon
.br .br
.br .br
.SS gpios .SS GPIO
.br .br
.br .br
ALL gpios are identified by their Broadcom number. ALL GPIO are identified by their Broadcom number.
.br .br
@ -304,7 +304,7 @@ resources used by the library.
.IP "\fBint set_mode(unsigned gpio, unsigned mode)\fP" .IP "\fBint set_mode(unsigned gpio, unsigned mode)\fP"
.IP "" 4 .IP "" 4
Set the gpio mode. Set the GPIO mode.
.br .br
@ -328,7 +328,7 @@ or PI_NOT_PERMITTED.
.IP "\fBint get_mode(unsigned gpio)\fP" .IP "\fBint get_mode(unsigned gpio)\fP"
.IP "" 4 .IP "" 4
Get the gpio mode. Get the GPIO mode.
.br .br
@ -343,11 +343,11 @@ gpio: 0-53.
.br .br
.br .br
Returns the gpio mode if OK, otherwise PI_BAD_GPIO. Returns the GPIO mode if OK, otherwise PI_BAD_GPIO.
.IP "\fBint set_pull_up_down(unsigned gpio, unsigned pud)\fP" .IP "\fBint set_pull_up_down(unsigned gpio, unsigned pud)\fP"
.IP "" 4 .IP "" 4
Set or clear the gpio pull-up/down resistor. Set or clear the GPIO pull-up/down resistor.
.br .br
@ -369,7 +369,7 @@ or PI_NOT_PERMITTED.
.IP "\fBint gpio_read(unsigned gpio)\fP" .IP "\fBint gpio_read(unsigned gpio)\fP"
.IP "" 4 .IP "" 4
Read the gpio level. Read the GPIO level.
.br .br
@ -384,11 +384,11 @@ gpio:0-53.
.br .br
.br .br
Returns the gpio level if OK, otherwise PI_BAD_GPIO. Returns the GPIO level if OK, otherwise PI_BAD_GPIO.
.IP "\fBint gpio_write(unsigned gpio, unsigned level)\fP" .IP "\fBint gpio_write(unsigned gpio, unsigned level)\fP"
.IP "" 4 .IP "" 4
Write the gpio level. Write the GPIO level.
.br .br
@ -416,11 +416,11 @@ Notes
.br .br
.br .br
If PWM or servo pulses are active on the gpio they are switched off. If PWM or servo pulses are active on the GPIO they are switched off.
.IP "\fBint set_PWM_dutycycle(unsigned user_gpio, unsigned dutycycle)\fP" .IP "\fBint set_PWM_dutycycle(unsigned user_gpio, unsigned dutycycle)\fP"
.IP "" 4 .IP "" 4
Start (non-zero dutycycle) or stop (0) PWM pulses on the gpio. Start (non-zero dutycycle) or stop (0) PWM pulses on the GPIO.
.br .br
@ -449,7 +449,7 @@ default range of 255.
.IP "\fBint get_PWM_dutycycle(unsigned user_gpio)\fP" .IP "\fBint get_PWM_dutycycle(unsigned user_gpio)\fP"
.IP "" 4 .IP "" 4
Return the PWM dutycycle in use on a gpio. Return the PWM dutycycle in use on a GPIO.
.br .br
@ -470,23 +470,23 @@ Returns 0 if OK, otherwise PI_BAD_USER_GPIO or PI_NOT_PWM_GPIO.
.br .br
For normal PWM the dutycycle will be out of the defined range For normal PWM the dutycycle will be out of the defined range
for the gpio (see \fBget_PWM_range\fP). for the GPIO (see \fBget_PWM_range\fP).
.br .br
.br .br
If a hardware clock is active on the gpio the reported dutycycle If a hardware clock is active on the GPIO the reported dutycycle
will be 500000 (500k) out of 1000000 (1M). will be 500000 (500k) out of 1000000 (1M).
.br .br
.br .br
If hardware PWM is active on the gpio the reported dutycycle If hardware PWM is active on the GPIO the reported dutycycle
will be out of a 1000000 (1M). will be out of a 1000000 (1M).
.IP "\fBint set_PWM_range(unsigned user_gpio, unsigned range)\fP" .IP "\fBint set_PWM_range(unsigned user_gpio, unsigned range)\fP"
.IP "" 4 .IP "" 4
Set the range of PWM values to be used on the gpio. Set the range of PWM values to be used on the GPIO.
.br .br
@ -514,14 +514,14 @@ Notes
.br .br
.br .br
If PWM is currently active on the gpio its dutycycle will be If PWM is currently active on the GPIO its dutycycle will be
scaled to reflect the new range. scaled to reflect the new range.
.br .br
.br .br
The real range, the number of steps between fully off and fully on The real range, the number of steps between fully off and fully on
for each of the 18 available gpio frequencies is for each of the 18 available GPIO frequencies is
.br .br
@ -544,7 +544,7 @@ The real value set by set_PWM_range is (dutycycle * real range) / range.
.IP "\fBint get_PWM_range(unsigned user_gpio)\fP" .IP "\fBint get_PWM_range(unsigned user_gpio)\fP"
.IP "" 4 .IP "" 4
Get the range of PWM values being used on the gpio. Get the range of PWM values being used on the GPIO.
.br .br
@ -559,18 +559,18 @@ user_gpio: 0-31.
.br .br
.br .br
Returns the dutycycle range used for the gpio if OK, Returns the dutycycle range used for the GPIO if OK,
otherwise PI_BAD_USER_GPIO. otherwise PI_BAD_USER_GPIO.
.br .br
.br .br
If a hardware clock or hardware PWM is active on the gpio the If a hardware clock or hardware PWM is active on the GPIO the
reported range will be 1000000 (1M). reported range will be 1000000 (1M).
.IP "\fBint get_PWM_real_range(unsigned user_gpio)\fP" .IP "\fBint get_PWM_real_range(unsigned user_gpio)\fP"
.IP "" 4 .IP "" 4
Get the real underlying range of PWM values being used on the gpio. Get the real underlying range of PWM values being used on the GPIO.
.br .br
@ -585,19 +585,19 @@ user_gpio: 0-31.
.br .br
.br .br
Returns the real range used for the gpio if OK, Returns the real range used for the GPIO if OK,
otherwise PI_BAD_USER_GPIO. otherwise PI_BAD_USER_GPIO.
.br .br
.br .br
If a hardware clock is active on the gpio the reported If a hardware clock is active on the GPIO the reported
real range will be 1000000 (1M). real range will be 1000000 (1M).
.br .br
.br .br
If hardware PWM is active on the gpio the reported real range If hardware PWM is active on the GPIO the reported real range
will be approximately 250M divided by the set PWM frequency. will be approximately 250M divided by the set PWM frequency.
.br .br
@ -606,7 +606,7 @@ will be approximately 250M divided by the set PWM frequency.
.IP "\fBint set_PWM_frequency(unsigned user_gpio, unsigned frequency)\fP" .IP "\fBint set_PWM_frequency(unsigned user_gpio, unsigned frequency)\fP"
.IP "" 4 .IP "" 4
Set the frequency (in Hz) of the PWM to be used on the gpio. Set the frequency (in Hz) of the PWM to be used on the GPIO.
.br .br
@ -636,13 +636,13 @@ sample rate is set when the C pigpio library is started.
.br .br
.br .br
Each gpio can be independently set to one of 18 different Each GPIO can be independently set to one of 18 different
PWM frequencies. PWM frequencies.
.br .br
.br .br
If PWM is currently active on the gpio it will be switched If PWM is currently active on the GPIO it will be switched
off and then back on at the new frequency. off and then back on at the new frequency.
.br .br
@ -689,7 +689,7 @@ off and then back on at the new frequency.
.IP "\fBint get_PWM_frequency(unsigned user_gpio)\fP" .IP "\fBint get_PWM_frequency(unsigned user_gpio)\fP"
.IP "" 4 .IP "" 4
Get the frequency of PWM being used on the gpio. Get the frequency of PWM being used on the GPIO.
.br .br
@ -704,30 +704,30 @@ user_gpio: 0-31.
.br .br
.br .br
For normal PWM the frequency will be that defined for the gpio by For normal PWM the frequency will be that defined for the GPIO by
\fBset_PWM_frequency\fP. \fBset_PWM_frequency\fP.
.br .br
.br .br
If a hardware clock is active on the gpio the reported frequency If a hardware clock is active on the GPIO the reported frequency
will be that set by \fBhardware_clock\fP. will be that set by \fBhardware_clock\fP.
.br .br
.br .br
If hardware PWM is active on the gpio the reported frequency If hardware PWM is active on the GPIO the reported frequency
will be that set by \fBhardware_PWM\fP. will be that set by \fBhardware_PWM\fP.
.br .br
.br .br
Returns the frequency (in hertz) used for the gpio if OK, Returns the frequency (in hertz) used for the GPIO if OK,
otherwise PI_BAD_USER_GPIO. otherwise PI_BAD_USER_GPIO.
.IP "\fBint set_servo_pulsewidth(unsigned user_gpio, unsigned pulsewidth)\fP" .IP "\fBint set_servo_pulsewidth(unsigned user_gpio, unsigned pulsewidth)\fP"
.IP "" 4 .IP "" 4
Start (500-2500) or stop (0) servo pulses on the gpio. Start (500-2500) or stop (0) servo pulses on the GPIO.
.br .br
@ -803,7 +803,7 @@ the servo pulsewidth.
.br .br
.br .br
E.g. If you want to update a servo connected to gpio 25 at 400Hz E.g. If you want to update a servo connected to GPIO 25 at 400Hz
.br .br
@ -826,7 +826,7 @@ e.g. set_PWM_dutycycle(25, 1500) will set a 1500 us pulse.
.IP "\fBint get_servo_pulsewidth(unsigned user_gpio)\fP" .IP "\fBint get_servo_pulsewidth(unsigned user_gpio)\fP"
.IP "" 4 .IP "" 4
Return the servo pulsewidth in use on a gpio. Return the servo pulsewidth in use on a GPIO.
.br .br
@ -856,7 +856,7 @@ otherwise PI_NO_HANDLE.
.br .br
.br .br
A notification is a method for being notified of gpio state A notification is a method for being notified of GPIO state
changes via a pipe. changes via a pipe.
.br .br
@ -886,7 +886,7 @@ Start notifications on a previously opened handle.
.EX .EX
handle: 0-31 (as returned by \fBnotify_open\fP) handle: 0-31 (as returned by \fBnotify_open\fP)
.br .br
bits: a mask indicating the gpios to be notified. bits: a mask indicating the GPIO to be notified.
.br .br
.EE .EE
@ -899,7 +899,7 @@ Returns 0 if OK, otherwise PI_BAD_HANDLE.
.br .br
.br .br
The notification sends state changes for each gpio whose The notification sends state changes for each GPIO whose
corresponding bit in bits is set. corresponding bit in bits is set.
.br .br
@ -975,7 +975,7 @@ Returns 0 if OK, otherwise PI_BAD_HANDLE.
.IP "\fBint set_watchdog(unsigned user_gpio, unsigned timeout)\fP" .IP "\fBint set_watchdog(unsigned user_gpio, unsigned timeout)\fP"
.IP "" 4 .IP "" 4
Sets a watchdog for a gpio. Sets a watchdog for a GPIO.
.br .br
@ -1003,7 +1003,7 @@ The watchdog is nominally in milliseconds.
.br .br
.br .br
Only one watchdog may be registered per gpio. Only one watchdog may be registered per GPIO.
.br .br
@ -1013,24 +1013,24 @@ The watchdog may be cancelled by setting timeout to 0.
.br .br
.br .br
If no level change has been detected for the gpio for timeout If no level change has been detected for the GPIO for timeout
milliseconds any notification for the gpio has a report written milliseconds any notification for the GPIO has a report written
to the fifo with the flags set to indicate a watchdog timeout. to the fifo with the flags set to indicate a watchdog timeout.
.br .br
.br .br
The \fBcallback\fP and \fBcallback_ex\fP functions interpret the flags The \fBcallback\fP and \fBcallback_ex\fP functions interpret the flags
and will call registered callbacks for the gpio with level TIMEOUT. and will call registered callbacks for the GPIO with level TIMEOUT.
.IP "\fBint set_glitch_filter(unsigned user_gpio, unsigned steady)\fP" .IP "\fBint set_glitch_filter(unsigned user_gpio, unsigned steady)\fP"
.IP "" 4 .IP "" 4
Sets a glitch filter on a gpio. Sets a glitch filter on a GPIO.
.br .br
.br .br
Level changes on the gpio are not reported unless the level Level changes on the GPIO are not reported unless the level
has been stable for at least \fBsteady\fP microseconds. The has been stable for at least \fBsteady\fP microseconds. The
level is then reported. Level changes of less than \fBsteady\fP level is then reported. Level changes of less than \fBsteady\fP
microseconds are ignored. microseconds are ignored.
@ -1060,14 +1060,14 @@ after it was first detected.
.IP "\fBint set_noise_filter(unsigned user_gpio, unsigned steady, unsigned active)\fP" .IP "\fBint set_noise_filter(unsigned user_gpio, unsigned steady, unsigned active)\fP"
.IP "" 4 .IP "" 4
Sets a noise filter on a gpio. Sets a noise filter on a GPIO.
.br .br
.br .br
Level changes on the gpio are ignored until a level which has Level changes on the GPIO are ignored until a level which has
been stable for \fBsteady\fP microseconds is detected. Level changes been stable for \fBsteady\fP microseconds is detected. Level changes
on the gpio are then reported for \fBactive\fP microseconds after on the GPIO are then reported for \fBactive\fP microseconds after
which the process repeats. which the process repeats.
.br .br
@ -1098,34 +1098,34 @@ such reports.
.IP "\fBuint32_t read_bank_1(void)\fP" .IP "\fBuint32_t read_bank_1(void)\fP"
.IP "" 4 .IP "" 4
Read the levels of the bank 1 gpios (gpios 0-31). Read the levels of the bank 1 GPIO (GPIO 0-31).
.br .br
.br .br
The returned 32 bit integer has a bit set if the corresponding The returned 32 bit integer has a bit set if the corresponding
gpio is logic 1. Gpio n has bit value (1<<n). GPIO is logic 1. GPIO n has bit value (1<<n).
.IP "\fBuint32_t read_bank_2(void)\fP" .IP "\fBuint32_t read_bank_2(void)\fP"
.IP "" 4 .IP "" 4
Read the levels of the bank 2 gpios (gpios 32-53). Read the levels of the bank 2 GPIO (GPIO 32-53).
.br .br
.br .br
The returned 32 bit integer has a bit set if the corresponding The returned 32 bit integer has a bit set if the corresponding
gpio is logic 1. Gpio n has bit value (1<<(n-32)). GPIO is logic 1. GPIO n has bit value (1<<(n-32)).
.IP "\fBint clear_bank_1(uint32_t bits)\fP" .IP "\fBint clear_bank_1(uint32_t bits)\fP"
.IP "" 4 .IP "" 4
Clears gpios 0-31 if the corresponding bit in bits is set. Clears GPIO 0-31 if the corresponding bit in bits is set.
.br .br
.br .br
.EX .EX
bits: a bit mask with 1 set if the corresponding gpio is bits: a bit mask with 1 set if the corresponding GPIO is
.br .br
to be cleared. to be cleared.
.br .br
@ -1141,18 +1141,18 @@ Returns 0 if OK, otherwise PI_SOME_PERMITTED.
.br .br
A status of PI_SOME_PERMITTED indicates that the user is not A status of PI_SOME_PERMITTED indicates that the user is not
allowed to write to one or more of the gpios. allowed to write to one or more of the GPIO.
.IP "\fBint clear_bank_2(uint32_t bits)\fP" .IP "\fBint clear_bank_2(uint32_t bits)\fP"
.IP "" 4 .IP "" 4
Clears gpios 32-53 if the corresponding bit (0-21) in bits is set. Clears GPIO 32-53 if the corresponding bit (0-21) in bits is set.
.br .br
.br .br
.EX .EX
bits: a bit mask with 1 set if the corresponding gpio is bits: a bit mask with 1 set if the corresponding GPIO is
.br .br
to be cleared. to be cleared.
.br .br
@ -1168,18 +1168,18 @@ Returns 0 if OK, otherwise PI_SOME_PERMITTED.
.br .br
A status of PI_SOME_PERMITTED indicates that the user is not A status of PI_SOME_PERMITTED indicates that the user is not
allowed to write to one or more of the gpios. allowed to write to one or more of the GPIO.
.IP "\fBint set_bank_1(uint32_t bits)\fP" .IP "\fBint set_bank_1(uint32_t bits)\fP"
.IP "" 4 .IP "" 4
Sets gpios 0-31 if the corresponding bit in bits is set. Sets GPIO 0-31 if the corresponding bit in bits is set.
.br .br
.br .br
.EX .EX
bits: a bit mask with 1 set if the corresponding gpio is bits: a bit mask with 1 set if the corresponding GPIO is
.br .br
to be set. to be set.
.br .br
@ -1195,18 +1195,18 @@ Returns 0 if OK, otherwise PI_SOME_PERMITTED.
.br .br
A status of PI_SOME_PERMITTED indicates that the user is not A status of PI_SOME_PERMITTED indicates that the user is not
allowed to write to one or more of the gpios. allowed to write to one or more of the GPIO.
.IP "\fBint set_bank_2(uint32_t bits)\fP" .IP "\fBint set_bank_2(uint32_t bits)\fP"
.IP "" 4 .IP "" 4
Sets gpios 32-53 if the corresponding bit (0-21) in bits is set. Sets GPIO 32-53 if the corresponding bit (0-21) in bits is set.
.br .br
.br .br
.EX .EX
bits: a bit mask with 1 set if the corresponding gpio is bits: a bit mask with 1 set if the corresponding GPIO is
.br .br
to be set. to be set.
.br .br
@ -1222,11 +1222,11 @@ Returns 0 if OK, otherwise PI_SOME_PERMITTED.
.br .br
A status of PI_SOME_PERMITTED indicates that the user is not A status of PI_SOME_PERMITTED indicates that the user is not
allowed to write to one or more of the gpios. allowed to write to one or more of the GPIO.
.IP "\fBint hardware_clock(unsigned gpio, unsigned clkfreq)\fP" .IP "\fBint hardware_clock(unsigned gpio, unsigned clkfreq)\fP"
.IP "" 4 .IP "" 4
Starts a hardware clock on a gpio at the specified frequency. Starts a hardware clock on a GPIO at the specified frequency.
Frequencies above 30MHz are unlikely to work. Frequencies above 30MHz are unlikely to work.
.br .br
@ -1250,13 +1250,13 @@ PI_NOT_HCLK_GPIO, PI_BAD_HCLK_FREQ,or PI_BAD_HCLK_PASS.
.br .br
.br .br
The same clock is available on multiple gpios. The latest The same clock is available on multiple GPIO. The latest
frequency setting will be used by all gpios which share a clock. frequency setting will be used by all GPIO which share a clock.
.br .br
.br .br
The gpio must be one of the following. The GPIO must be one of the following.
.br .br
@ -1265,13 +1265,13 @@ The gpio must be one of the following.
.EX .EX
4 clock 0 All models 4 clock 0 All models
.br .br
5 clock 1 A+/B+/Pi2 and compute module only (reserved for system use) 5 clock 1 All models but A and B (reserved for system use)
.br .br
6 clock 2 A+/B+/Pi2 and compute module only 6 clock 2 All models but A and B
.br .br
20 clock 0 A+/B+/Pi2 and compute module only 20 clock 0 All models but A and B
.br .br
21 clock 1 All models but Rev.2 B (reserved for system use) 21 clock 1 All models but A and Rev.2 B (reserved for system use)
.br .br
.br .br
@ -1293,11 +1293,11 @@ The gpio must be one of the following.
.br .br
Access to clock 1 is protected by a password as its use will likely Access to clock 1 is protected by a password as its use will likely
crash the Pi. The password is given by or'ing 0x5A000000 with the crash the Pi. The password is given by or'ing 0x5A000000 with the
gpio number. GPIO number.
.IP "\fBint hardware_PWM(unsigned gpio, unsigned PWMfreq, uint32_t PWMduty)\fP" .IP "\fBint hardware_PWM(unsigned gpio, unsigned PWMfreq, uint32_t PWMduty)\fP"
.IP "" 4 .IP "" 4
Starts hardware PWM on a gpio at the specified frequency and dutycycle. Starts hardware PWM on a GPIO at the specified frequency and dutycycle.
Frequencies above 30MHz are unlikely to work. Frequencies above 30MHz are unlikely to work.
.br .br
@ -1337,27 +1337,27 @@ or PI_HPWM_ILLEGAL.
.br .br
.br .br
The same PWM channel is available on multiple gpios. The latest The same PWM channel is available on multiple GPIO. The latest
frequency and dutycycle setting will be used by all gpios which frequency and dutycycle setting will be used by all GPIO which
share a PWM channel. share a PWM channel.
.br .br
.br .br
The gpio must be one of the following. The GPIO must be one of the following.
.br .br
.br .br
.EX .EX
12 PWM channel 0 A+/B+/Pi2 and compute module only 12 PWM channel 0 All models but A and B
.br .br
13 PWM channel 1 A+/B+/Pi2 and compute module only 13 PWM channel 1 All models but A and B
.br .br
18 PWM channel 0 All models 18 PWM channel 0 All models
.br .br
19 PWM channel 1 A+/B+/Pi2 and compute module only 19 PWM channel 1 All models but A and B
.br .br
.br .br
@ -1412,7 +1412,7 @@ hexadecimal number the function returns 0.
.br .br
.br .br
The revision number can be used to determine the assignment of gpios The revision number can be used to determine the assignment of GPIO
to pins (see \fBgpio\fP). to pins (see \fBgpio\fP).
.br .br
@ -1492,7 +1492,7 @@ The pulses are interleaved in time order within the existing waveform
.br .br
Merging allows the waveform to be built in parts, that is the settings Merging allows the waveform to be built in parts, that is the settings
for gpio#1 can be added, and then gpio#2 etc. for GPIO#1 can be added, and then GPIO#2 etc.
.br .br
@ -1655,9 +1655,9 @@ The fields specify
.br .br
.br .br
1) the gpios to be switched on at the start of the pulse. 1) the GPIO to be switched on at the start of the pulse.
.br .br
2) the gpios to be switched off at the start of the pulse. 2) the GPIO to be switched off at the start of the pulse.
.br .br
3) the delay in microseconds before the next pulse. 3) the delay in microseconds before the next pulse.
.br .br
@ -2020,7 +2020,7 @@ control blocks.
.IP "\fBint gpio_trigger(unsigned user_gpio, unsigned pulseLen, unsigned level)\fP" .IP "\fBint gpio_trigger(unsigned user_gpio, unsigned pulseLen, unsigned level)\fP"
.IP "" 4 .IP "" 4
This function sends a trigger pulse to a gpio. The gpio is set to This function sends a trigger pulse to a GPIO. The GPIO is set to
level for pulseLen microseconds and then reset to not level. level for pulseLen microseconds and then reset to not level.
.br .br
@ -2184,7 +2184,7 @@ The function returns 0 if OK, otherwise PI_BAD_SCRIPT_ID.
.IP "\fBint bb_serial_read_open(unsigned user_gpio, unsigned baud, unsigned data_bits)\fP" .IP "\fBint bb_serial_read_open(unsigned user_gpio, unsigned baud, unsigned data_bits)\fP"
.IP "" 4 .IP "" 4
This function opens a gpio for bit bang reading of serial data. This function opens a GPIO for bit bang reading of serial data.
.br .br
@ -2260,7 +2260,7 @@ For \fBdata_bits\fP 17-32 there will be four bytes per character.
.IP "\fBint bb_serial_read_close(unsigned user_gpio)\fP" .IP "\fBint bb_serial_read_close(unsigned user_gpio)\fP"
.IP "" 4 .IP "" 4
This function closes a gpio for bit bang reading of serial data. This function closes a GPIO for bit bang reading of serial data.
.br .br
@ -3036,7 +3036,7 @@ End
.IP "\fBint bb_i2c_open(unsigned SDA, unsigned SCL, unsigned baud)\fP" .IP "\fBint bb_i2c_open(unsigned SDA, unsigned SCL, unsigned baud)\fP"
.IP "" 4 .IP "" 4
This function selects a pair of gpios for bit banging I2C at a This function selects a pair of GPIO for bit banging I2C at a
specified baud rate. specified baud rate.
.br .br
@ -3054,7 +3054,7 @@ o repeated starts
.br .br
o clock stretching o clock stretching
.br .br
o I2C on any pair of spare gpios o I2C on any pair of spare GPIO
.br .br
@ -3084,12 +3084,12 @@ NOTE:
.br .br
.br .br
The gpios used for SDA and SCL must have pull-ups to 3V3 connected. As The GPIO used for SDA and SCL must have pull-ups to 3V3 connected. As
a guide the hardware pull-ups on pins 3 and 5 are 1k8 in value. a guide the hardware pull-ups on pins 3 and 5 are 1k8 in value.
.IP "\fBint bb_i2c_close(unsigned SDA)\fP" .IP "\fBint bb_i2c_close(unsigned SDA)\fP"
.IP "" 4 .IP "" 4
This function stops bit banging I2C on a pair of gpios previously This function stops bit banging I2C on a pair of GPIO previously
opened with \fBbb_i2c_open\fP. opened with \fBbb_i2c_open\fP.
.br .br
@ -3097,7 +3097,7 @@ opened with \fBbb_i2c_open\fP.
.br .br
.EX .EX
SDA: 0-31, the SDA gpio used in a prior call to \fBbb_i2c_open\fP SDA: 0-31, the SDA GPIO used in a prior call to \fBbb_i2c_open\fP
.br .br
.EE .EE
@ -3255,16 +3255,17 @@ active low chip select.
.br .br
.br .br
An auxiliary SPI device is available on the A+/B+/Pi2 and may be An auxiliary SPI device is available on all models but the
selected by setting the A bit in the flags. The auxiliary A and B and may be selected by setting the A bit in the
device has 3 chip selects and a selectable word size in bits. flags. The auxiliary device has 3 chip selects and a
selectable word size in bits.
.br .br
.br .br
.EX .EX
spi_channel: 0-1 (0-2 for A+/B+/Pi2 auxiliary device). spi_channel: 0-1 (0-2 for the auxiliary SPI device).
.br .br
baud: 32K-125M (values above 30M are unlikely to work). baud: 32K-125M (values above 30M are unlikely to work).
.br .br
@ -3332,13 +3333,12 @@ px is 0 if CEx is active low (default) and 1 for active high.
.br .br
.br .br
ux is 0 if the CEx gpio is reserved for SPI (default) and 1 otherwise. ux is 0 if the CEx GPIO is reserved for SPI (default) and 1 otherwise.
.br .br
.br .br
A is 0 for the standard SPI device, 1 for the auxiliary SPI. The A is 0 for the standard SPI device, 1 for the auxiliary SPI.
auxiliary device is only present on the A+/B+/Pi2.
.br .br
@ -3738,8 +3738,8 @@ pigif_duplicate_callback, or pigif_bad_callback.
.br .br
.br .br
The callback is called with the gpio, edge, and tick, whenever the The callback is called with the GPIO, edge, and tick, whenever the
gpio has the identified edge. GPIO has the identified edge.
.IP "\fBint callback_ex(unsigned user_gpio, unsigned edge, CBFuncEx_t f, void *userdata)\fP" .IP "\fBint callback_ex(unsigned user_gpio, unsigned edge, CBFuncEx_t f, void *userdata)\fP"
.IP "" 4 .IP "" 4
@ -3770,8 +3770,8 @@ pigif_duplicate_callback, or pigif_bad_callback.
.br .br
.br .br
The callback is called with the gpio, edge, tick, and user, whenever The callback is called with the GPIO, edge, tick, and user, whenever
the gpio has the identified edge. the GPIO has the identified edge.
.br .br
@ -3798,7 +3798,7 @@ The function returns 0 if OK, otherwise pigif_callback_not_found.
.IP "\fBint wait_for_edge(unsigned user_gpio, unsigned edge, double timeout)\fP" .IP "\fBint wait_for_edge(unsigned user_gpio, unsigned edge, double timeout)\fP"
.IP "" 4 .IP "" 4
This function waits for edge on the gpio for up to timeout This function waits for edge on the GPIO for up to timeout
seconds. seconds.
.br .br
@ -3900,7 +3900,7 @@ A value of 0 or 1.
.br .br
.IP "\fBbits\fP" 0 .IP "\fBbits\fP" 0
A value used to select gpios. If bit n of bits is set then gpio n is A value used to select GPIO. If bit n of bits is set then GPIO n is
selected. selected.
.br .br
@ -4040,7 +4040,7 @@ The number may vary between 0 and range (default 255) where
.br .br
.IP "\fBedge\fP" 0 .IP "\fBedge\fP" 0
Used to identify a gpio level transition of interest. A rising edge is Used to identify a GPIO level transition of interest. A rising edge is
a level change from 0 to 1. A falling edge is a level change from 1 to 0. a level change from 0 to 1. A falling edge is a level change from 1 to 0.
.br .br
@ -4077,9 +4077,9 @@ A function.
.br .br
.IP "\fBfrequency\fP: 0-" 0 .IP "\fBfrequency\fP: 0-" 0
The number of times a gpio is swiched on and off per second. This The number of times a GPIO is swiched on and off per second. This
can be set per gpio and may be as little as 5Hz or as much as can be set per GPIO and may be as little as 5Hz or as much as
40KHz. The gpio will be on for a proportion of the time as defined 40KHz. The GPIO will be on for a proportion of the time as defined
by its dutycycle. by its dutycycle.
.br .br
@ -4091,12 +4091,12 @@ by its dutycycle.
.br .br
.IP "\fBgpio\fP" 0 .IP "\fBgpio\fP" 0
A Broadcom numbered gpio, in the range 0-53. A Broadcom numbered GPIO, in the range 0-53.
.br .br
.br .br
There are 54 General Purpose Input Outputs (gpios) named gpio0 through There are 54 General Purpose Input Outputs (GPIO) named gpio0 through
gpio53. gpio53.
.br .br
@ -4108,9 +4108,9 @@ gpio31. Bank 2 consists of gpio32 through gpio53.
.br .br
.br .br
All the gpios which are safe for the user to read and write are in All the GPIO which are safe for the user to read and write are in
bank 1. Not all gpios in bank 1 are safe though. Type 1 boards bank 1. Not all GPIO in bank 1 are safe though. Type 1 boards
have 17 safe gpios. Type 2 boards have 21. Type 3 boards have 26. have 17 safe GPIO. Type 2 boards have 21. Type 3 boards have 26.
.br .br
@ -4120,7 +4120,7 @@ See \fBget_hardware_revision\fP.
.br .br
.br .br
The user gpios are marked with an X in the following table. The user GPIO are marked with an X in the following table.
.br .br
@ -4251,7 +4251,7 @@ A flag used to set normal or inverted bit bang serial data level logic.
.br .br
.IP "\fBlevel\fP" 0 .IP "\fBlevel\fP" 0
The level of a gpio. Low or High. The level of a GPIO. Low or High.
.br .br
@ -4280,7 +4280,7 @@ PI_HIGH 1
.br .br
.br .br
There is one exception. If a watchdog expires on a gpio the level will be There is one exception. If a watchdog expires on a GPIO the level will be
reported as PI_TIMEOUT. See \fBset_watchdog\fP. reported as PI_TIMEOUT. See \fBset_watchdog\fP.
.br .br
@ -4298,7 +4298,7 @@ PI_TIMEOUT 2
.br .br
.IP "\fBmode\fP: 0-7" 0 .IP "\fBmode\fP: 0-7" 0
The operational mode of a gpio, normally INPUT or OUTPUT. The operational mode of a GPIO, normally INPUT or OUTPUT.
.br .br
@ -4409,7 +4409,7 @@ A thread identifier.
.br .br
.IP "\fBpud\fP: 0-2" 0 .IP "\fBpud\fP: 0-2" 0
The setting of the pull up/down resistor for a gpio, which may be off, The setting of the pull up/down resistor for a GPIO, which may be off,
pull-up, or pull-down. pull-up, or pull-down.
.EX .EX
@ -4533,7 +4533,7 @@ A pointer to a buffer to receive data.
.br .br
.IP "\fBSCL\fP" 0 .IP "\fBSCL\fP" 0
The user gpio to use for the clock when bit banging I2C. The user GPIO to use for the clock when bit banging I2C.
.br .br
@ -4554,7 +4554,7 @@ An id of a stored script as returned by \fBstore_script\fP.
.br .br
.IP "\fBSDA\fP" 0 .IP "\fBSDA\fP" 0
The user gpio to use for data when bit banging I2C. The user GPIO to use for data when bit banging I2C.
.br .br
@ -4651,7 +4651,7 @@ thread.
.br .br
.IP "\fBtimeout\fP" 0 .IP "\fBtimeout\fP" 0
A gpio watchdog timeout in milliseconds. A GPIO watchdog timeout in milliseconds.
.EX .EX
PI_MIN_WDOG_TIMEOUT 0 PI_MIN_WDOG_TIMEOUT 0
@ -4687,7 +4687,7 @@ A whole number >= 0.
.br .br
.IP "\fBuser_gpio\fP" 0 .IP "\fBuser_gpio\fP" 0
0-31, a Broadcom numbered gpio. 0-31, a Broadcom numbered GPIO.
.br .br

View File

@ -30,7 +30,7 @@ For more information, please refer to <http://unlicense.org/>
#include "pigpio.h" #include "pigpio.h"
#define PIGPIOD_IF_VERSION 21 #define PIGPIOD_IF_VERSION 22
/*TEXT /*TEXT
@ -38,27 +38,27 @@ THIS LIBRARY IS DEPRECATED. NEW CODE SHOULD BE WRITTEN TO
USE THE MORE VERSATILE pigpiod_if2 LIBRARY. USE THE MORE VERSATILE pigpiod_if2 LIBRARY.
pigpiod_if is a C library for the Raspberry which allows control pigpiod_if is a C library for the Raspberry which allows control
of the gpios via the socket interface to the pigpio daemon. of the GPIO via the socket interface to the pigpio daemon.
*Features* *Features*
o PWM on any of gpios 0-31 o PWM on any of GPIO 0-31
o servo pulses on any of gpios 0-31 o servo pulses on any of GPIO 0-31
o callbacks when any of gpios 0-31 change state o callbacks when any of GPIO 0-31 change state
o callbacks at timed intervals o callbacks at timed intervals
o reading/writing all of the gpios in a bank as one operation o reading/writing all of the GPIO in a bank as one operation
o individually setting gpio modes, reading and writing o individually setting GPIO modes, reading and writing
o notifications when any of gpios 0-31 change state o notifications when any of GPIO 0-31 change state
o the construction of output waveforms with microsecond timing o the construction of output waveforms with microsecond timing
o rudimentary permission control over gpios o rudimentary permission control over GPIO
o a simple interface to start and stop new threads o a simple interface to start and stop new threads
@ -66,9 +66,9 @@ o I2C, SPI, and serial link wrappers
o creating and running scripts on the pigpio daemon o creating and running scripts on the pigpio daemon
*gpios* *GPIO*
ALL gpios are identified by their Broadcom number. ALL GPIO are identified by their Broadcom number.
*Notes* *Notes*
@ -109,68 +109,68 @@ pigpio_stop Disconnects from the pigpio daemon
BEGINNER BEGINNER
set_mode Set a gpio mode set_mode Set a GPIO mode
get_mode Get a gpio mode get_mode Get a GPIO mode
set_pull_up_down Set/clear gpio pull up/down resistor set_pull_up_down Set/clear GPIO pull up/down resistor
gpio_read Read a gpio gpio_read Read a GPIO
gpio_write Write a gpio gpio_write Write a GPIO
set_PWM_dutycycle Start/stop PWM pulses on a gpio set_PWM_dutycycle Start/stop PWM pulses on a GPIO
get_PWM_dutycycle Get the PWM dutycycle in use on a gpio get_PWM_dutycycle Get the PWM dutycycle in use on a GPIO
set_servo_pulsewidth Start/stop servo pulses on a gpio set_servo_pulsewidth Start/stop servo pulses on a GPIO
get_servo_pulsewidth Get the servo pulsewidth in use on a gpio get_servo_pulsewidth Get the servo pulsewidth in use on a GPIO
callback Create gpio level change callback callback Create GPIO level change callback
callback_ex Create gpio level change callback callback_ex Create GPIO level change callback
callback_cancel Cancel a callback callback_cancel Cancel a callback
wait_for_edge Wait for gpio level change wait_for_edge Wait for GPIO level change
INTERMEDIATE INTERMEDIATE
gpio_trigger Send a trigger pulse to a gpio. gpio_trigger Send a trigger pulse to a GPIO.
set_watchdog Set a watchdog on a gpio. set_watchdog Set a watchdog on a GPIO.
set_PWM_range Configure PWM range for a gpio set_PWM_range Configure PWM range for a GPIO
get_PWM_range Get configured PWM range for a gpio get_PWM_range Get configured PWM range for a GPIO
set_PWM_frequency Configure PWM frequency for a gpio set_PWM_frequency Configure PWM frequency for a GPIO
get_PWM_frequency Get configured PWM frequency for a gpio get_PWM_frequency Get configured PWM frequency for a GPIO
read_bank_1 Read all gpios in bank 1 read_bank_1 Read all GPIO in bank 1
read_bank_2 Read all gpios in bank 2 read_bank_2 Read all GPIO in bank 2
clear_bank_1 Clear selected gpios in bank 1 clear_bank_1 Clear selected GPIO in bank 1
clear_bank_2 Clear selected gpios in bank 2 clear_bank_2 Clear selected GPIO in bank 2
set_bank_1 Set selected gpios in bank 1 set_bank_1 Set selected GPIO in bank 1
set_bank_2 Set selected gpios in bank 2 set_bank_2 Set selected GPIO in bank 2
start_thread Start a new thread start_thread Start a new thread
stop_thread Stop a previously started thread stop_thread Stop a previously started thread
ADVANCED ADVANCED
get_PWM_real_range Get underlying PWM range for a gpio get_PWM_real_range Get underlying PWM range for a GPIO
notify_open Request a notification handle notify_open Request a notification handle
notify_begin Start notifications for selected gpios notify_begin Start notifications for selected GPIO
notify_pause Pause notifications notify_pause Pause notifications
notify_close Close a notification notify_close Close a notification
bb_serial_read_open Opens a gpio for bit bang serial reads bb_serial_read_open Opens a GPIO for bit bang serial reads
bb_serial_read Reads bit bang serial data from a gpio bb_serial_read Reads bit bang serial data from a GPIO
bb_serial_read_close Closes a gpio for bit bang serial reads bb_serial_read_close Closes a GPIO for bit bang serial reads
bb_serial_invert Invert serial logic (1 invert, 0 normal) bb_serial_invert Invert serial logic (1 invert, 0 normal)
hardware_clock Start hardware clock on supported gpios hardware_clock Start hardware clock on supported GPIO
hardware_PWM Start hardware PWM on supported gpios hardware_PWM Start hardware PWM on supported GPIO
set_glitch_filter Set a glitch filter on a gpio set_glitch_filter Set a glitch filter on a GPIO
set_noise_filter Set a noise filter on a gpio set_noise_filter Set a noise filter on a GPIO
SCRIPTS SCRIPTS
@ -236,8 +236,8 @@ i2c_write_device Writes the raw I2C device
i2c_zip Performs multiple I2C transactions i2c_zip Performs multiple I2C transactions
bb_i2c_open Opens gpios for bit banging I2C bb_i2c_open Opens GPIO for bit banging I2C
bb_i2c_close Closes gpios for bit banging I2C bb_i2c_close Closes GPIO for bit banging I2C
bb_i2c_zip Performs multiple bit banged I2C transactions bb_i2c_zip Performs multiple bit banged I2C transactions
SPI SPI
@ -385,7 +385,7 @@ D*/
/*F*/ /*F*/
int set_mode(unsigned gpio, unsigned mode); int set_mode(unsigned gpio, unsigned mode);
/*D /*D
Set the gpio mode. Set the GPIO mode.
. . . .
gpio: 0-53. gpio: 0-53.
@ -400,19 +400,19 @@ D*/
/*F*/ /*F*/
int get_mode(unsigned gpio); int get_mode(unsigned gpio);
/*D /*D
Get the gpio mode. Get the GPIO mode.
. . . .
gpio: 0-53. gpio: 0-53.
. . . .
Returns the gpio mode if OK, otherwise PI_BAD_GPIO. Returns the GPIO mode if OK, otherwise PI_BAD_GPIO.
D*/ D*/
/*F*/ /*F*/
int set_pull_up_down(unsigned gpio, unsigned pud); int set_pull_up_down(unsigned gpio, unsigned pud);
/*D /*D
Set or clear the gpio pull-up/down resistor. Set or clear the GPIO pull-up/down resistor.
. . . .
gpio: 0-53. gpio: 0-53.
@ -426,19 +426,19 @@ D*/
/*F*/ /*F*/
int gpio_read(unsigned gpio); int gpio_read(unsigned gpio);
/*D /*D
Read the gpio level. Read the GPIO level.
. . . .
gpio:0-53. gpio:0-53.
. . . .
Returns the gpio level if OK, otherwise PI_BAD_GPIO. Returns the GPIO level if OK, otherwise PI_BAD_GPIO.
D*/ D*/
/*F*/ /*F*/
int gpio_write(unsigned gpio, unsigned level); int gpio_write(unsigned gpio, unsigned level);
/*D /*D
Write the gpio level. Write the GPIO level.
. . . .
gpio: 0-53. gpio: 0-53.
@ -450,13 +450,13 @@ or PI_NOT_PERMITTED.
Notes Notes
If PWM or servo pulses are active on the gpio they are switched off. If PWM or servo pulses are active on the GPIO they are switched off.
D*/ D*/
/*F*/ /*F*/
int set_PWM_dutycycle(unsigned user_gpio, unsigned dutycycle); int set_PWM_dutycycle(unsigned user_gpio, unsigned dutycycle);
/*D /*D
Start (non-zero dutycycle) or stop (0) PWM pulses on the gpio. Start (non-zero dutycycle) or stop (0) PWM pulses on the GPIO.
. . . .
user_gpio: 0-31. user_gpio: 0-31.
@ -474,7 +474,7 @@ D*/
/*F*/ /*F*/
int get_PWM_dutycycle(unsigned user_gpio); int get_PWM_dutycycle(unsigned user_gpio);
/*D /*D
Return the PWM dutycycle in use on a gpio. Return the PWM dutycycle in use on a GPIO.
. . . .
user_gpio: 0-31. user_gpio: 0-31.
@ -483,19 +483,19 @@ user_gpio: 0-31.
Returns 0 if OK, otherwise PI_BAD_USER_GPIO or PI_NOT_PWM_GPIO. Returns 0 if OK, otherwise PI_BAD_USER_GPIO or PI_NOT_PWM_GPIO.
For normal PWM the dutycycle will be out of the defined range For normal PWM the dutycycle will be out of the defined range
for the gpio (see [*get_PWM_range*]). for the GPIO (see [*get_PWM_range*]).
If a hardware clock is active on the gpio the reported dutycycle If a hardware clock is active on the GPIO the reported dutycycle
will be 500000 (500k) out of 1000000 (1M). will be 500000 (500k) out of 1000000 (1M).
If hardware PWM is active on the gpio the reported dutycycle If hardware PWM is active on the GPIO the reported dutycycle
will be out of a 1000000 (1M). will be out of a 1000000 (1M).
D*/ D*/
/*F*/ /*F*/
int set_PWM_range(unsigned user_gpio, unsigned range); int set_PWM_range(unsigned user_gpio, unsigned range);
/*D /*D
Set the range of PWM values to be used on the gpio. Set the range of PWM values to be used on the GPIO.
. . . .
user_gpio: 0-31. user_gpio: 0-31.
@ -507,11 +507,11 @@ or PI_NOT_PERMITTED.
Notes Notes
If PWM is currently active on the gpio its dutycycle will be If PWM is currently active on the GPIO its dutycycle will be
scaled to reflect the new range. scaled to reflect the new range.
The real range, the number of steps between fully off and fully on The real range, the number of steps between fully off and fully on
for each of the 18 available gpio frequencies is for each of the 18 available GPIO frequencies is
. . . .
25(#1), 50(#2), 100(#3), 125(#4), 200(#5), 250(#6), 25(#1), 50(#2), 100(#3), 125(#4), 200(#5), 250(#6),
@ -525,35 +525,35 @@ D*/
/*F*/ /*F*/
int get_PWM_range(unsigned user_gpio); int get_PWM_range(unsigned user_gpio);
/*D /*D
Get the range of PWM values being used on the gpio. Get the range of PWM values being used on the GPIO.
. . . .
user_gpio: 0-31. user_gpio: 0-31.
. . . .
Returns the dutycycle range used for the gpio if OK, Returns the dutycycle range used for the GPIO if OK,
otherwise PI_BAD_USER_GPIO. otherwise PI_BAD_USER_GPIO.
If a hardware clock or hardware PWM is active on the gpio the If a hardware clock or hardware PWM is active on the GPIO the
reported range will be 1000000 (1M). reported range will be 1000000 (1M).
D*/ D*/
/*F*/ /*F*/
int get_PWM_real_range(unsigned user_gpio); int get_PWM_real_range(unsigned user_gpio);
/*D /*D
Get the real underlying range of PWM values being used on the gpio. Get the real underlying range of PWM values being used on the GPIO.
. . . .
user_gpio: 0-31. user_gpio: 0-31.
. . . .
Returns the real range used for the gpio if OK, Returns the real range used for the GPIO if OK,
otherwise PI_BAD_USER_GPIO. otherwise PI_BAD_USER_GPIO.
If a hardware clock is active on the gpio the reported If a hardware clock is active on the GPIO the reported
real range will be 1000000 (1M). real range will be 1000000 (1M).
If hardware PWM is active on the gpio the reported real range If hardware PWM is active on the GPIO the reported real range
will be approximately 250M divided by the set PWM frequency. will be approximately 250M divided by the set PWM frequency.
D*/ D*/
@ -561,7 +561,7 @@ D*/
/*F*/ /*F*/
int set_PWM_frequency(unsigned user_gpio, unsigned frequency); int set_PWM_frequency(unsigned user_gpio, unsigned frequency);
/*D /*D
Set the frequency (in Hz) of the PWM to be used on the gpio. Set the frequency (in Hz) of the PWM to be used on the GPIO.
. . . .
user_gpio: 0-31. user_gpio: 0-31.
@ -575,10 +575,10 @@ The selectable frequencies depend upon the sample rate which
may be 1, 2, 4, 5, 8, or 10 microseconds (default 5). The may be 1, 2, 4, 5, 8, or 10 microseconds (default 5). The
sample rate is set when the C pigpio library is started. sample rate is set when the C pigpio library is started.
Each gpio can be independently set to one of 18 different Each GPIO can be independently set to one of 18 different
PWM frequencies. PWM frequencies.
If PWM is currently active on the gpio it will be switched If PWM is currently active on the GPIO it will be switched
off and then back on at the new frequency. off and then back on at the new frequency.
. . . .
@ -605,29 +605,29 @@ D*/
/*F*/ /*F*/
int get_PWM_frequency(unsigned user_gpio); int get_PWM_frequency(unsigned user_gpio);
/*D /*D
Get the frequency of PWM being used on the gpio. Get the frequency of PWM being used on the GPIO.
. . . .
user_gpio: 0-31. user_gpio: 0-31.
. . . .
For normal PWM the frequency will be that defined for the gpio by For normal PWM the frequency will be that defined for the GPIO by
[*set_PWM_frequency*]. [*set_PWM_frequency*].
If a hardware clock is active on the gpio the reported frequency If a hardware clock is active on the GPIO the reported frequency
will be that set by [*hardware_clock*]. will be that set by [*hardware_clock*].
If hardware PWM is active on the gpio the reported frequency If hardware PWM is active on the GPIO the reported frequency
will be that set by [*hardware_PWM*]. will be that set by [*hardware_PWM*].
Returns the frequency (in hertz) used for the gpio if OK, Returns the frequency (in hertz) used for the GPIO if OK,
otherwise PI_BAD_USER_GPIO. otherwise PI_BAD_USER_GPIO.
D*/ D*/
/*F*/ /*F*/
int set_servo_pulsewidth(unsigned user_gpio, unsigned pulsewidth); int set_servo_pulsewidth(unsigned user_gpio, unsigned pulsewidth);
/*D /*D
Start (500-2500) or stop (0) servo pulses on the gpio. Start (500-2500) or stop (0) servo pulses on the GPIO.
. . . .
user_gpio: 0-31. user_gpio: 0-31.
@ -662,7 +662,7 @@ Then set the PWM range using [*set_PWM_range*] to 1E6/Hz.
Doing this allows you to use units of microseconds when setting Doing this allows you to use units of microseconds when setting
the servo pulsewidth. the servo pulsewidth.
E.g. If you want to update a servo connected to gpio 25 at 400Hz E.g. If you want to update a servo connected to GPIO 25 at 400Hz
. . . .
set_PWM_frequency(25, 400); set_PWM_frequency(25, 400);
@ -676,7 +676,7 @@ D*/
/*F*/ /*F*/
int get_servo_pulsewidth(unsigned user_gpio); int get_servo_pulsewidth(unsigned user_gpio);
/*D /*D
Return the servo pulsewidth in use on a gpio. Return the servo pulsewidth in use on a GPIO.
. . . .
user_gpio: 0-31. user_gpio: 0-31.
@ -693,7 +693,7 @@ Get a free notification handle.
Returns a handle greater than or equal to zero if OK, Returns a handle greater than or equal to zero if OK,
otherwise PI_NO_HANDLE. otherwise PI_NO_HANDLE.
A notification is a method for being notified of gpio state A notification is a method for being notified of GPIO state
changes via a pipe. changes via a pipe.
Pipes are only accessible from the local machine so this function Pipes are only accessible from the local machine so this function
@ -714,12 +714,12 @@ Start notifications on a previously opened handle.
. . . .
handle: 0-31 (as returned by [*notify_open*]) handle: 0-31 (as returned by [*notify_open*])
bits: a mask indicating the gpios to be notified. bits: a mask indicating the GPIO to be notified.
. . . .
Returns 0 if OK, otherwise PI_BAD_HANDLE. Returns 0 if OK, otherwise PI_BAD_HANDLE.
The notification sends state changes for each gpio whose The notification sends state changes for each GPIO whose
corresponding bit in bits is set. corresponding bit in bits is set.
Notes Notes
@ -765,7 +765,7 @@ D*/
/*F*/ /*F*/
int set_watchdog(unsigned user_gpio, unsigned timeout); int set_watchdog(unsigned user_gpio, unsigned timeout);
/*D /*D
Sets a watchdog for a gpio. Sets a watchdog for a GPIO.
. . . .
user_gpio: 0-31. user_gpio: 0-31.
@ -777,24 +777,24 @@ or PI_BAD_WDOG_TIMEOUT.
The watchdog is nominally in milliseconds. The watchdog is nominally in milliseconds.
Only one watchdog may be registered per gpio. Only one watchdog may be registered per GPIO.
The watchdog may be cancelled by setting timeout to 0. The watchdog may be cancelled by setting timeout to 0.
If no level change has been detected for the gpio for timeout If no level change has been detected for the GPIO for timeout
milliseconds any notification for the gpio has a report written milliseconds any notification for the GPIO has a report written
to the fifo with the flags set to indicate a watchdog timeout. to the fifo with the flags set to indicate a watchdog timeout.
The [*callback*] and [*callback_ex*] functions interpret the flags The [*callback*] and [*callback_ex*] functions interpret the flags
and will call registered callbacks for the gpio with level TIMEOUT. and will call registered callbacks for the GPIO with level TIMEOUT.
D*/ D*/
/*F*/ /*F*/
int set_glitch_filter(unsigned user_gpio, unsigned steady); int set_glitch_filter(unsigned user_gpio, unsigned steady);
/*D /*D
Sets a glitch filter on a gpio. Sets a glitch filter on a GPIO.
Level changes on the gpio are not reported unless the level Level changes on the GPIO are not reported unless the level
has been stable for at least [*steady*] microseconds. The has been stable for at least [*steady*] microseconds. The
level is then reported. Level changes of less than [*steady*] level is then reported. Level changes of less than [*steady*]
microseconds are ignored. microseconds are ignored.
@ -813,11 +813,11 @@ D*/
/*F*/ /*F*/
int set_noise_filter(unsigned user_gpio, unsigned steady, unsigned active); int set_noise_filter(unsigned user_gpio, unsigned steady, unsigned active);
/*D /*D
Sets a noise filter on a gpio. Sets a noise filter on a GPIO.
Level changes on the gpio are ignored until a level which has Level changes on the GPIO are ignored until a level which has
been stable for [*steady*] microseconds is detected. Level changes been stable for [*steady*] microseconds is detected. Level changes
on the gpio are then reported for [*active*] microseconds after on the GPIO are then reported for [*active*] microseconds after
which the process repeats. which the process repeats.
. . . .
@ -836,90 +836,90 @@ D*/
/*F*/ /*F*/
uint32_t read_bank_1(void); uint32_t read_bank_1(void);
/*D /*D
Read the levels of the bank 1 gpios (gpios 0-31). Read the levels of the bank 1 GPIO (GPIO 0-31).
The returned 32 bit integer has a bit set if the corresponding The returned 32 bit integer has a bit set if the corresponding
gpio is logic 1. Gpio n has bit value (1<<n). GPIO is logic 1. GPIO n has bit value (1<<n).
D*/ D*/
/*F*/ /*F*/
uint32_t read_bank_2(void); uint32_t read_bank_2(void);
/*D /*D
Read the levels of the bank 2 gpios (gpios 32-53). Read the levels of the bank 2 GPIO (GPIO 32-53).
The returned 32 bit integer has a bit set if the corresponding The returned 32 bit integer has a bit set if the corresponding
gpio is logic 1. Gpio n has bit value (1<<(n-32)). GPIO is logic 1. GPIO n has bit value (1<<(n-32)).
D*/ D*/
/*F*/ /*F*/
int clear_bank_1(uint32_t bits); int clear_bank_1(uint32_t bits);
/*D /*D
Clears gpios 0-31 if the corresponding bit in bits is set. Clears GPIO 0-31 if the corresponding bit in bits is set.
. . . .
bits: a bit mask with 1 set if the corresponding gpio is bits: a bit mask with 1 set if the corresponding GPIO is
to be cleared. to be cleared.
. . . .
Returns 0 if OK, otherwise PI_SOME_PERMITTED. Returns 0 if OK, otherwise PI_SOME_PERMITTED.
A status of PI_SOME_PERMITTED indicates that the user is not A status of PI_SOME_PERMITTED indicates that the user is not
allowed to write to one or more of the gpios. allowed to write to one or more of the GPIO.
D*/ D*/
/*F*/ /*F*/
int clear_bank_2(uint32_t bits); int clear_bank_2(uint32_t bits);
/*D /*D
Clears gpios 32-53 if the corresponding bit (0-21) in bits is set. Clears GPIO 32-53 if the corresponding bit (0-21) in bits is set.
. . . .
bits: a bit mask with 1 set if the corresponding gpio is bits: a bit mask with 1 set if the corresponding GPIO is
to be cleared. to be cleared.
. . . .
Returns 0 if OK, otherwise PI_SOME_PERMITTED. Returns 0 if OK, otherwise PI_SOME_PERMITTED.
A status of PI_SOME_PERMITTED indicates that the user is not A status of PI_SOME_PERMITTED indicates that the user is not
allowed to write to one or more of the gpios. allowed to write to one or more of the GPIO.
D*/ D*/
/*F*/ /*F*/
int set_bank_1(uint32_t bits); int set_bank_1(uint32_t bits);
/*D /*D
Sets gpios 0-31 if the corresponding bit in bits is set. Sets GPIO 0-31 if the corresponding bit in bits is set.
. . . .
bits: a bit mask with 1 set if the corresponding gpio is bits: a bit mask with 1 set if the corresponding GPIO is
to be set. to be set.
. . . .
Returns 0 if OK, otherwise PI_SOME_PERMITTED. Returns 0 if OK, otherwise PI_SOME_PERMITTED.
A status of PI_SOME_PERMITTED indicates that the user is not A status of PI_SOME_PERMITTED indicates that the user is not
allowed to write to one or more of the gpios. allowed to write to one or more of the GPIO.
D*/ D*/
/*F*/ /*F*/
int set_bank_2(uint32_t bits); int set_bank_2(uint32_t bits);
/*D /*D
Sets gpios 32-53 if the corresponding bit (0-21) in bits is set. Sets GPIO 32-53 if the corresponding bit (0-21) in bits is set.
. . . .
bits: a bit mask with 1 set if the corresponding gpio is bits: a bit mask with 1 set if the corresponding GPIO is
to be set. to be set.
. . . .
Returns 0 if OK, otherwise PI_SOME_PERMITTED. Returns 0 if OK, otherwise PI_SOME_PERMITTED.
A status of PI_SOME_PERMITTED indicates that the user is not A status of PI_SOME_PERMITTED indicates that the user is not
allowed to write to one or more of the gpios. allowed to write to one or more of the GPIO.
D*/ D*/
/*F*/ /*F*/
int hardware_clock(unsigned gpio, unsigned clkfreq); int hardware_clock(unsigned gpio, unsigned clkfreq);
/*D /*D
Starts a hardware clock on a gpio at the specified frequency. Starts a hardware clock on a GPIO at the specified frequency.
Frequencies above 30MHz are unlikely to work. Frequencies above 30MHz are unlikely to work.
. . . .
@ -930,17 +930,17 @@ frequency: 0 (off) or 4689-250000000 (250M)
Returns 0 if OK, otherwise PI_NOT_PERMITTED, PI_BAD_GPIO, Returns 0 if OK, otherwise PI_NOT_PERMITTED, PI_BAD_GPIO,
PI_NOT_HCLK_GPIO, PI_BAD_HCLK_FREQ,or PI_BAD_HCLK_PASS. PI_NOT_HCLK_GPIO, PI_BAD_HCLK_FREQ,or PI_BAD_HCLK_PASS.
The same clock is available on multiple gpios. The latest The same clock is available on multiple GPIO. The latest
frequency setting will be used by all gpios which share a clock. frequency setting will be used by all GPIO which share a clock.
The gpio must be one of the following. The GPIO must be one of the following.
. . . .
4 clock 0 All models 4 clock 0 All models
5 clock 1 A+/B+/Pi2 and compute module only (reserved for system use) 5 clock 1 All models but A and B (reserved for system use)
6 clock 2 A+/B+/Pi2 and compute module only 6 clock 2 All models but A and B
20 clock 0 A+/B+/Pi2 and compute module only 20 clock 0 All models but A and B
21 clock 1 All models but Rev.2 B (reserved for system use) 21 clock 1 All models but A and Rev.2 B (reserved for system use)
32 clock 0 Compute module only 32 clock 0 Compute module only
34 clock 0 Compute module only 34 clock 0 Compute module only
@ -951,14 +951,14 @@ The gpio must be one of the following.
Access to clock 1 is protected by a password as its use will likely Access to clock 1 is protected by a password as its use will likely
crash the Pi. The password is given by or'ing 0x5A000000 with the crash the Pi. The password is given by or'ing 0x5A000000 with the
gpio number. GPIO number.
D*/ D*/
/*F*/ /*F*/
int hardware_PWM(unsigned gpio, unsigned PWMfreq, uint32_t PWMduty); int hardware_PWM(unsigned gpio, unsigned PWMfreq, uint32_t PWMduty);
/*D /*D
Starts hardware PWM on a gpio at the specified frequency and dutycycle. Starts hardware PWM on a GPIO at the specified frequency and dutycycle.
Frequencies above 30MHz are unlikely to work. Frequencies above 30MHz are unlikely to work.
NOTE: Any waveform started by [*wave_send_once*], [*wave_send_repeat*], NOTE: Any waveform started by [*wave_send_once*], [*wave_send_repeat*],
@ -978,17 +978,17 @@ Returns 0 if OK, otherwise PI_NOT_PERMITTED, PI_BAD_GPIO,
PI_NOT_HPWM_GPIO, PI_BAD_HPWM_DUTY, PI_BAD_HPWM_FREQ, PI_NOT_HPWM_GPIO, PI_BAD_HPWM_DUTY, PI_BAD_HPWM_FREQ,
or PI_HPWM_ILLEGAL. or PI_HPWM_ILLEGAL.
The same PWM channel is available on multiple gpios. The latest The same PWM channel is available on multiple GPIO. The latest
frequency and dutycycle setting will be used by all gpios which frequency and dutycycle setting will be used by all GPIO which
share a PWM channel. share a PWM channel.
The gpio must be one of the following. The GPIO must be one of the following.
. . . .
12 PWM channel 0 A+/B+/Pi2 and compute module only 12 PWM channel 0 All models but A and B
13 PWM channel 1 A+/B+/Pi2 and compute module only 13 PWM channel 1 All models but A and B
18 PWM channel 0 All models 18 PWM channel 0 All models
19 PWM channel 1 A+/B+/Pi2 and compute module only 19 PWM channel 1 All models but A and B
40 PWM channel 0 Compute module only 40 PWM channel 0 Compute module only
41 PWM channel 1 Compute module only 41 PWM channel 1 Compute module only
@ -1022,7 +1022,7 @@ of /proc/cpuinfo.
If the hardware revision can not be found or is not a valid If the hardware revision can not be found or is not a valid
hexadecimal number the function returns 0. hexadecimal number the function returns 0.
The revision number can be used to determine the assignment of gpios The revision number can be used to determine the assignment of GPIO
to pins (see [*gpio*]). to pins (see [*gpio*]).
There are at least three types of board. There are at least three types of board.
@ -1077,7 +1077,7 @@ The pulses are interleaved in time order within the existing waveform
(if any). (if any).
Merging allows the waveform to be built in parts, that is the settings Merging allows the waveform to be built in parts, that is the settings
for gpio#1 can be added, and then gpio#2 etc. for GPIO#1 can be added, and then GPIO#2 etc.
If the added waveform is intended to start after or within the existing If the added waveform is intended to start after or within the existing
waveform then the first pulse should consist solely of a delay. waveform then the first pulse should consist solely of a delay.
@ -1164,8 +1164,8 @@ typedef struct
The fields specify The fields specify
1) the gpios to be switched on at the start of the pulse. 1) the GPIO to be switched on at the start of the pulse.
2) the gpios to be switched off at the start of the pulse. 2) the GPIO to be switched off at the start of the pulse.
3) the delay in microseconds before the next pulse. 3) the delay in microseconds before the next pulse.
Any or all the fields can be zero. It doesn't make any sense to Any or all the fields can be zero. It doesn't make any sense to
@ -1403,7 +1403,7 @@ D*/
/*F*/ /*F*/
int gpio_trigger(unsigned user_gpio, unsigned pulseLen, unsigned level); int gpio_trigger(unsigned user_gpio, unsigned pulseLen, unsigned level);
/*D /*D
This function sends a trigger pulse to a gpio. The gpio is set to This function sends a trigger pulse to a GPIO. The GPIO is set to
level for pulseLen microseconds and then reset to not level. level for pulseLen microseconds and then reset to not level.
. . . .
@ -1501,7 +1501,7 @@ D*/
/*F*/ /*F*/
int bb_serial_read_open(unsigned user_gpio, unsigned baud, unsigned data_bits); int bb_serial_read_open(unsigned user_gpio, unsigned baud, unsigned data_bits);
/*D /*D
This function opens a gpio for bit bang reading of serial data. This function opens a GPIO for bit bang reading of serial data.
. . . .
user_gpio: 0-31. user_gpio: 0-31.
@ -1545,7 +1545,7 @@ D*/
/*F*/ /*F*/
int bb_serial_read_close(unsigned user_gpio); int bb_serial_read_close(unsigned user_gpio);
/*D /*D
This function closes a gpio for bit bang reading of serial data. This function closes a GPIO for bit bang reading of serial data.
. . . .
user_gpio: 0-31, previously opened with [*bb_serial_read_open*]. user_gpio: 0-31, previously opened with [*bb_serial_read_open*].
@ -1990,7 +1990,7 @@ D*/
/*F*/ /*F*/
int bb_i2c_open(unsigned SDA, unsigned SCL, unsigned baud); int bb_i2c_open(unsigned SDA, unsigned SCL, unsigned baud);
/*D /*D
This function selects a pair of gpios for bit banging I2C at a This function selects a pair of GPIO for bit banging I2C at a
specified baud rate. specified baud rate.
Bit banging I2C allows for certain operations which are not possible Bit banging I2C allows for certain operations which are not possible
@ -1999,7 +1999,7 @@ with the standard I2C driver.
o baud rates as low as 50 o baud rates as low as 50
o repeated starts o repeated starts
o clock stretching o clock stretching
o I2C on any pair of spare gpios o I2C on any pair of spare GPIO
. . . .
SDA: 0-31 SDA: 0-31
@ -2012,18 +2012,18 @@ PI_GPIO_IN_USE.
NOTE: NOTE:
The gpios used for SDA and SCL must have pull-ups to 3V3 connected. As The GPIO used for SDA and SCL must have pull-ups to 3V3 connected. As
a guide the hardware pull-ups on pins 3 and 5 are 1k8 in value. a guide the hardware pull-ups on pins 3 and 5 are 1k8 in value.
D*/ D*/
/*F*/ /*F*/
int bb_i2c_close(unsigned SDA); int bb_i2c_close(unsigned SDA);
/*D /*D
This function stops bit banging I2C on a pair of gpios previously This function stops bit banging I2C on a pair of GPIO previously
opened with [*bb_i2c_open*]. opened with [*bb_i2c_open*].
. . . .
SDA: 0-31, the SDA gpio used in a prior call to [*bb_i2c_open*] SDA: 0-31, the SDA GPIO used in a prior call to [*bb_i2c_open*]
. . . .
Returns 0 if OK, otherwise PI_BAD_USER_GPIO, or PI_NOT_I2C_GPIO. Returns 0 if OK, otherwise PI_BAD_USER_GPIO, or PI_NOT_I2C_GPIO.
@ -2108,12 +2108,13 @@ Data will be transferred at baud bits per second. The flags may
be used to modify the default behaviour of 4-wire operation, mode 0, be used to modify the default behaviour of 4-wire operation, mode 0,
active low chip select. active low chip select.
An auxiliary SPI device is available on the A+/B+/Pi2 and may be An auxiliary SPI device is available on all models but the
selected by setting the A bit in the flags. The auxiliary A and B and may be selected by setting the A bit in the
device has 3 chip selects and a selectable word size in bits. flags. The auxiliary device has 3 chip selects and a
selectable word size in bits.
. . . .
spi_channel: 0-1 (0-2 for A+/B+/Pi2 auxiliary device). spi_channel: 0-1 (0-2 for the auxiliary SPI device).
baud: 32K-125M (values above 30M are unlikely to work). baud: 32K-125M (values above 30M are unlikely to work).
spi_flags: see below. spi_flags: see below.
. . . .
@ -2142,10 +2143,9 @@ Mode POL PHA
px is 0 if CEx is active low (default) and 1 for active high. px is 0 if CEx is active low (default) and 1 for active high.
ux is 0 if the CEx gpio is reserved for SPI (default) and 1 otherwise. ux is 0 if the CEx GPIO is reserved for SPI (default) and 1 otherwise.
A is 0 for the standard SPI device, 1 for the auxiliary SPI. The A is 0 for the standard SPI device, 1 for the auxiliary SPI.
auxiliary device is only present on the A+/B+/Pi2.
W is 0 if the device is not 3-wire, 1 if the device is 3-wire. Standard W is 0 if the device is not 3-wire, 1 if the device is 3-wire. Standard
SPI device only. SPI device only.
@ -2392,8 +2392,8 @@ user_gpio: 0-31.
The function returns a callback id if OK, otherwise pigif_bad_malloc, The function returns a callback id if OK, otherwise pigif_bad_malloc,
pigif_duplicate_callback, or pigif_bad_callback. pigif_duplicate_callback, or pigif_bad_callback.
The callback is called with the gpio, edge, and tick, whenever the The callback is called with the GPIO, edge, and tick, whenever the
gpio has the identified edge. GPIO has the identified edge.
D*/ D*/
/*F*/ /*F*/
@ -2412,8 +2412,8 @@ user_gpio: 0-31.
The function returns a callback id if OK, otherwise pigif_bad_malloc, The function returns a callback id if OK, otherwise pigif_bad_malloc,
pigif_duplicate_callback, or pigif_bad_callback. pigif_duplicate_callback, or pigif_bad_callback.
The callback is called with the gpio, edge, tick, and user, whenever The callback is called with the GPIO, edge, tick, and user, whenever
the gpio has the identified edge. the GPIO has the identified edge.
D*/ D*/
@ -2432,7 +2432,7 @@ D*/
/*F*/ /*F*/
int wait_for_edge(unsigned user_gpio, unsigned edge, double timeout); int wait_for_edge(unsigned user_gpio, unsigned edge, double timeout);
/*D /*D
This function waits for edge on the gpio for up to timeout This function waits for edge on the GPIO for up to timeout
seconds. seconds.
. . . .
@ -2483,7 +2483,7 @@ bit::
A value of 0 or 1. A value of 0 or 1.
bits:: bits::
A value used to select gpios. If bit n of bits is set then gpio n is A value used to select GPIO. If bit n of bits is set then GPIO n is
selected. selected.
A convenient way to set bit n is to or in (1<<n). A convenient way to set bit n is to or in (1<<n).
@ -2544,7 +2544,7 @@ The number may vary between 0 and range (default 255) where
0 is off and range is fully on. 0 is off and range is fully on.
edge:: edge::
Used to identify a gpio level transition of interest. A rising edge is Used to identify a GPIO level transition of interest. A rising edge is
a level change from 0 to 1. A falling edge is a level change from 1 to 0. a level change from 0 to 1. A falling edge is a level change from 1 to 0.
. . . .
@ -2561,28 +2561,28 @@ f::
A function. A function.
frequency::0- frequency::0-
The number of times a gpio is swiched on and off per second. This The number of times a GPIO is swiched on and off per second. This
can be set per gpio and may be as little as 5Hz or as much as can be set per GPIO and may be as little as 5Hz or as much as
40KHz. The gpio will be on for a proportion of the time as defined 40KHz. The GPIO will be on for a proportion of the time as defined
by its dutycycle. by its dutycycle.
gpio:: gpio::
A Broadcom numbered gpio, in the range 0-53. A Broadcom numbered GPIO, in the range 0-53.
There are 54 General Purpose Input Outputs (gpios) named gpio0 through There are 54 General Purpose Input Outputs (GPIO) named gpio0 through
gpio53. gpio53.
They are split into two banks. Bank 1 consists of gpio0 through They are split into two banks. Bank 1 consists of gpio0 through
gpio31. Bank 2 consists of gpio32 through gpio53. gpio31. Bank 2 consists of gpio32 through gpio53.
All the gpios which are safe for the user to read and write are in All the GPIO which are safe for the user to read and write are in
bank 1. Not all gpios in bank 1 are safe though. Type 1 boards bank 1. Not all GPIO in bank 1 are safe though. Type 1 boards
have 17 safe gpios. Type 2 boards have 21. Type 3 boards have 26. have 17 safe GPIO. Type 2 boards have 21. Type 3 boards have 26.
See [*get_hardware_revision*]. See [*get_hardware_revision*].
The user gpios are marked with an X in the following table. The user GPIO are marked with an X in the following table.
. . . .
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@ -2640,7 +2640,7 @@ invert::
A flag used to set normal or inverted bit bang serial data level logic. A flag used to set normal or inverted bit bang serial data level logic.
level:: level::
The level of a gpio. Low or High. The level of a GPIO. Low or High.
. . . .
PI_OFF 0 PI_OFF 0
@ -2653,7 +2653,7 @@ PI_LOW 0
PI_HIGH 1 PI_HIGH 1
. . . .
There is one exception. If a watchdog expires on a gpio the level will be There is one exception. If a watchdog expires on a GPIO the level will be
reported as PI_TIMEOUT. See [*set_watchdog*]. reported as PI_TIMEOUT. See [*set_watchdog*].
. . . .
@ -2661,7 +2661,7 @@ PI_TIMEOUT 2
. . . .
mode::0-7 mode::0-7
The operational mode of a gpio, normally INPUT or OUTPUT. The operational mode of a GPIO, normally INPUT or OUTPUT.
. . . .
PI_INPUT 0 PI_INPUT 0
@ -2712,7 +2712,7 @@ pthread_t::
A thread identifier. A thread identifier.
pud::0-2 pud::0-2
The setting of the pull up/down resistor for a gpio, which may be off, The setting of the pull up/down resistor for a GPIO, which may be off,
pull-up, or pull-down. pull-up, or pull-down.
. . . .
PI_PUD_OFF 0 PI_PUD_OFF 0
@ -2766,7 +2766,7 @@ The maximum number of bytes a user customised function should return.
A pointer to a buffer to receive data. A pointer to a buffer to receive data.
SCL:: SCL::
The user gpio to use for the clock when bit banging I2C. The user GPIO to use for the clock when bit banging I2C.
*script:: *script::
A pointer to the text of a script. A pointer to the text of a script.
@ -2775,7 +2775,7 @@ script_id::
An id of a stored script as returned by [*store_script*]. An id of a stored script as returned by [*store_script*].
SDA:: SDA::
The user gpio to use for data when bit banging I2C. The user GPIO to use for data when bit banging I2C.
seconds:: seconds::
The number of seconds. The number of seconds.
@ -2818,7 +2818,7 @@ A function of type gpioThreadFunc_t used as the main function of a
thread. thread.
timeout:: timeout::
A gpio watchdog timeout in milliseconds. A GPIO watchdog timeout in milliseconds.
. . . .
PI_MIN_WDOG_TIMEOUT 0 PI_MIN_WDOG_TIMEOUT 0
PI_MAX_WDOG_TIMEOUT 60000 PI_MAX_WDOG_TIMEOUT 60000
@ -2834,7 +2834,7 @@ unsigned::
A whole number >= 0. A whole number >= 0.
user_gpio:: user_gpio::
0-31, a Broadcom numbered gpio. 0-31, a Broadcom numbered GPIO.
See [*gpio*]. See [*gpio*].

View File

@ -21,7 +21,7 @@ gcc -Wall -pthread -o prog prog.c -lpigpiod_if2 -lrt
.br .br
pigpiod_if2 is a C library for the Raspberry which allows control pigpiod_if2 is a C library for the Raspberry which allows control
of the gpios via the socket interface to the pigpio daemon. of the GPIO via the socket interface to the pigpio daemon.
.br .br
.br .br
@ -31,17 +31,17 @@ of the gpios via the socket interface to the pigpio daemon.
.br .br
.br .br
o PWM on any of gpios 0-31 o PWM on any of GPIO 0-31
.br .br
.br .br
o servo pulses on any of gpios 0-31 o servo pulses on any of GPIO 0-31
.br .br
.br .br
o callbacks when any of gpios 0-31 change state o callbacks when any of GPIO 0-31 change state
.br .br
@ -51,17 +51,17 @@ o callbacks at timed intervals
.br .br
.br .br
o reading/writing all of the gpios in a bank as one operation o reading/writing all of the GPIO in a bank as one operation
.br .br
.br .br
o individually setting gpio modes, reading and writing o individually setting GPIO modes, reading and writing
.br .br
.br .br
o notifications when any of gpios 0-31 change state o notifications when any of GPIO 0-31 change state
.br .br
@ -71,7 +71,7 @@ o the construction of output waveforms with microsecond timing
.br .br
.br .br
o rudimentary permission control over gpios o rudimentary permission control over GPIO
.br .br
@ -91,11 +91,11 @@ o creating and running scripts on the pigpio daemon
.br .br
.br .br
.SS gpios .SS GPIO
.br .br
.br .br
ALL gpios are identified by their Broadcom number. ALL GPIO are identified by their Broadcom number.
.br .br
@ -319,7 +319,7 @@ pi: 0- (as returned by \fBpigpio_start\fP).
.IP "\fBint set_mode(int pi, unsigned gpio, unsigned mode)\fP" .IP "\fBint set_mode(int pi, unsigned gpio, unsigned mode)\fP"
.IP "" 4 .IP "" 4
Set the gpio mode. Set the GPIO mode.
.br .br
@ -345,7 +345,7 @@ or PI_NOT_PERMITTED.
.IP "\fBint get_mode(int pi, unsigned gpio)\fP" .IP "\fBint get_mode(int pi, unsigned gpio)\fP"
.IP "" 4 .IP "" 4
Get the gpio mode. Get the GPIO mode.
.br .br
@ -362,11 +362,11 @@ gpio: 0-53.
.br .br
.br .br
Returns the gpio mode if OK, otherwise PI_BAD_GPIO. Returns the GPIO mode if OK, otherwise PI_BAD_GPIO.
.IP "\fBint set_pull_up_down(int pi, unsigned gpio, unsigned pud)\fP" .IP "\fBint set_pull_up_down(int pi, unsigned gpio, unsigned pud)\fP"
.IP "" 4 .IP "" 4
Set or clear the gpio pull-up/down resistor. Set or clear the GPIO pull-up/down resistor.
.br .br
@ -390,7 +390,7 @@ or PI_NOT_PERMITTED.
.IP "\fBint gpio_read(int pi, unsigned gpio)\fP" .IP "\fBint gpio_read(int pi, unsigned gpio)\fP"
.IP "" 4 .IP "" 4
Read the gpio level. Read the GPIO level.
.br .br
@ -407,11 +407,11 @@ gpio:0-53.
.br .br
.br .br
Returns the gpio level if OK, otherwise PI_BAD_GPIO. Returns the GPIO level if OK, otherwise PI_BAD_GPIO.
.IP "\fBint gpio_write(int pi, unsigned gpio, unsigned level)\fP" .IP "\fBint gpio_write(int pi, unsigned gpio, unsigned level)\fP"
.IP "" 4 .IP "" 4
Write the gpio level. Write the GPIO level.
.br .br
@ -441,11 +441,11 @@ Notes
.br .br
.br .br
If PWM or servo pulses are active on the gpio they are switched off. If PWM or servo pulses are active on the GPIO they are switched off.
.IP "\fBint set_PWM_dutycycle(int pi, unsigned user_gpio, unsigned dutycycle)\fP" .IP "\fBint set_PWM_dutycycle(int pi, unsigned user_gpio, unsigned dutycycle)\fP"
.IP "" 4 .IP "" 4
Start (non-zero dutycycle) or stop (0) PWM pulses on the gpio. Start (non-zero dutycycle) or stop (0) PWM pulses on the GPIO.
.br .br
@ -476,7 +476,7 @@ default range of 255.
.IP "\fBint get_PWM_dutycycle(int pi, unsigned user_gpio)\fP" .IP "\fBint get_PWM_dutycycle(int pi, unsigned user_gpio)\fP"
.IP "" 4 .IP "" 4
Return the PWM dutycycle in use on a gpio. Return the PWM dutycycle in use on a GPIO.
.br .br
@ -499,23 +499,23 @@ Returns 0 if OK, otherwise PI_BAD_USER_GPIO or PI_NOT_PWM_GPIO.
.br .br
For normal PWM the dutycycle will be out of the defined range For normal PWM the dutycycle will be out of the defined range
for the gpio (see \fBget_PWM_range\fP). for the GPIO (see \fBget_PWM_range\fP).
.br .br
.br .br
If a hardware clock is active on the gpio the reported dutycycle If a hardware clock is active on the GPIO the reported dutycycle
will be 500000 (500k) out of 1000000 (1M). will be 500000 (500k) out of 1000000 (1M).
.br .br
.br .br
If hardware PWM is active on the gpio the reported dutycycle If hardware PWM is active on the GPIO the reported dutycycle
will be out of a 1000000 (1M). will be out of a 1000000 (1M).
.IP "\fBint set_PWM_range(int pi, unsigned user_gpio, unsigned range)\fP" .IP "\fBint set_PWM_range(int pi, unsigned user_gpio, unsigned range)\fP"
.IP "" 4 .IP "" 4
Set the range of PWM values to be used on the gpio. Set the range of PWM values to be used on the GPIO.
.br .br
@ -545,14 +545,14 @@ Notes
.br .br
.br .br
If PWM is currently active on the gpio its dutycycle will be If PWM is currently active on the GPIO its dutycycle will be
scaled to reflect the new range. scaled to reflect the new range.
.br .br
.br .br
The real range, the number of steps between fully off and fully on The real range, the number of steps between fully off and fully on
for each of the 18 available gpio frequencies is for each of the 18 available GPIO frequencies is
.br .br
@ -575,7 +575,7 @@ The real value set by set_PWM_range is (dutycycle * real range) / range.
.IP "\fBint get_PWM_range(int pi, unsigned user_gpio)\fP" .IP "\fBint get_PWM_range(int pi, unsigned user_gpio)\fP"
.IP "" 4 .IP "" 4
Get the range of PWM values being used on the gpio. Get the range of PWM values being used on the GPIO.
.br .br
@ -592,18 +592,18 @@ user_gpio: 0-31.
.br .br
.br .br
Returns the dutycycle range used for the gpio if OK, Returns the dutycycle range used for the GPIO if OK,
otherwise PI_BAD_USER_GPIO. otherwise PI_BAD_USER_GPIO.
.br .br
.br .br
If a hardware clock or hardware PWM is active on the gpio the If a hardware clock or hardware PWM is active on the GPIO the
reported range will be 1000000 (1M). reported range will be 1000000 (1M).
.IP "\fBint get_PWM_real_range(int pi, unsigned user_gpio)\fP" .IP "\fBint get_PWM_real_range(int pi, unsigned user_gpio)\fP"
.IP "" 4 .IP "" 4
Get the real underlying range of PWM values being used on the gpio. Get the real underlying range of PWM values being used on the GPIO.
.br .br
@ -620,19 +620,19 @@ user_gpio: 0-31.
.br .br
.br .br
Returns the real range used for the gpio if OK, Returns the real range used for the GPIO if OK,
otherwise PI_BAD_USER_GPIO. otherwise PI_BAD_USER_GPIO.
.br .br
.br .br
If a hardware clock is active on the gpio the reported If a hardware clock is active on the GPIO the reported
real range will be 1000000 (1M). real range will be 1000000 (1M).
.br .br
.br .br
If hardware PWM is active on the gpio the reported real range If hardware PWM is active on the GPIO the reported real range
will be approximately 250M divided by the set PWM frequency. will be approximately 250M divided by the set PWM frequency.
.br .br
@ -641,7 +641,7 @@ will be approximately 250M divided by the set PWM frequency.
.IP "\fBint set_PWM_frequency(int pi, unsigned user_gpio, unsigned frequency)\fP" .IP "\fBint set_PWM_frequency(int pi, unsigned user_gpio, unsigned frequency)\fP"
.IP "" 4 .IP "" 4
Set the frequency (in Hz) of the PWM to be used on the gpio. Set the frequency (in Hz) of the PWM to be used on the GPIO.
.br .br
@ -673,13 +673,13 @@ sample rate is set when the C pigpio library is started.
.br .br
.br .br
Each gpio can be independently set to one of 18 different Each GPIO can be independently set to one of 18 different
PWM frequencies. PWM frequencies.
.br .br
.br .br
If PWM is currently active on the gpio it will be switched If PWM is currently active on the GPIO it will be switched
off and then back on at the new frequency. off and then back on at the new frequency.
.br .br
@ -726,7 +726,7 @@ off and then back on at the new frequency.
.IP "\fBint get_PWM_frequency(int pi, unsigned user_gpio)\fP" .IP "\fBint get_PWM_frequency(int pi, unsigned user_gpio)\fP"
.IP "" 4 .IP "" 4
Get the frequency of PWM being used on the gpio. Get the frequency of PWM being used on the GPIO.
.br .br
@ -743,30 +743,30 @@ user_gpio: 0-31.
.br .br
.br .br
For normal PWM the frequency will be that defined for the gpio by For normal PWM the frequency will be that defined for the GPIO by
\fBset_PWM_frequency\fP. \fBset_PWM_frequency\fP.
.br .br
.br .br
If a hardware clock is active on the gpio the reported frequency If a hardware clock is active on the GPIO the reported frequency
will be that set by \fBhardware_clock\fP. will be that set by \fBhardware_clock\fP.
.br .br
.br .br
If hardware PWM is active on the gpio the reported frequency If hardware PWM is active on the GPIO the reported frequency
will be that set by \fBhardware_PWM\fP. will be that set by \fBhardware_PWM\fP.
.br .br
.br .br
Returns the frequency (in hertz) used for the gpio if OK, Returns the frequency (in hertz) used for the GPIO if OK,
otherwise PI_BAD_USER_GPIO. otherwise PI_BAD_USER_GPIO.
.IP "\fBint set_servo_pulsewidth(int pi, unsigned user_gpio, unsigned pulsewidth)\fP" .IP "\fBint set_servo_pulsewidth(int pi, unsigned user_gpio, unsigned pulsewidth)\fP"
.IP "" 4 .IP "" 4
Start (500-2500) or stop (0) servo pulses on the gpio. Start (500-2500) or stop (0) servo pulses on the GPIO.
.br .br
@ -844,7 +844,7 @@ the servo pulsewidth.
.br .br
.br .br
E.g. If you want to update a servo connected to gpio 25 at 400Hz E.g. If you want to update a servo connected to GPIO 25 at 400Hz
.br .br
@ -867,7 +867,7 @@ e.g. set_PWM_dutycycle(25, 1500) will set a 1500 us pulse.
.IP "\fBint get_servo_pulsewidth(int pi, unsigned user_gpio)\fP" .IP "\fBint get_servo_pulsewidth(int pi, unsigned user_gpio)\fP"
.IP "" 4 .IP "" 4
Return the servo pulsewidth in use on a gpio. Return the servo pulsewidth in use on a GPIO.
.br .br
@ -909,7 +909,7 @@ otherwise PI_NO_HANDLE.
.br .br
.br .br
A notification is a method for being notified of gpio state A notification is a method for being notified of GPIO state
changes via a pipe. changes via a pipe.
.br .br
@ -941,7 +941,7 @@ Start notifications on a previously opened handle.
.br .br
handle: 0-31 (as returned by \fBnotify_open\fP) handle: 0-31 (as returned by \fBnotify_open\fP)
.br .br
bits: a mask indicating the gpios to be notified. bits: a mask indicating the GPIO to be notified.
.br .br
.EE .EE
@ -954,7 +954,7 @@ Returns 0 if OK, otherwise PI_BAD_HANDLE.
.br .br
.br .br
The notification sends state changes for each gpio whose The notification sends state changes for each GPIO whose
corresponding bit in bits is set. corresponding bit in bits is set.
.br .br
@ -1034,7 +1034,7 @@ Returns 0 if OK, otherwise PI_BAD_HANDLE.
.IP "\fBint set_watchdog(int pi, unsigned user_gpio, unsigned timeout)\fP" .IP "\fBint set_watchdog(int pi, unsigned user_gpio, unsigned timeout)\fP"
.IP "" 4 .IP "" 4
Sets a watchdog for a gpio. Sets a watchdog for a GPIO.
.br .br
@ -1064,7 +1064,7 @@ The watchdog is nominally in milliseconds.
.br .br
.br .br
Only one watchdog may be registered per gpio. Only one watchdog may be registered per GPIO.
.br .br
@ -1074,24 +1074,24 @@ The watchdog may be cancelled by setting timeout to 0.
.br .br
.br .br
If no level change has been detected for the gpio for timeout If no level change has been detected for the GPIO for timeout
milliseconds any notification for the gpio has a report written milliseconds any notification for the GPIO has a report written
to the fifo with the flags set to indicate a watchdog timeout. to the fifo with the flags set to indicate a watchdog timeout.
.br .br
.br .br
The \fBcallback\fP and \fBcallback_ex\fP functions interpret the flags The \fBcallback\fP and \fBcallback_ex\fP functions interpret the flags
and will call registered callbacks for the gpio with level TIMEOUT. and will call registered callbacks for the GPIO with level TIMEOUT.
.IP "\fBint set_glitch_filter(int pi, unsigned user_gpio, unsigned steady)\fP" .IP "\fBint set_glitch_filter(int pi, unsigned user_gpio, unsigned steady)\fP"
.IP "" 4 .IP "" 4
Sets a glitch filter on a gpio. Sets a glitch filter on a GPIO.
.br .br
.br .br
Level changes on the gpio are not reported unless the level Level changes on the GPIO are not reported unless the level
has been stable for at least \fBsteady\fP microseconds. The has been stable for at least \fBsteady\fP microseconds. The
level is then reported. Level changes of less than level is then reported. Level changes of less than
\fBsteady\fP microseconds are ignored. \fBsteady\fP microseconds are ignored.
@ -1123,14 +1123,14 @@ after it was first detected.
.IP "\fBint set_noise_filter(int pi, unsigned user_gpio, unsigned steady, unsigned active)\fP" .IP "\fBint set_noise_filter(int pi, unsigned user_gpio, unsigned steady, unsigned active)\fP"
.IP "" 4 .IP "" 4
Sets a noise filter on a gpio. Sets a noise filter on a GPIO.
.br .br
.br .br
Level changes on the gpio are ignored until a level which has Level changes on the GPIO are ignored until a level which has
been stable for \fBsteady\fP microseconds is detected. Level changes been stable for \fBsteady\fP microseconds is detected. Level changes
on the gpio are then reported for \fBactive\fP microseconds after on the GPIO are then reported for \fBactive\fP microseconds after
which the process repeats. which the process repeats.
.br .br
@ -1163,7 +1163,7 @@ such reports.
.IP "\fBuint32_t read_bank_1(int pi)\fP" .IP "\fBuint32_t read_bank_1(int pi)\fP"
.IP "" 4 .IP "" 4
Read the levels of the bank 1 gpios (gpios 0-31). Read the levels of the bank 1 GPIO (GPIO 0-31).
.br .br
@ -1179,11 +1179,11 @@ pi: 0- (as returned by \fBpigpio_start\fP).
.br .br
The returned 32 bit integer has a bit set if the corresponding The returned 32 bit integer has a bit set if the corresponding
gpio is logic 1. Gpio n has bit value (1<<n). GPIO is logic 1. GPIO n has bit value (1<<n).
.IP "\fBuint32_t read_bank_2(int pi)\fP" .IP "\fBuint32_t read_bank_2(int pi)\fP"
.IP "" 4 .IP "" 4
Read the levels of the bank 2 gpios (gpios 32-53). Read the levels of the bank 2 GPIO (GPIO 32-53).
.br .br
@ -1199,11 +1199,11 @@ pi: 0- (as returned by \fBpigpio_start\fP).
.br .br
The returned 32 bit integer has a bit set if the corresponding The returned 32 bit integer has a bit set if the corresponding
gpio is logic 1. Gpio n has bit value (1<<(n-32)). GPIO is logic 1. GPIO n has bit value (1<<(n-32)).
.IP "\fBint clear_bank_1(int pi, uint32_t bits)\fP" .IP "\fBint clear_bank_1(int pi, uint32_t bits)\fP"
.IP "" 4 .IP "" 4
Clears gpios 0-31 if the corresponding bit in bits is set. Clears GPIO 0-31 if the corresponding bit in bits is set.
.br .br
@ -1212,7 +1212,7 @@ Clears gpios 0-31 if the corresponding bit in bits is set.
.EX .EX
pi: 0- (as returned by \fBpigpio_start\fP). pi: 0- (as returned by \fBpigpio_start\fP).
.br .br
bits: a bit mask with 1 set if the corresponding gpio is bits: a bit mask with 1 set if the corresponding GPIO is
.br .br
to be cleared. to be cleared.
.br .br
@ -1228,11 +1228,11 @@ Returns 0 if OK, otherwise PI_SOME_PERMITTED.
.br .br
A status of PI_SOME_PERMITTED indicates that the user is not A status of PI_SOME_PERMITTED indicates that the user is not
allowed to write to one or more of the gpios. allowed to write to one or more of the GPIO.
.IP "\fBint clear_bank_2(int pi, uint32_t bits)\fP" .IP "\fBint clear_bank_2(int pi, uint32_t bits)\fP"
.IP "" 4 .IP "" 4
Clears gpios 32-53 if the corresponding bit (0-21) in bits is set. Clears GPIO 32-53 if the corresponding bit (0-21) in bits is set.
.br .br
@ -1241,7 +1241,7 @@ Clears gpios 32-53 if the corresponding bit (0-21) in bits is set.
.EX .EX
pi: 0- (as returned by \fBpigpio_start\fP). pi: 0- (as returned by \fBpigpio_start\fP).
.br .br
bits: a bit mask with 1 set if the corresponding gpio is bits: a bit mask with 1 set if the corresponding GPIO is
.br .br
to be cleared. to be cleared.
.br .br
@ -1257,11 +1257,11 @@ Returns 0 if OK, otherwise PI_SOME_PERMITTED.
.br .br
A status of PI_SOME_PERMITTED indicates that the user is not A status of PI_SOME_PERMITTED indicates that the user is not
allowed to write to one or more of the gpios. allowed to write to one or more of the GPIO.
.IP "\fBint set_bank_1(int pi, uint32_t bits)\fP" .IP "\fBint set_bank_1(int pi, uint32_t bits)\fP"
.IP "" 4 .IP "" 4
Sets gpios 0-31 if the corresponding bit in bits is set. Sets GPIO 0-31 if the corresponding bit in bits is set.
.br .br
@ -1270,7 +1270,7 @@ Sets gpios 0-31 if the corresponding bit in bits is set.
.EX .EX
pi: 0- (as returned by \fBpigpio_start\fP). pi: 0- (as returned by \fBpigpio_start\fP).
.br .br
bits: a bit mask with 1 set if the corresponding gpio is bits: a bit mask with 1 set if the corresponding GPIO is
.br .br
to be set. to be set.
.br .br
@ -1286,11 +1286,11 @@ Returns 0 if OK, otherwise PI_SOME_PERMITTED.
.br .br
A status of PI_SOME_PERMITTED indicates that the user is not A status of PI_SOME_PERMITTED indicates that the user is not
allowed to write to one or more of the gpios. allowed to write to one or more of the GPIO.
.IP "\fBint set_bank_2(int pi, uint32_t bits)\fP" .IP "\fBint set_bank_2(int pi, uint32_t bits)\fP"
.IP "" 4 .IP "" 4
Sets gpios 32-53 if the corresponding bit (0-21) in bits is set. Sets GPIO 32-53 if the corresponding bit (0-21) in bits is set.
.br .br
@ -1299,7 +1299,7 @@ Sets gpios 32-53 if the corresponding bit (0-21) in bits is set.
.EX .EX
pi: 0- (as returned by \fBpigpio_start\fP). pi: 0- (as returned by \fBpigpio_start\fP).
.br .br
bits: a bit mask with 1 set if the corresponding gpio is bits: a bit mask with 1 set if the corresponding GPIO is
.br .br
to be set. to be set.
.br .br
@ -1315,11 +1315,11 @@ Returns 0 if OK, otherwise PI_SOME_PERMITTED.
.br .br
A status of PI_SOME_PERMITTED indicates that the user is not A status of PI_SOME_PERMITTED indicates that the user is not
allowed to write to one or more of the gpios. allowed to write to one or more of the GPIO.
.IP "\fBint hardware_clock(int pi, unsigned gpio, unsigned clkfreq)\fP" .IP "\fBint hardware_clock(int pi, unsigned gpio, unsigned clkfreq)\fP"
.IP "" 4 .IP "" 4
Starts a hardware clock on a gpio at the specified frequency. Starts a hardware clock on a GPIO at the specified frequency.
Frequencies above 30MHz are unlikely to work. Frequencies above 30MHz are unlikely to work.
.br .br
@ -1345,13 +1345,13 @@ PI_NOT_HCLK_GPIO, PI_BAD_HCLK_FREQ,or PI_BAD_HCLK_PASS.
.br .br
.br .br
The same clock is available on multiple gpios. The latest The same clock is available on multiple GPIO. The latest
frequency setting will be used by all gpios which share a clock. frequency setting will be used by all GPIO which share a clock.
.br .br
.br .br
The gpio must be one of the following. The GPIO must be one of the following.
.br .br
@ -1360,13 +1360,13 @@ The gpio must be one of the following.
.EX .EX
4 clock 0 All models 4 clock 0 All models
.br .br
5 clock 1 A+/B+/Pi2/Zero and compute module only (reserved for system use) 5 clock 1 All models but A and B (reserved for system use)
.br .br
6 clock 2 A+/B+/Pi2/Zero and compute module only 6 clock 2 All models but A and B
.br .br
20 clock 0 A+/B+/Pi2/Zero and compute module only 20 clock 0 All models but A and B
.br .br
21 clock 1 All models but Rev.2 B (reserved for system use) 21 clock 1 All models but A and Rev.2 B (reserved for system use)
.br .br
.br .br
@ -1388,11 +1388,11 @@ The gpio must be one of the following.
.br .br
Access to clock 1 is protected by a password as its use will likely Access to clock 1 is protected by a password as its use will likely
crash the Pi. The password is given by or'ing 0x5A000000 with the crash the Pi. The password is given by or'ing 0x5A000000 with the
gpio number. GPIO number.
.IP "\fBint hardware_PWM(int pi, unsigned gpio, unsigned PWMfreq, uint32_t PWMduty)\fP" .IP "\fBint hardware_PWM(int pi, unsigned gpio, unsigned PWMfreq, uint32_t PWMduty)\fP"
.IP "" 4 .IP "" 4
Starts hardware PWM on a gpio at the specified frequency and dutycycle. Starts hardware PWM on a GPIO at the specified frequency and dutycycle.
Frequencies above 30MHz are unlikely to work. Frequencies above 30MHz are unlikely to work.
.br .br
@ -1434,27 +1434,27 @@ or PI_HPWM_ILLEGAL.
.br .br
.br .br
The same PWM channel is available on multiple gpios. The latest The same PWM channel is available on multiple GPIO. The latest
frequency and dutycycle setting will be used by all gpios which frequency and dutycycle setting will be used by all GPIO which
share a PWM channel. share a PWM channel.
.br .br
.br .br
The gpio must be one of the following. The GPIO must be one of the following.
.br .br
.br .br
.EX .EX
12 PWM channel 0 A+/B+/Pi2/Zero and compute module only 12 PWM channel 0 All models but A and B
.br .br
13 PWM channel 1 A+/B+/Pi2/Zero and compute module only 13 PWM channel 1 All models but A and B
.br .br
18 PWM channel 0 All models 18 PWM channel 0 All models
.br .br
19 PWM channel 1 A+/B+/Pi2/Zero and compute module only 19 PWM channel 1 All models but A and B
.br .br
.br .br
@ -1548,7 +1548,7 @@ hexadecimal number the function returns 0.
.br .br
.br .br
The revision number can be used to determine the assignment of gpios The revision number can be used to determine the assignment of GPIO
to pins (see \fBgpio\fP). to pins (see \fBgpio\fP).
.br .br
@ -1660,7 +1660,7 @@ The pulses are interleaved in time order within the existing waveform
.br .br
Merging allows the waveform to be built in parts, that is the settings Merging allows the waveform to be built in parts, that is the settings
for gpio#1 can be added, and then gpio#2 etc. for GPIO#1 can be added, and then GPIO#2 etc.
.br .br
@ -1835,9 +1835,9 @@ The fields specify
.br .br
.br .br
1) the gpios to be switched on at the start of the pulse. 1) the GPIO to be switched on at the start of the pulse.
.br .br
2) the gpios to be switched off at the start of the pulse. 2) the GPIO to be switched off at the start of the pulse.
.br .br
3) the delay in microseconds before the next pulse. 3) the delay in microseconds before the next pulse.
.br .br
@ -2199,6 +2199,33 @@ int main(int argc, char *argv[])
.EE .EE
.IP "\fBint wave_tx_at(int pi)\fP"
.IP "" 4
This function returns the id of the waveform currently being
transmitted.
.br
.br
.EX
pi: 0- (as returned by \fBpigpio_start\fP).
.br
.EE
.br
.br
Returns the waveform id or one of the following special values:
.br
.br
PI_WAVE_NOT_FOUND (9998) - transmitted wave not found.
.br
PI_NO_TX_WAVE (9999) - no wave being transmitted.
.IP "\fBint wave_tx_busy(int pi)\fP" .IP "\fBint wave_tx_busy(int pi)\fP"
.IP "" 4 .IP "" 4
This function checks to see if a waveform is currently being This function checks to see if a waveform is currently being
@ -2379,7 +2406,7 @@ pi: 0- (as returned by \fBpigpio_start\fP).
.IP "\fBint gpio_trigger(int pi, unsigned user_gpio, unsigned pulseLen, unsigned level)\fP" .IP "\fBint gpio_trigger(int pi, unsigned user_gpio, unsigned pulseLen, unsigned level)\fP"
.IP "" 4 .IP "" 4
This function sends a trigger pulse to a gpio. The gpio is set to This function sends a trigger pulse to a GPIO. The GPIO is set to
level for pulseLen microseconds and then reset to not level. level for pulseLen microseconds and then reset to not level.
.br .br
@ -2555,7 +2582,7 @@ The function returns 0 if OK, otherwise PI_BAD_SCRIPT_ID.
.IP "\fBint bb_serial_read_open(int pi, unsigned user_gpio, unsigned baud, unsigned data_bits)\fP" .IP "\fBint bb_serial_read_open(int pi, unsigned user_gpio, unsigned baud, unsigned data_bits)\fP"
.IP "" 4 .IP "" 4
This function opens a gpio for bit bang reading of serial data. This function opens a GPIO for bit bang reading of serial data.
.br .br
@ -2635,7 +2662,7 @@ For \fBdata_bits\fP 17-32 there will be four bytes per character.
.IP "\fBint bb_serial_read_close(int pi, unsigned user_gpio)\fP" .IP "\fBint bb_serial_read_close(int pi, unsigned user_gpio)\fP"
.IP "" 4 .IP "" 4
This function closes a gpio for bit bang reading of serial data. This function closes a GPIO for bit bang reading of serial data.
.br .br
@ -3475,7 +3502,7 @@ End
.IP "\fBint bb_i2c_open(int pi, unsigned SDA, unsigned SCL, unsigned baud)\fP" .IP "\fBint bb_i2c_open(int pi, unsigned SDA, unsigned SCL, unsigned baud)\fP"
.IP "" 4 .IP "" 4
This function selects a pair of gpios for bit banging I2C at a This function selects a pair of GPIO for bit banging I2C at a
specified baud rate. specified baud rate.
.br .br
@ -3493,7 +3520,7 @@ o repeated starts
.br .br
o clock stretching o clock stretching
.br .br
o I2C on any pair of spare gpios o I2C on any pair of spare GPIO
.br .br
@ -3525,12 +3552,12 @@ NOTE:
.br .br
.br .br
The gpios used for SDA and SCL must have pull-ups to 3V3 connected. As The GPIO used for SDA and SCL must have pull-ups to 3V3 connected. As
a guide the hardware pull-ups on pins 3 and 5 are 1k8 in value. a guide the hardware pull-ups on pins 3 and 5 are 1k8 in value.
.IP "\fBint bb_i2c_close(int pi, unsigned SDA)\fP" .IP "\fBint bb_i2c_close(int pi, unsigned SDA)\fP"
.IP "" 4 .IP "" 4
This function stops bit banging I2C on a pair of gpios previously This function stops bit banging I2C on a pair of GPIO previously
opened with \fBbb_i2c_open\fP. opened with \fBbb_i2c_open\fP.
.br .br
@ -3540,7 +3567,7 @@ opened with \fBbb_i2c_open\fP.
.EX .EX
pi: 0- (as returned by \fBpigpio_start\fP). pi: 0- (as returned by \fBpigpio_start\fP).
.br .br
SDA: 0-31, the SDA gpio used in a prior call to \fBbb_i2c_open\fP SDA: 0-31, the SDA GPIO used in a prior call to \fBbb_i2c_open\fP
.br .br
.EE .EE
@ -3700,9 +3727,10 @@ active low chip select.
.br .br
.br .br
An auxiliary SPI device is available on the A+/B+/Pi2/Zero and may be An auxiliary SPI device is available on all models but the
selected by setting the A bit in the flags. The auxiliary A and B and may be selected by setting the A bit in the
device has 3 chip selects and a selectable word size in bits. flags. The auxiliary device has 3 chip selects and a
selectable word size in bits.
.br .br
@ -3711,7 +3739,7 @@ device has 3 chip selects and a selectable word size in bits.
.EX .EX
pi: 0- (as returned by \fBpigpio_start\fP). pi: 0- (as returned by \fBpigpio_start\fP).
.br .br
spi_channel: 0-1 (0-2 for A+/B+/Pi2/Zero auxiliary device). spi_channel: 0-1 (0-2 for the auxiliary device).
.br .br
baud: 32K-125M (values above 30M are unlikely to work). baud: 32K-125M (values above 30M are unlikely to work).
.br .br
@ -3779,13 +3807,12 @@ px is 0 if CEx is active low (default) and 1 for active high.
.br .br
.br .br
ux is 0 if the CEx gpio is reserved for SPI (default) and 1 otherwise. ux is 0 if the CEx GPIO is reserved for SPI (default) and 1 otherwise.
.br .br
.br .br
A is 0 for the standard SPI device, 1 for the auxiliary SPI. The A is 0 for the standard SPI device, 1 for the auxiliary SPI.
auxiliary device is only present on the A+/B+/Pi2/Zero.
.br .br
@ -3822,6 +3849,28 @@ sets 8 bits per word. Auxiliary SPI device only.
.br .br
.br
The \fBspi_read\fP, \fBspi_write\fP, and \fBspi_xfer\fP functions
transfer data packed into 1, 2, or 4 bytes according to
the word size in bits.
.br
.br
For bits 1-8 there will be one byte per character.
.br
For bits 9-16 there will be two bytes per character.
.br
For bits 17-32 there will be four bytes per character.
.br
.br
E.g. to transfer 32 12-bit words buf should contain 64 bytes
and count should be 64.
.br
.br .br
The other bits in flags should be set to zero. The other bits in flags should be set to zero.
@ -4213,8 +4262,8 @@ pigif_duplicate_callback, or pigif_bad_callback.
.br .br
.br .br
The callback is called with the gpio, edge, and tick, whenever the The callback is called with the GPIO, edge, and tick, whenever the
gpio has the identified edge. GPIO has the identified edge.
.IP "\fBint callback_ex(int pi, unsigned user_gpio, unsigned edge, CBFuncEx_t f, void *userdata)\fP" .IP "\fBint callback_ex(int pi, unsigned user_gpio, unsigned edge, CBFuncEx_t f, void *userdata)\fP"
.IP "" 4 .IP "" 4
@ -4247,8 +4296,8 @@ pigif_duplicate_callback, or pigif_bad_callback.
.br .br
.br .br
The callback is called with the gpio, edge, tick, and user, whenever The callback is called with the GPIO, edge, tick, and user, whenever
the gpio has the identified edge. the GPIO has the identified edge.
.IP "\fBint callback_cancel(unsigned callback_id)\fP" .IP "\fBint callback_cancel(unsigned callback_id)\fP"
.IP "" 4 .IP "" 4
@ -4271,7 +4320,7 @@ The function returns 0 if OK, otherwise pigif_callback_not_found.
.IP "\fBint wait_for_edge(int pi, unsigned user_gpio, unsigned edge, double timeout)\fP" .IP "\fBint wait_for_edge(int pi, unsigned user_gpio, unsigned edge, double timeout)\fP"
.IP "" 4 .IP "" 4
This function waits for edge on the gpio for up to timeout This function waits for edge on the GPIO for up to timeout
seconds. seconds.
.br .br
@ -4383,7 +4432,7 @@ A value of 0 or 1.
.br .br
.IP "\fBbits\fP" 0 .IP "\fBbits\fP" 0
A value used to select gpios. If bit n of bits is set then gpio n is A value used to select GPIO. If bit n of bits is set then GPIO n is
selected. selected.
.br .br
@ -4523,7 +4572,7 @@ The number may vary between 0 and range (default 255) where
.br .br
.IP "\fBedge\fP" 0 .IP "\fBedge\fP" 0
Used to identify a gpio level transition of interest. A rising edge is Used to identify a GPIO level transition of interest. A rising edge is
a level change from 0 to 1. A falling edge is a level change from 1 to 0. a level change from 0 to 1. A falling edge is a level change from 1 to 0.
.br .br
@ -4560,9 +4609,9 @@ A function.
.br .br
.IP "\fBfrequency\fP: 0-" 0 .IP "\fBfrequency\fP: 0-" 0
The number of times a gpio is swiched on and off per second. This The number of times a GPIO is swiched on and off per second. This
can be set per gpio and may be as little as 5Hz or as much as can be set per GPIO and may be as little as 5Hz or as much as
40KHz. The gpio will be on for a proportion of the time as defined 40KHz. The GPIO will be on for a proportion of the time as defined
by its dutycycle. by its dutycycle.
.br .br
@ -4574,12 +4623,12 @@ by its dutycycle.
.br .br
.IP "\fBgpio\fP" 0 .IP "\fBgpio\fP" 0
A Broadcom numbered gpio, in the range 0-53. A Broadcom numbered GPIO, in the range 0-53.
.br .br
.br .br
There are 54 General Purpose Input Outputs (gpios) named gpio0 through There are 54 General Purpose Input Outputs (GPIO) named gpio0 through
gpio53. gpio53.
.br .br
@ -4591,9 +4640,9 @@ gpio31. Bank 2 consists of gpio32 through gpio53.
.br .br
.br .br
All the gpios which are safe for the user to read and write are in All the GPIO which are safe for the user to read and write are in
bank 1. Not all gpios in bank 1 are safe though. Type 1 boards bank 1. Not all GPIO in bank 1 are safe though. Type 1 boards
have 17 safe gpios. Type 2 boards have 21. Type 3 boards have 26. have 17 safe GPIO. Type 2 boards have 21. Type 3 boards have 26.
.br .br
@ -4603,7 +4652,7 @@ See \fBget_hardware_revision\fP.
.br .br
.br .br
The user gpios are marked with an X in the following table. The user GPIO are marked with an X in the following table.
.br .br
@ -4734,7 +4783,7 @@ A flag used to set normal or inverted bit bang serial data level logic.
.br .br
.IP "\fBlevel\fP" 0 .IP "\fBlevel\fP" 0
The level of a gpio. Low or High. The level of a GPIO. Low or High.
.br .br
@ -4763,7 +4812,7 @@ PI_HIGH 1
.br .br
.br .br
There is one exception. If a watchdog expires on a gpio the level will be There is one exception. If a watchdog expires on a GPIO the level will be
reported as PI_TIMEOUT. See \fBset_watchdog\fP. reported as PI_TIMEOUT. See \fBset_watchdog\fP.
.br .br
@ -4781,7 +4830,7 @@ PI_TIMEOUT 2
.br .br
.IP "\fBmode\fP" 0 .IP "\fBmode\fP" 0
1. The operational mode of a gpio, normally INPUT or OUTPUT. 1. The operational mode of a GPIO, normally INPUT or OUTPUT.
.br .br
@ -4921,7 +4970,7 @@ A thread identifier.
.br .br
.IP "\fBpud\fP: 0-2" 0 .IP "\fBpud\fP: 0-2" 0
The setting of the pull up/down resistor for a gpio, which may be off, The setting of the pull up/down resistor for a GPIO, which may be off,
pull-up, or pull-down. pull-up, or pull-down.
.EX .EX
@ -5045,7 +5094,7 @@ A pointer to a buffer to receive data.
.br .br
.IP "\fBSCL\fP" 0 .IP "\fBSCL\fP" 0
The user gpio to use for the clock when bit banging I2C. The user GPIO to use for the clock when bit banging I2C.
.br .br
@ -5066,7 +5115,7 @@ An id of a stored script as returned by \fBstore_script\fP.
.br .br
.IP "\fBSDA\fP" 0 .IP "\fBSDA\fP" 0
The user gpio to use for data when bit banging I2C. The user GPIO to use for data when bit banging I2C.
.br .br
@ -5163,7 +5212,7 @@ thread.
.br .br
.IP "\fBtimeout\fP" 0 .IP "\fBtimeout\fP" 0
A gpio watchdog timeout in milliseconds. A GPIO watchdog timeout in milliseconds.
.EX .EX
PI_MIN_WDOG_TIMEOUT 0 PI_MIN_WDOG_TIMEOUT 0
@ -5199,7 +5248,7 @@ A whole number >= 0.
.br .br
.IP "\fBuser_gpio\fP" 0 .IP "\fBuser_gpio\fP" 0
0-31, a Broadcom numbered gpio. 0-31, a Broadcom numbered GPIO.
.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/>
*/ */
/* PIGPIOD_IF2_VERSION 3 */ /* PIGPIOD_IF2_VERSION 5 */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -874,6 +874,9 @@ int wave_chain(int pi, char *buf, unsigned bufSize)
(pi, PI_CMD_WVCHA, 0, 0, bufSize, 1, ext, 1); (pi, PI_CMD_WVCHA, 0, 0, bufSize, 1, ext, 1);
} }
int wave_tx_at(int pi)
{return pigpio_command(pi, PI_CMD_WVTAT, 0, 0, 1);}
int wave_tx_busy(int pi) int wave_tx_busy(int pi)
{return pigpio_command(pi, PI_CMD_WVBSY, 0, 0, 1);} {return pigpio_command(pi, PI_CMD_WVBSY, 0, 0, 1);}

View File

@ -30,32 +30,32 @@ For more information, please refer to <http://unlicense.org/>
#include "pigpio.h" #include "pigpio.h"
#define PIGPIOD_IF2_VERSION 3 #define PIGPIOD_IF2_VERSION 5
/*TEXT /*TEXT
pigpiod_if2 is a C library for the Raspberry which allows control pigpiod_if2 is a C library for the Raspberry which allows control
of the gpios via the socket interface to the pigpio daemon. of the GPIO via the socket interface to the pigpio daemon.
*Features* *Features*
o PWM on any of gpios 0-31 o PWM on any of GPIO 0-31
o servo pulses on any of gpios 0-31 o servo pulses on any of GPIO 0-31
o callbacks when any of gpios 0-31 change state o callbacks when any of GPIO 0-31 change state
o callbacks at timed intervals o callbacks at timed intervals
o reading/writing all of the gpios in a bank as one operation o reading/writing all of the GPIO in a bank as one operation
o individually setting gpio modes, reading and writing o individually setting GPIO modes, reading and writing
o notifications when any of gpios 0-31 change state o notifications when any of GPIO 0-31 change state
o the construction of output waveforms with microsecond timing o the construction of output waveforms with microsecond timing
o rudimentary permission control over gpios o rudimentary permission control over GPIO
o a simple interface to start and stop new threads o a simple interface to start and stop new threads
@ -63,9 +63,9 @@ o I2C, SPI, and serial link wrappers
o creating and running scripts on the pigpio daemon o creating and running scripts on the pigpio daemon
*gpios* *GPIO*
ALL gpios are identified by their Broadcom number. ALL GPIO are identified by their Broadcom number.
*Notes* *Notes*
@ -106,68 +106,68 @@ pigpio_stop Disconnects from a pigpio daemon
BEGINNER BEGINNER
set_mode Set a gpio mode set_mode Set a GPIO mode
get_mode Get a gpio mode get_mode Get a GPIO mode
set_pull_up_down Set/clear gpio pull up/down resistor set_pull_up_down Set/clear GPIO pull up/down resistor
gpio_read Read a gpio gpio_read Read a GPIO
gpio_write Write a gpio gpio_write Write a GPIO
set_PWM_dutycycle Start/stop PWM pulses on a gpio set_PWM_dutycycle Start/stop PWM pulses on a GPIO
get_PWM_dutycycle Get the PWM dutycycle in use on a gpio get_PWM_dutycycle Get the PWM dutycycle in use on a GPIO
set_servo_pulsewidth Start/stop servo pulses on a gpio set_servo_pulsewidth Start/stop servo pulses on a GPIO
get_servo_pulsewidth Get the servo pulsewidth in use on a gpio get_servo_pulsewidth Get the servo pulsewidth in use on a GPIO
callback Create gpio level change callback callback Create GPIO level change callback
callback_ex Create gpio level change callback callback_ex Create GPIO level change callback
callback_cancel Cancel a callback callback_cancel Cancel a callback
wait_for_edge Wait for gpio level change wait_for_edge Wait for GPIO level change
INTERMEDIATE INTERMEDIATE
gpio_trigger Send a trigger pulse to a gpio. gpio_trigger Send a trigger pulse to a GPIO.
set_watchdog Set a watchdog on a gpio. set_watchdog Set a watchdog on a GPIO.
set_PWM_range Configure PWM range for a gpio set_PWM_range Configure PWM range for a GPIO
get_PWM_range Get configured PWM range for a gpio get_PWM_range Get configured PWM range for a GPIO
set_PWM_frequency Configure PWM frequency for a gpio set_PWM_frequency Configure PWM frequency for a GPIO
get_PWM_frequency Get configured PWM frequency for a gpio get_PWM_frequency Get configured PWM frequency for a GPIO
read_bank_1 Read all gpios in bank 1 read_bank_1 Read all GPIO in bank 1
read_bank_2 Read all gpios in bank 2 read_bank_2 Read all GPIO in bank 2
clear_bank_1 Clear selected gpios in bank 1 clear_bank_1 Clear selected GPIO in bank 1
clear_bank_2 Clear selected gpios in bank 2 clear_bank_2 Clear selected GPIO in bank 2
set_bank_1 Set selected gpios in bank 1 set_bank_1 Set selected GPIO in bank 1
set_bank_2 Set selected gpios in bank 2 set_bank_2 Set selected GPIO in bank 2
start_thread Start a new thread start_thread Start a new thread
stop_thread Stop a previously started thread stop_thread Stop a previously started thread
ADVANCED ADVANCED
get_PWM_real_range Get underlying PWM range for a gpio get_PWM_real_range Get underlying PWM range for a GPIO
notify_open Request a notification handle notify_open Request a notification handle
notify_begin Start notifications for selected gpios notify_begin Start notifications for selected GPIO
notify_pause Pause notifications notify_pause Pause notifications
notify_close Close a notification notify_close Close a notification
bb_serial_read_open Opens a gpio for bit bang serial reads bb_serial_read_open Opens a GPIO for bit bang serial reads
bb_serial_read Reads bit bang serial data from a gpio bb_serial_read Reads bit bang serial data from a GPIO
bb_serial_read_close Closes a gpio for bit bang serial reads bb_serial_read_close Closes a GPIO for bit bang serial reads
bb_serial_invert Invert serial logic (1 invert, 0 normal) bb_serial_invert Invert serial logic (1 invert, 0 normal)
hardware_clock Start hardware clock on supported gpios hardware_clock Start hardware clock on supported GPIO
hardware_PWM Start hardware PWM on supported gpios hardware_PWM Start hardware PWM on supported GPIO
set_glitch_filter Set a glitch filter on a gpio set_glitch_filter Set a glitch filter on a GPIO
set_noise_filter Set a noise filter on a gpio set_noise_filter Set a noise filter on a GPIO
SCRIPTS SCRIPTS
@ -194,6 +194,7 @@ wave_send_using_mode Transmits a waveform in the chosen mode
wave_chain Transmits a chain of waveforms wave_chain Transmits a chain of waveforms
wave_tx_at Returns the current transmitting waveform
wave_tx_busy Checks to see if the waveform has ended wave_tx_busy Checks to see if the waveform has ended
wave_tx_stop Aborts the current waveform wave_tx_stop Aborts the current waveform
@ -234,8 +235,8 @@ i2c_write_device Writes the raw I2C device
i2c_zip Performs multiple I2C transactions i2c_zip Performs multiple I2C transactions
bb_i2c_open Opens gpios for bit banging I2C bb_i2c_open Opens GPIO for bit banging I2C
bb_i2c_close Closes gpios for bit banging I2C bb_i2c_close Closes GPIO for bit banging I2C
bb_i2c_zip Performs multiple bit banged I2C transactions bb_i2c_zip Performs multiple bit banged I2C transactions
SPI SPI
@ -393,7 +394,7 @@ D*/
/*F*/ /*F*/
int set_mode(int pi, unsigned gpio, unsigned mode); int set_mode(int pi, unsigned gpio, unsigned mode);
/*D /*D
Set the gpio mode. Set the GPIO mode.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
@ -409,20 +410,20 @@ D*/
/*F*/ /*F*/
int get_mode(int pi, unsigned gpio); int get_mode(int pi, unsigned gpio);
/*D /*D
Get the gpio mode. Get the GPIO mode.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
gpio: 0-53. gpio: 0-53.
. . . .
Returns the gpio mode if OK, otherwise PI_BAD_GPIO. Returns the GPIO mode if OK, otherwise PI_BAD_GPIO.
D*/ D*/
/*F*/ /*F*/
int set_pull_up_down(int pi, unsigned gpio, unsigned pud); int set_pull_up_down(int pi, unsigned gpio, unsigned pud);
/*D /*D
Set or clear the gpio pull-up/down resistor. Set or clear the GPIO pull-up/down resistor.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
@ -437,20 +438,20 @@ D*/
/*F*/ /*F*/
int gpio_read(int pi, unsigned gpio); int gpio_read(int pi, unsigned gpio);
/*D /*D
Read the gpio level. Read the GPIO level.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
gpio:0-53. gpio:0-53.
. . . .
Returns the gpio level if OK, otherwise PI_BAD_GPIO. Returns the GPIO level if OK, otherwise PI_BAD_GPIO.
D*/ D*/
/*F*/ /*F*/
int gpio_write(int pi, unsigned gpio, unsigned level); int gpio_write(int pi, unsigned gpio, unsigned level);
/*D /*D
Write the gpio level. Write the GPIO level.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
@ -463,13 +464,13 @@ or PI_NOT_PERMITTED.
Notes Notes
If PWM or servo pulses are active on the gpio they are switched off. If PWM or servo pulses are active on the GPIO they are switched off.
D*/ D*/
/*F*/ /*F*/
int set_PWM_dutycycle(int pi, unsigned user_gpio, unsigned dutycycle); int set_PWM_dutycycle(int pi, unsigned user_gpio, unsigned dutycycle);
/*D /*D
Start (non-zero dutycycle) or stop (0) PWM pulses on the gpio. Start (non-zero dutycycle) or stop (0) PWM pulses on the GPIO.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
@ -488,7 +489,7 @@ D*/
/*F*/ /*F*/
int get_PWM_dutycycle(int pi, unsigned user_gpio); int get_PWM_dutycycle(int pi, unsigned user_gpio);
/*D /*D
Return the PWM dutycycle in use on a gpio. Return the PWM dutycycle in use on a GPIO.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
@ -498,19 +499,19 @@ user_gpio: 0-31.
Returns 0 if OK, otherwise PI_BAD_USER_GPIO or PI_NOT_PWM_GPIO. Returns 0 if OK, otherwise PI_BAD_USER_GPIO or PI_NOT_PWM_GPIO.
For normal PWM the dutycycle will be out of the defined range For normal PWM the dutycycle will be out of the defined range
for the gpio (see [*get_PWM_range*]). for the GPIO (see [*get_PWM_range*]).
If a hardware clock is active on the gpio the reported dutycycle If a hardware clock is active on the GPIO the reported dutycycle
will be 500000 (500k) out of 1000000 (1M). will be 500000 (500k) out of 1000000 (1M).
If hardware PWM is active on the gpio the reported dutycycle If hardware PWM is active on the GPIO the reported dutycycle
will be out of a 1000000 (1M). will be out of a 1000000 (1M).
D*/ D*/
/*F*/ /*F*/
int set_PWM_range(int pi, unsigned user_gpio, unsigned range); int set_PWM_range(int pi, unsigned user_gpio, unsigned range);
/*D /*D
Set the range of PWM values to be used on the gpio. Set the range of PWM values to be used on the GPIO.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
@ -523,11 +524,11 @@ or PI_NOT_PERMITTED.
Notes Notes
If PWM is currently active on the gpio its dutycycle will be If PWM is currently active on the GPIO its dutycycle will be
scaled to reflect the new range. scaled to reflect the new range.
The real range, the number of steps between fully off and fully on The real range, the number of steps between fully off and fully on
for each of the 18 available gpio frequencies is for each of the 18 available GPIO frequencies is
. . . .
25(#1), 50(#2), 100(#3), 125(#4), 200(#5), 250(#6), 25(#1), 50(#2), 100(#3), 125(#4), 200(#5), 250(#6),
@ -541,37 +542,37 @@ D*/
/*F*/ /*F*/
int get_PWM_range(int pi, unsigned user_gpio); int get_PWM_range(int pi, unsigned user_gpio);
/*D /*D
Get the range of PWM values being used on the gpio. Get the range of PWM values being used on the GPIO.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
user_gpio: 0-31. user_gpio: 0-31.
. . . .
Returns the dutycycle range used for the gpio if OK, Returns the dutycycle range used for the GPIO if OK,
otherwise PI_BAD_USER_GPIO. otherwise PI_BAD_USER_GPIO.
If a hardware clock or hardware PWM is active on the gpio the If a hardware clock or hardware PWM is active on the GPIO the
reported range will be 1000000 (1M). reported range will be 1000000 (1M).
D*/ D*/
/*F*/ /*F*/
int get_PWM_real_range(int pi, unsigned user_gpio); int get_PWM_real_range(int pi, unsigned user_gpio);
/*D /*D
Get the real underlying range of PWM values being used on the gpio. Get the real underlying range of PWM values being used on the GPIO.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
user_gpio: 0-31. user_gpio: 0-31.
. . . .
Returns the real range used for the gpio if OK, Returns the real range used for the GPIO if OK,
otherwise PI_BAD_USER_GPIO. otherwise PI_BAD_USER_GPIO.
If a hardware clock is active on the gpio the reported If a hardware clock is active on the GPIO the reported
real range will be 1000000 (1M). real range will be 1000000 (1M).
If hardware PWM is active on the gpio the reported real range If hardware PWM is active on the GPIO the reported real range
will be approximately 250M divided by the set PWM frequency. will be approximately 250M divided by the set PWM frequency.
D*/ D*/
@ -579,7 +580,7 @@ D*/
/*F*/ /*F*/
int set_PWM_frequency(int pi, unsigned user_gpio, unsigned frequency); int set_PWM_frequency(int pi, unsigned user_gpio, unsigned frequency);
/*D /*D
Set the frequency (in Hz) of the PWM to be used on the gpio. Set the frequency (in Hz) of the PWM to be used on the GPIO.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
@ -594,10 +595,10 @@ The selectable frequencies depend upon the sample rate which
may be 1, 2, 4, 5, 8, or 10 microseconds (default 5). The may be 1, 2, 4, 5, 8, or 10 microseconds (default 5). The
sample rate is set when the C pigpio library is started. sample rate is set when the C pigpio library is started.
Each gpio can be independently set to one of 18 different Each GPIO can be independently set to one of 18 different
PWM frequencies. PWM frequencies.
If PWM is currently active on the gpio it will be switched If PWM is currently active on the GPIO it will be switched
off and then back on at the new frequency. off and then back on at the new frequency.
. . . .
@ -624,30 +625,30 @@ D*/
/*F*/ /*F*/
int get_PWM_frequency(int pi, unsigned user_gpio); int get_PWM_frequency(int pi, unsigned user_gpio);
/*D /*D
Get the frequency of PWM being used on the gpio. Get the frequency of PWM being used on the GPIO.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
user_gpio: 0-31. user_gpio: 0-31.
. . . .
For normal PWM the frequency will be that defined for the gpio by For normal PWM the frequency will be that defined for the GPIO by
[*set_PWM_frequency*]. [*set_PWM_frequency*].
If a hardware clock is active on the gpio the reported frequency If a hardware clock is active on the GPIO the reported frequency
will be that set by [*hardware_clock*]. will be that set by [*hardware_clock*].
If hardware PWM is active on the gpio the reported frequency If hardware PWM is active on the GPIO the reported frequency
will be that set by [*hardware_PWM*]. will be that set by [*hardware_PWM*].
Returns the frequency (in hertz) used for the gpio if OK, Returns the frequency (in hertz) used for the GPIO if OK,
otherwise PI_BAD_USER_GPIO. otherwise PI_BAD_USER_GPIO.
D*/ D*/
/*F*/ /*F*/
int set_servo_pulsewidth(int pi, unsigned user_gpio, unsigned pulsewidth); int set_servo_pulsewidth(int pi, unsigned user_gpio, unsigned pulsewidth);
/*D /*D
Start (500-2500) or stop (0) servo pulses on the gpio. Start (500-2500) or stop (0) servo pulses on the GPIO.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
@ -683,7 +684,7 @@ Then set the PWM range using [*set_PWM_range*] to 1E6/Hz.
Doing this allows you to use units of microseconds when setting Doing this allows you to use units of microseconds when setting
the servo pulsewidth. the servo pulsewidth.
E.g. If you want to update a servo connected to gpio 25 at 400Hz E.g. If you want to update a servo connected to GPIO 25 at 400Hz
. . . .
set_PWM_frequency(25, 400); set_PWM_frequency(25, 400);
@ -697,7 +698,7 @@ D*/
/*F*/ /*F*/
int get_servo_pulsewidth(int pi, unsigned user_gpio); int get_servo_pulsewidth(int pi, unsigned user_gpio);
/*D /*D
Return the servo pulsewidth in use on a gpio. Return the servo pulsewidth in use on a GPIO.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
@ -719,7 +720,7 @@ pi: 0- (as returned by [*pigpio_start*]).
Returns a handle greater than or equal to zero if OK, Returns a handle greater than or equal to zero if OK,
otherwise PI_NO_HANDLE. otherwise PI_NO_HANDLE.
A notification is a method for being notified of gpio state A notification is a method for being notified of GPIO state
changes via a pipe. changes via a pipe.
Pipes are only accessible from the local machine so this function Pipes are only accessible from the local machine so this function
@ -741,12 +742,12 @@ Start notifications on a previously opened handle.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
handle: 0-31 (as returned by [*notify_open*]) handle: 0-31 (as returned by [*notify_open*])
bits: a mask indicating the gpios to be notified. bits: a mask indicating the GPIO to be notified.
. . . .
Returns 0 if OK, otherwise PI_BAD_HANDLE. Returns 0 if OK, otherwise PI_BAD_HANDLE.
The notification sends state changes for each gpio whose The notification sends state changes for each GPIO whose
corresponding bit in bits is set. corresponding bit in bits is set.
Notes Notes
@ -794,7 +795,7 @@ D*/
/*F*/ /*F*/
int set_watchdog(int pi, unsigned user_gpio, unsigned timeout); int set_watchdog(int pi, unsigned user_gpio, unsigned timeout);
/*D /*D
Sets a watchdog for a gpio. Sets a watchdog for a GPIO.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
@ -807,24 +808,24 @@ or PI_BAD_WDOG_TIMEOUT.
The watchdog is nominally in milliseconds. The watchdog is nominally in milliseconds.
Only one watchdog may be registered per gpio. Only one watchdog may be registered per GPIO.
The watchdog may be cancelled by setting timeout to 0. The watchdog may be cancelled by setting timeout to 0.
If no level change has been detected for the gpio for timeout If no level change has been detected for the GPIO for timeout
milliseconds any notification for the gpio has a report written milliseconds any notification for the GPIO has a report written
to the fifo with the flags set to indicate a watchdog timeout. to the fifo with the flags set to indicate a watchdog timeout.
The [*callback*] and [*callback_ex*] functions interpret the flags The [*callback*] and [*callback_ex*] functions interpret the flags
and will call registered callbacks for the gpio with level TIMEOUT. and will call registered callbacks for the GPIO with level TIMEOUT.
D*/ D*/
/*F*/ /*F*/
int set_glitch_filter(int pi, unsigned user_gpio, unsigned steady); int set_glitch_filter(int pi, unsigned user_gpio, unsigned steady);
/*D /*D
Sets a glitch filter on a gpio. Sets a glitch filter on a GPIO.
Level changes on the gpio are not reported unless the level Level changes on the GPIO are not reported unless the level
has been stable for at least [*steady*] microseconds. The has been stable for at least [*steady*] microseconds. The
level is then reported. Level changes of less than level is then reported. Level changes of less than
[*steady*] microseconds are ignored. [*steady*] microseconds are ignored.
@ -845,11 +846,11 @@ D*/
int set_noise_filter( int set_noise_filter(
int pi, unsigned user_gpio, unsigned steady, unsigned active); int pi, unsigned user_gpio, unsigned steady, unsigned active);
/*D /*D
Sets a noise filter on a gpio. Sets a noise filter on a GPIO.
Level changes on the gpio are ignored until a level which has Level changes on the GPIO are ignored until a level which has
been stable for [*steady*] microseconds is detected. Level changes been stable for [*steady*] microseconds is detected. Level changes
on the gpio are then reported for [*active*] microseconds after on the GPIO are then reported for [*active*] microseconds after
which the process repeats. which the process repeats.
. . . .
@ -869,102 +870,102 @@ D*/
/*F*/ /*F*/
uint32_t read_bank_1(int pi); uint32_t read_bank_1(int pi);
/*D /*D
Read the levels of the bank 1 gpios (gpios 0-31). Read the levels of the bank 1 GPIO (GPIO 0-31).
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
. . . .
The returned 32 bit integer has a bit set if the corresponding The returned 32 bit integer has a bit set if the corresponding
gpio is logic 1. Gpio n has bit value (1<<n). GPIO is logic 1. GPIO n has bit value (1<<n).
D*/ D*/
/*F*/ /*F*/
uint32_t read_bank_2(int pi); uint32_t read_bank_2(int pi);
/*D /*D
Read the levels of the bank 2 gpios (gpios 32-53). Read the levels of the bank 2 GPIO (GPIO 32-53).
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
. . . .
The returned 32 bit integer has a bit set if the corresponding The returned 32 bit integer has a bit set if the corresponding
gpio is logic 1. Gpio n has bit value (1<<(n-32)). GPIO is logic 1. GPIO n has bit value (1<<(n-32)).
D*/ D*/
/*F*/ /*F*/
int clear_bank_1(int pi, uint32_t bits); int clear_bank_1(int pi, uint32_t bits);
/*D /*D
Clears gpios 0-31 if the corresponding bit in bits is set. Clears GPIO 0-31 if the corresponding bit in bits is set.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
bits: a bit mask with 1 set if the corresponding gpio is bits: a bit mask with 1 set if the corresponding GPIO is
to be cleared. to be cleared.
. . . .
Returns 0 if OK, otherwise PI_SOME_PERMITTED. Returns 0 if OK, otherwise PI_SOME_PERMITTED.
A status of PI_SOME_PERMITTED indicates that the user is not A status of PI_SOME_PERMITTED indicates that the user is not
allowed to write to one or more of the gpios. allowed to write to one or more of the GPIO.
D*/ D*/
/*F*/ /*F*/
int clear_bank_2(int pi, uint32_t bits); int clear_bank_2(int pi, uint32_t bits);
/*D /*D
Clears gpios 32-53 if the corresponding bit (0-21) in bits is set. Clears GPIO 32-53 if the corresponding bit (0-21) in bits is set.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
bits: a bit mask with 1 set if the corresponding gpio is bits: a bit mask with 1 set if the corresponding GPIO is
to be cleared. to be cleared.
. . . .
Returns 0 if OK, otherwise PI_SOME_PERMITTED. Returns 0 if OK, otherwise PI_SOME_PERMITTED.
A status of PI_SOME_PERMITTED indicates that the user is not A status of PI_SOME_PERMITTED indicates that the user is not
allowed to write to one or more of the gpios. allowed to write to one or more of the GPIO.
D*/ D*/
/*F*/ /*F*/
int set_bank_1(int pi, uint32_t bits); int set_bank_1(int pi, uint32_t bits);
/*D /*D
Sets gpios 0-31 if the corresponding bit in bits is set. Sets GPIO 0-31 if the corresponding bit in bits is set.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
bits: a bit mask with 1 set if the corresponding gpio is bits: a bit mask with 1 set if the corresponding GPIO is
to be set. to be set.
. . . .
Returns 0 if OK, otherwise PI_SOME_PERMITTED. Returns 0 if OK, otherwise PI_SOME_PERMITTED.
A status of PI_SOME_PERMITTED indicates that the user is not A status of PI_SOME_PERMITTED indicates that the user is not
allowed to write to one or more of the gpios. allowed to write to one or more of the GPIO.
D*/ D*/
/*F*/ /*F*/
int set_bank_2(int pi, uint32_t bits); int set_bank_2(int pi, uint32_t bits);
/*D /*D
Sets gpios 32-53 if the corresponding bit (0-21) in bits is set. Sets GPIO 32-53 if the corresponding bit (0-21) in bits is set.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
bits: a bit mask with 1 set if the corresponding gpio is bits: a bit mask with 1 set if the corresponding GPIO is
to be set. to be set.
. . . .
Returns 0 if OK, otherwise PI_SOME_PERMITTED. Returns 0 if OK, otherwise PI_SOME_PERMITTED.
A status of PI_SOME_PERMITTED indicates that the user is not A status of PI_SOME_PERMITTED indicates that the user is not
allowed to write to one or more of the gpios. allowed to write to one or more of the GPIO.
D*/ D*/
/*F*/ /*F*/
int hardware_clock(int pi, unsigned gpio, unsigned clkfreq); int hardware_clock(int pi, unsigned gpio, unsigned clkfreq);
/*D /*D
Starts a hardware clock on a gpio at the specified frequency. Starts a hardware clock on a GPIO at the specified frequency.
Frequencies above 30MHz are unlikely to work. Frequencies above 30MHz are unlikely to work.
. . . .
@ -976,17 +977,17 @@ frequency: 0 (off) or 4689-250000000 (250M)
Returns 0 if OK, otherwise PI_NOT_PERMITTED, PI_BAD_GPIO, Returns 0 if OK, otherwise PI_NOT_PERMITTED, PI_BAD_GPIO,
PI_NOT_HCLK_GPIO, PI_BAD_HCLK_FREQ,or PI_BAD_HCLK_PASS. PI_NOT_HCLK_GPIO, PI_BAD_HCLK_FREQ,or PI_BAD_HCLK_PASS.
The same clock is available on multiple gpios. The latest The same clock is available on multiple GPIO. The latest
frequency setting will be used by all gpios which share a clock. frequency setting will be used by all GPIO which share a clock.
The gpio must be one of the following. The GPIO must be one of the following.
. . . .
4 clock 0 All models 4 clock 0 All models
5 clock 1 A+/B+/Pi2/Zero and compute module only (reserved for system use) 5 clock 1 All models but A and B (reserved for system use)
6 clock 2 A+/B+/Pi2/Zero and compute module only 6 clock 2 All models but A and B
20 clock 0 A+/B+/Pi2/Zero and compute module only 20 clock 0 All models but A and B
21 clock 1 All models but Rev.2 B (reserved for system use) 21 clock 1 All models but A and Rev.2 B (reserved for system use)
32 clock 0 Compute module only 32 clock 0 Compute module only
34 clock 0 Compute module only 34 clock 0 Compute module only
@ -997,14 +998,14 @@ The gpio must be one of the following.
Access to clock 1 is protected by a password as its use will likely Access to clock 1 is protected by a password as its use will likely
crash the Pi. The password is given by or'ing 0x5A000000 with the crash the Pi. The password is given by or'ing 0x5A000000 with the
gpio number. GPIO number.
D*/ D*/
/*F*/ /*F*/
int hardware_PWM(int pi, unsigned gpio, unsigned PWMfreq, uint32_t PWMduty); int hardware_PWM(int pi, unsigned gpio, unsigned PWMfreq, uint32_t PWMduty);
/*D /*D
Starts hardware PWM on a gpio at the specified frequency and dutycycle. Starts hardware PWM on a GPIO at the specified frequency and dutycycle.
Frequencies above 30MHz are unlikely to work. Frequencies above 30MHz are unlikely to work.
NOTE: Any waveform started by [*wave_send_**] or [*wave_chain*] NOTE: Any waveform started by [*wave_send_**] or [*wave_chain*]
@ -1025,17 +1026,17 @@ Returns 0 if OK, otherwise PI_NOT_PERMITTED, PI_BAD_GPIO,
PI_NOT_HPWM_GPIO, PI_BAD_HPWM_DUTY, PI_BAD_HPWM_FREQ, PI_NOT_HPWM_GPIO, PI_BAD_HPWM_DUTY, PI_BAD_HPWM_FREQ,
or PI_HPWM_ILLEGAL. or PI_HPWM_ILLEGAL.
The same PWM channel is available on multiple gpios. The latest The same PWM channel is available on multiple GPIO. The latest
frequency and dutycycle setting will be used by all gpios which frequency and dutycycle setting will be used by all GPIO which
share a PWM channel. share a PWM channel.
The gpio must be one of the following. The GPIO must be one of the following.
. . . .
12 PWM channel 0 A+/B+/Pi2/Zero and compute module only 12 PWM channel 0 All models but A and B
13 PWM channel 1 A+/B+/Pi2/Zero and compute module only 13 PWM channel 1 All models but A and B
18 PWM channel 0 All models 18 PWM channel 0 All models
19 PWM channel 1 A+/B+/Pi2/Zero and compute module only 19 PWM channel 1 All models but A and B
40 PWM channel 0 Compute module only 40 PWM channel 0 Compute module only
41 PWM channel 1 Compute module only 41 PWM channel 1 Compute module only
@ -1087,7 +1088,7 @@ of /proc/cpuinfo.
If the hardware revision can not be found or is not a valid If the hardware revision can not be found or is not a valid
hexadecimal number the function returns 0. hexadecimal number the function returns 0.
The revision number can be used to determine the assignment of gpios The revision number can be used to determine the assignment of GPIO
to pins (see [*gpio*]). to pins (see [*gpio*]).
There are at least three types of board. There are at least three types of board.
@ -1155,7 +1156,7 @@ The pulses are interleaved in time order within the existing waveform
(if any). (if any).
Merging allows the waveform to be built in parts, that is the settings Merging allows the waveform to be built in parts, that is the settings
for gpio#1 can be added, and then gpio#2 etc. for GPIO#1 can be added, and then GPIO#2 etc.
If the added waveform is intended to start after or within the existing If the added waveform is intended to start after or within the existing
waveform then the first pulse should consist solely of a delay. waveform then the first pulse should consist solely of a delay.
@ -1247,8 +1248,8 @@ typedef struct
The fields specify The fields specify
1) the gpios to be switched on at the start of the pulse. 1) the GPIO to be switched on at the start of the pulse.
2) the gpios to be switched off at the start of the pulse. 2) the GPIO to be switched off at the start of the pulse.
3) the delay in microseconds before the next pulse. 3) the delay in microseconds before the next pulse.
Any or all the fields can be zero. It doesn't make any sense to Any or all the fields can be zero. It doesn't make any sense to
@ -1442,6 +1443,22 @@ int main(int argc, char *argv[])
D*/ D*/
/*F*/
int wave_tx_at(int pi);
/*D
This function returns the id of the waveform currently being
transmitted.
. .
pi: 0- (as returned by [*pigpio_start*]).
. .
Returns the waveform id or one of the following special values:
PI_WAVE_NOT_FOUND (9998) - transmitted wave not found.
PI_NO_TX_WAVE (9999) - no wave being transmitted.
D*/
/*F*/ /*F*/
int wave_tx_busy(int pi); int wave_tx_busy(int pi);
/*D /*D
@ -1569,7 +1586,7 @@ D*/
/*F*/ /*F*/
int gpio_trigger(int pi, unsigned user_gpio, unsigned pulseLen, unsigned level); int gpio_trigger(int pi, unsigned user_gpio, unsigned pulseLen, unsigned level);
/*D /*D
This function sends a trigger pulse to a gpio. The gpio is set to This function sends a trigger pulse to a GPIO. The GPIO is set to
level for pulseLen microseconds and then reset to not level. level for pulseLen microseconds and then reset to not level.
. . . .
@ -1673,7 +1690,7 @@ D*/
/*F*/ /*F*/
int bb_serial_read_open(int pi, unsigned user_gpio, unsigned baud, unsigned data_bits); int bb_serial_read_open(int pi, unsigned user_gpio, unsigned baud, unsigned data_bits);
/*D /*D
This function opens a gpio for bit bang reading of serial data. This function opens a GPIO for bit bang reading of serial data.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
@ -1719,7 +1736,7 @@ D*/
/*F*/ /*F*/
int bb_serial_read_close(int pi, unsigned user_gpio); int bb_serial_read_close(int pi, unsigned user_gpio);
/*D /*D
This function closes a gpio for bit bang reading of serial data. This function closes a GPIO for bit bang reading of serial data.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
@ -2197,7 +2214,7 @@ D*/
/*F*/ /*F*/
int bb_i2c_open(int pi, unsigned SDA, unsigned SCL, unsigned baud); int bb_i2c_open(int pi, unsigned SDA, unsigned SCL, unsigned baud);
/*D /*D
This function selects a pair of gpios for bit banging I2C at a This function selects a pair of GPIO for bit banging I2C at a
specified baud rate. specified baud rate.
Bit banging I2C allows for certain operations which are not possible Bit banging I2C allows for certain operations which are not possible
@ -2206,7 +2223,7 @@ with the standard I2C driver.
o baud rates as low as 50 o baud rates as low as 50
o repeated starts o repeated starts
o clock stretching o clock stretching
o I2C on any pair of spare gpios o I2C on any pair of spare GPIO
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
@ -2220,19 +2237,19 @@ PI_GPIO_IN_USE.
NOTE: NOTE:
The gpios used for SDA and SCL must have pull-ups to 3V3 connected. As The GPIO used for SDA and SCL must have pull-ups to 3V3 connected. As
a guide the hardware pull-ups on pins 3 and 5 are 1k8 in value. a guide the hardware pull-ups on pins 3 and 5 are 1k8 in value.
D*/ D*/
/*F*/ /*F*/
int bb_i2c_close(int pi, unsigned SDA); int bb_i2c_close(int pi, unsigned SDA);
/*D /*D
This function stops bit banging I2C on a pair of gpios previously This function stops bit banging I2C on a pair of GPIO previously
opened with [*bb_i2c_open*]. opened with [*bb_i2c_open*].
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
SDA: 0-31, the SDA gpio used in a prior call to [*bb_i2c_open*] SDA: 0-31, the SDA GPIO used in a prior call to [*bb_i2c_open*]
. . . .
Returns 0 if OK, otherwise PI_BAD_USER_GPIO, or PI_NOT_I2C_GPIO. Returns 0 if OK, otherwise PI_BAD_USER_GPIO, or PI_NOT_I2C_GPIO.
@ -2319,13 +2336,14 @@ Data will be transferred at baud bits per second. The flags may
be used to modify the default behaviour of 4-wire operation, mode 0, be used to modify the default behaviour of 4-wire operation, mode 0,
active low chip select. active low chip select.
An auxiliary SPI device is available on the A+/B+/Pi2/Zero and may be An auxiliary SPI device is available on all models but the
selected by setting the A bit in the flags. The auxiliary A and B and may be selected by setting the A bit in the
device has 3 chip selects and a selectable word size in bits. flags. The auxiliary device has 3 chip selects and a
selectable word size in bits.
. . . .
pi: 0- (as returned by [*pigpio_start*]). pi: 0- (as returned by [*pigpio_start*]).
spi_channel: 0-1 (0-2 for A+/B+/Pi2/Zero auxiliary device). spi_channel: 0-1 (0-2 for the auxiliary device).
baud: 32K-125M (values above 30M are unlikely to work). baud: 32K-125M (values above 30M are unlikely to work).
spi_flags: see below. spi_flags: see below.
. . . .
@ -2354,10 +2372,9 @@ Mode POL PHA
px is 0 if CEx is active low (default) and 1 for active high. px is 0 if CEx is active low (default) and 1 for active high.
ux is 0 if the CEx gpio is reserved for SPI (default) and 1 otherwise. ux is 0 if the CEx GPIO is reserved for SPI (default) and 1 otherwise.
A is 0 for the standard SPI device, 1 for the auxiliary SPI. The A is 0 for the standard SPI device, 1 for the auxiliary SPI.
auxiliary device is only present on the A+/B+/Pi2/Zero.
W is 0 if the device is not 3-wire, 1 if the device is 3-wire. Standard W is 0 if the device is not 3-wire, 1 if the device is 3-wire. Standard
SPI device only. SPI device only.
@ -2377,6 +2394,17 @@ device only.
bbbbbb defines the word size in bits (0-32). The default (0) bbbbbb defines the word size in bits (0-32). The default (0)
sets 8 bits per word. Auxiliary SPI device only. sets 8 bits per word. Auxiliary SPI device only.
The [*spi_read*], [*spi_write*], and [*spi_xfer*] functions
transfer data packed into 1, 2, or 4 bytes according to
the word size in bits.
For bits 1-8 there will be one byte per character.
For bits 9-16 there will be two bytes per character.
For bits 17-32 there will be four bytes per character.
E.g. to transfer 32 12-bit words buf should contain 64 bytes
and count should be 64.
The other bits in flags should be set to zero. The other bits in flags should be set to zero.
D*/ D*/
@ -2619,8 +2647,8 @@ user_gpio: 0-31.
The function returns a callback id if OK, otherwise pigif_bad_malloc, The function returns a callback id if OK, otherwise pigif_bad_malloc,
pigif_duplicate_callback, or pigif_bad_callback. pigif_duplicate_callback, or pigif_bad_callback.
The callback is called with the gpio, edge, and tick, whenever the The callback is called with the GPIO, edge, and tick, whenever the
gpio has the identified edge. GPIO has the identified edge.
D*/ D*/
/*F*/ /*F*/
@ -2640,8 +2668,8 @@ user_gpio: 0-31.
The function returns a callback id if OK, otherwise pigif_bad_malloc, The function returns a callback id if OK, otherwise pigif_bad_malloc,
pigif_duplicate_callback, or pigif_bad_callback. pigif_duplicate_callback, or pigif_bad_callback.
The callback is called with the gpio, edge, tick, and user, whenever The callback is called with the GPIO, edge, tick, and user, whenever
the gpio has the identified edge. the GPIO has the identified edge.
D*/ D*/
/*F*/ /*F*/
@ -2659,7 +2687,7 @@ D*/
/*F*/ /*F*/
int wait_for_edge(int pi, unsigned user_gpio, unsigned edge, double timeout); int wait_for_edge(int pi, unsigned user_gpio, unsigned edge, double timeout);
/*D /*D
This function waits for edge on the gpio for up to timeout This function waits for edge on the GPIO for up to timeout
seconds. seconds.
. . . .
@ -2716,7 +2744,7 @@ bit::
A value of 0 or 1. A value of 0 or 1.
bits:: bits::
A value used to select gpios. If bit n of bits is set then gpio n is A value used to select GPIO. If bit n of bits is set then GPIO n is
selected. selected.
A convenient way to set bit n is to or in (1<<n). A convenient way to set bit n is to or in (1<<n).
@ -2777,7 +2805,7 @@ The number may vary between 0 and range (default 255) where
0 is off and range is fully on. 0 is off and range is fully on.
edge:: edge::
Used to identify a gpio level transition of interest. A rising edge is Used to identify a GPIO level transition of interest. A rising edge is
a level change from 0 to 1. A falling edge is a level change from 1 to 0. a level change from 0 to 1. A falling edge is a level change from 1 to 0.
. . . .
@ -2794,28 +2822,28 @@ f::
A function. A function.
frequency::0- frequency::0-
The number of times a gpio is swiched on and off per second. This The number of times a GPIO is swiched on and off per second. This
can be set per gpio and may be as little as 5Hz or as much as can be set per GPIO and may be as little as 5Hz or as much as
40KHz. The gpio will be on for a proportion of the time as defined 40KHz. The GPIO will be on for a proportion of the time as defined
by its dutycycle. by its dutycycle.
gpio:: gpio::
A Broadcom numbered gpio, in the range 0-53. A Broadcom numbered GPIO, in the range 0-53.
There are 54 General Purpose Input Outputs (gpios) named gpio0 through There are 54 General Purpose Input Outputs (GPIO) named gpio0 through
gpio53. gpio53.
They are split into two banks. Bank 1 consists of gpio0 through They are split into two banks. Bank 1 consists of gpio0 through
gpio31. Bank 2 consists of gpio32 through gpio53. gpio31. Bank 2 consists of gpio32 through gpio53.
All the gpios which are safe for the user to read and write are in All the GPIO which are safe for the user to read and write are in
bank 1. Not all gpios in bank 1 are safe though. Type 1 boards bank 1. Not all GPIO in bank 1 are safe though. Type 1 boards
have 17 safe gpios. Type 2 boards have 21. Type 3 boards have 26. have 17 safe GPIO. Type 2 boards have 21. Type 3 boards have 26.
See [*get_hardware_revision*]. See [*get_hardware_revision*].
The user gpios are marked with an X in the following table. The user GPIO are marked with an X in the following table.
. . . .
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@ -2873,7 +2901,7 @@ invert::
A flag used to set normal or inverted bit bang serial data level logic. A flag used to set normal or inverted bit bang serial data level logic.
level:: level::
The level of a gpio. Low or High. The level of a GPIO. Low or High.
. . . .
PI_OFF 0 PI_OFF 0
@ -2886,7 +2914,7 @@ PI_LOW 0
PI_HIGH 1 PI_HIGH 1
. . . .
There is one exception. If a watchdog expires on a gpio the level will be There is one exception. If a watchdog expires on a GPIO the level will be
reported as PI_TIMEOUT. See [*set_watchdog*]. reported as PI_TIMEOUT. See [*set_watchdog*].
. . . .
@ -2894,7 +2922,7 @@ PI_TIMEOUT 2
. . . .
mode:: mode::
1. The operational mode of a gpio, normally INPUT or OUTPUT. 1. The operational mode of a GPIO, normally INPUT or OUTPUT.
. . . .
PI_INPUT 0 PI_INPUT 0
@ -2958,7 +2986,7 @@ pthread_t::
A thread identifier. A thread identifier.
pud::0-2 pud::0-2
The setting of the pull up/down resistor for a gpio, which may be off, The setting of the pull up/down resistor for a GPIO, which may be off,
pull-up, or pull-down. pull-up, or pull-down.
. . . .
PI_PUD_OFF 0 PI_PUD_OFF 0
@ -3012,7 +3040,7 @@ The maximum number of bytes a user customised function should return.
A pointer to a buffer to receive data. A pointer to a buffer to receive data.
SCL:: SCL::
The user gpio to use for the clock when bit banging I2C. The user GPIO to use for the clock when bit banging I2C.
*script:: *script::
A pointer to the text of a script. A pointer to the text of a script.
@ -3021,7 +3049,7 @@ script_id::
An id of a stored script as returned by [*store_script*]. An id of a stored script as returned by [*store_script*].
SDA:: SDA::
The user gpio to use for data when bit banging I2C. The user GPIO to use for data when bit banging I2C.
seconds:: seconds::
The number of seconds. The number of seconds.
@ -3064,7 +3092,7 @@ A function of type gpioThreadFunc_t used as the main function of a
thread. thread.
timeout:: timeout::
A gpio watchdog timeout in milliseconds. A GPIO watchdog timeout in milliseconds.
. . . .
PI_MIN_WDOG_TIMEOUT 0 PI_MIN_WDOG_TIMEOUT 0
PI_MAX_WDOG_TIMEOUT 60000 PI_MAX_WDOG_TIMEOUT 60000
@ -3080,7 +3108,7 @@ unsigned::
A whole number >= 0. A whole number >= 0.
user_gpio:: user_gpio::
0-31, a Broadcom numbered gpio. 0-31, a Broadcom numbered GPIO.
See [*gpio*]. See [*gpio*].

411
pigs.1

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@
from distutils.core import setup from distutils.core import setup
setup(name='pigpio', setup(name='pigpio',
version='1.27', version='1.29',
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

@ -49,7 +49,7 @@ s=$(pigs bs2 0)
if [[ $s = "" ]]; then echo "BS2 ok"; else echo "BS2 fail ($s)"; fi if [[ $s = "" ]]; then echo "BS2 ok"; else echo "BS2 fail ($s)"; fi
s=$(pigs h) s=$(pigs h)
if [[ ${#s} = 4544 ]]; then echo "HELP ok"; else echo "HELP fail (${#s})"; fi if [[ ${#s} = 4593 ]]; then echo "HELP ok"; else echo "HELP fail (${#s})"; fi
s=$(pigs hwver) s=$(pigs hwver)
if [[ $s -ne 0 ]]; then echo "HWVER ok"; else echo "HWVER fail ($s)"; fi if [[ $s -ne 0 ]]; then echo "HWVER ok"; else echo "HWVER fail ($s)"; fi

4
x_pipe
View File

@ -57,7 +57,7 @@ if [[ $s = 0 ]]; then echo "BS2 ok"; else echo "BS2 fail ($s)"; fi
echo "h" >/dev/pigpio echo "h" >/dev/pigpio
read -t 1 s </dev/pigout read -t 1 s </dev/pigout
read -t 1 s </dev/pigout read -t 1 s </dev/pigout
if [[ $s = "BC1 bits Clear gpios in bank 1" ]] if [[ $s = "BC1 bits Clear GPIO in bank 1" ]]
then echo "HELP-a ok" then echo "HELP-a ok"
else echo "HELP-a fail ($s)" else echo "HELP-a fail ($s)"
fi fi
@ -65,7 +65,7 @@ read -t 1 -N 9000 </dev/pigout # dump rest of help
echo "help" >/dev/pigpio echo "help" >/dev/pigpio
read -t 1 s </dev/pigout read -t 1 s </dev/pigout
read -t 1 s </dev/pigout read -t 1 s </dev/pigout
if [[ $s = "BC1 bits Clear gpios in bank 1" ]] if [[ $s = "BC1 bits Clear GPIO in bank 1" ]]
then echo "HELP-b ok" then echo "HELP-b ok"
else echo "HELP-b fail ($s)" else echo "HELP-b fail ($s)"
fi fi