mirror of https://github.com/joan2937/pigpio
1169 lines
128 KiB
HTML
1169 lines
128 KiB
HTML
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
<head>
|
|
<meta name="description" content="Raspberry Pi Reg. C GPIO library and Python GPIO module and shell command utilities to control the GPIO, including SPI, I2C, and serial links." />
|
|
<meta name="keywords" content="raspberry, pi, C, Python, GPIO, library, shell, command, utilities, module, SPI, I2C, serial" />
|
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
|
<title>pigpio library</title>
|
|
<link rel="stylesheet" type="text/css" href="scripts/index.css">
|
|
<link rel="icon" href="favicon.ico" type="image/x-icon">
|
|
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
|
|
</head>
|
|
<body>
|
|
|
|
<table style="padding:0px; border:0px; margin:0px; width:780px; background-color:#e0e0e0;">
|
|
<td style="background:#EAF2E6 url('images/sidebar.gif') repeat-y; width:35px; height:100%"></td>
|
|
<td>
|
|
<table>
|
|
<div style="background:url('images/topbar.gif') repeat-x; height: 70px; font-size:1.5em; vertical-align: top;"><a href="index.html"><img src="images/pigpio-logo.gif" border="0" /></a>pigpio library</div>
|
|
</table>
|
|
<table><div>
|
|
<td><img src="images/pot.jpg" width="250"></td>
|
|
<td><img src="images/rotary.jpg" width="250"></td>
|
|
<td><img src="images/psu.jpg" width="250"></td>
|
|
</div></table>
|
|
<table>
|
|
<td style="vertical-align: top; background-color: #98bf21;"><a class="l1" href="index.html">pigpio</a>
|
|
<a class="l1" href="cif.html">pigpio C I/F</a>
|
|
<a class="l1" href="pigpiod.html">pigpiod</a>
|
|
<a class="l1" href="pdif2.html">pigpiod C I/F</a>
|
|
<a class="l1" href="python.html">Python</a>
|
|
<a class="l1" href="pigs.html">pigs</a>
|
|
<a class="l1" href="piscope.html">piscope</a>
|
|
<a class="l1" href="misc.html">Misc</a>
|
|
<a class="l1" href="examples.html">Examples</a>
|
|
<a class="l1" href="download.html">Download</a>
|
|
<a class="l1" href="faq.html">FAQ</a>
|
|
<a class="l1" href="sitemap.html">Site Map</a>
|
|
</td>
|
|
<td><center><h2>pigpiod_if</h2></center><br><br>THIS LIBRARY IS DEPRECATED. NEW CODE SHOULD BE WRITTEN TO
|
|
USE THE MORE VERSATILE pigpiod_if2 LIBRARY.
|
|
<br><br>pigpiod_if is a C library for the Raspberry which allows control
|
|
of the GPIO via the socket interface to the pigpio daemon.<br>
|
|
<h3>Features</h3>o hardware timed PWM on any of GPIO 0-31
|
|
<br><br>o hardware timed servo pulses on any of GPIO 0-31
|
|
<br><br>o callbacks when any of GPIO 0-31 change state
|
|
<br><br>o callbacks at timed intervals
|
|
<br><br>o reading/writing all of the GPIO in a bank as one operation
|
|
<br><br>o individually setting GPIO modes, reading and writing
|
|
<br><br>o notifications when any of GPIO 0-31 change state
|
|
<br><br>o the construction of output waveforms with microsecond timing
|
|
<br><br>o rudimentary permission control over GPIO
|
|
<br><br>o a simple interface to start and stop new threads
|
|
<br><br>o I2C, SPI, and serial link wrappers
|
|
<br><br>o creating and running scripts on the pigpio daemon
|
|
<h3>GPIO</h3>ALL GPIO are identified by their Broadcom number.
|
|
<h3>Notes</h3>The PWM and servo pulses are timed using the DMA and PWM/PCM peripherals.
|
|
<h3>Usage</h3>Include <pigpiod_if.h> in your source files.
|
|
<br><br>Assuming your source is in prog.c use the following command to build
|
|
<br><br><code>gcc -Wall -pthread -o prog prog.c -lpigpiod_if -lrt<br></code><br><br>to run make sure the pigpio daemon is running
|
|
<br><br><code>sudo pigpiod<br><br> ./prog # sudo is not required to run programs linked to pigpiod_if<br></code><br><br>For examples see x_pigpiod_if.c within the pigpio archive file.
|
|
<h3>Notes</h3>All the functions which return an int return < 0 on error
|
|
<h2>OVERVIEW</h2><table border="0" cellpadding="2" cellspacing="2"><tbody><tr><td></td><td></td></tr><tr><td><b>ESSENTIAL
|
|
</b></td><td></td></tr><tr><td></td><td></td></tr><tr><td><a href="#pigpio_start">pigpio_start</a></td><td> Connects to the pigpio daemon
|
|
</td></tr><tr><td><a href="#pigpio_stop">pigpio_stop</a></td><td> Disconnects from the pigpio daemon
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><b>BEGINNER
|
|
</b></td><td></td></tr><tr><td></td><td></td></tr><tr><td><a href="#set_mode">set_mode</a></td><td> Set a GPIO mode
|
|
</td></tr><tr><td><a href="#get_mode">get_mode</a></td><td> Get a GPIO mode
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#set_pull_up_down">set_pull_up_down</a></td><td> Set/clear GPIO pull up/down resistor
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#gpio_read">gpio_read</a></td><td> Read a GPIO
|
|
</td></tr><tr><td><a href="#gpio_write">gpio_write</a></td><td> Write a GPIO
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#set_PWM_dutycycle">set_PWM_dutycycle</a></td><td> Start/stop PWM pulses on a GPIO
|
|
</td></tr><tr><td><a href="#get_PWM_dutycycle">get_PWM_dutycycle</a></td><td> Get the PWM dutycycle in use on a GPIO
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#set_servo_pulsewidth">set_servo_pulsewidth</a></td><td> Start/stop servo pulses on a GPIO
|
|
</td></tr><tr><td><a href="#get_servo_pulsewidth">get_servo_pulsewidth</a></td><td> Get the servo pulsewidth in use on a GPIO
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#callback">callback</a></td><td> Create GPIO level change callback
|
|
</td></tr><tr><td><a href="#callback_ex">callback_ex</a></td><td> Create GPIO level change callback
|
|
</td></tr><tr><td><a href="#callback_cancel">callback_cancel</a></td><td> Cancel a callback
|
|
</td></tr><tr><td><a href="#wait_for_edge">wait_for_edge</a></td><td> Wait for GPIO level change
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><b>INTERMEDIATE
|
|
</b></td><td></td></tr><tr><td></td><td></td></tr><tr><td><a href="#gpio_trigger">gpio_trigger</a></td><td> Send a trigger pulse to a GPIO.
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#set_watchdog">set_watchdog</a></td><td> Set a watchdog on a GPIO.
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#set_PWM_range">set_PWM_range</a></td><td> Configure PWM range for a GPIO
|
|
</td></tr><tr><td><a href="#get_PWM_range">get_PWM_range</a></td><td> Get configured PWM range for a GPIO
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#set_PWM_frequency">set_PWM_frequency</a></td><td> Configure PWM frequency for a GPIO
|
|
</td></tr><tr><td><a href="#get_PWM_frequency">get_PWM_frequency</a></td><td> Get configured PWM frequency for a GPIO
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#read_bank_1">read_bank_1</a></td><td> Read all GPIO in bank 1
|
|
</td></tr><tr><td><a href="#read_bank_2">read_bank_2</a></td><td> Read all GPIO in bank 2
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#clear_bank_1">clear_bank_1</a></td><td> Clear selected GPIO in bank 1
|
|
</td></tr><tr><td><a href="#clear_bank_2">clear_bank_2</a></td><td> Clear selected GPIO in bank 2
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#set_bank_1">set_bank_1</a></td><td> Set selected GPIO in bank 1
|
|
</td></tr><tr><td><a href="#set_bank_2">set_bank_2</a></td><td> Set selected GPIO in bank 2
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#start_thread">start_thread</a></td><td> Start a new thread
|
|
</td></tr><tr><td><a href="#stop_thread">stop_thread</a></td><td> Stop a previously started thread
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><b>ADVANCED
|
|
</b></td><td></td></tr><tr><td></td><td></td></tr><tr><td><a href="#get_PWM_real_range">get_PWM_real_range</a></td><td> Get underlying PWM range for a GPIO
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#notify_open">notify_open</a></td><td> Request a notification handle
|
|
</td></tr><tr><td><a href="#notify_begin">notify_begin</a></td><td> Start notifications for selected GPIO
|
|
</td></tr><tr><td><a href="#notify_pause">notify_pause</a></td><td> Pause notifications
|
|
</td></tr><tr><td><a href="#notify_close">notify_close</a></td><td> Close a notification
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#bb_serial_read_open">bb_serial_read_open</a></td><td> Opens a GPIO for bit bang serial reads
|
|
</td></tr><tr><td><a href="#bb_serial_read">bb_serial_read</a></td><td> Reads bit bang serial data from a GPIO
|
|
</td></tr><tr><td><a href="#bb_serial_read_close">bb_serial_read_close</a></td><td> Closes a GPIO for bit bang serial reads
|
|
</td></tr><tr><td><a href="#bb_serial_invert">bb_serial_invert</a></td><td> Invert serial logic (1 invert, 0 normal)
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#hardware_clock">hardware_clock</a></td><td> Start hardware clock on supported GPIO
|
|
</td></tr><tr><td><a href="#hardware_PWM">hardware_PWM</a></td><td> Start hardware PWM on supported GPIO
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#set_glitch_filter">set_glitch_filter</a></td><td> Set a glitch filter on a GPIO
|
|
</td></tr><tr><td><a href="#set_noise_filter">set_noise_filter</a></td><td> Set a noise filter on a GPIO
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><b>SCRIPTS
|
|
</b></td><td></td></tr><tr><td></td><td></td></tr><tr><td><a href="#store_script">store_script</a></td><td> Store a script
|
|
</td></tr><tr><td><a href="#run_script">run_script</a></td><td> Run a stored script
|
|
</td></tr><tr><td><a href="#script_status">script_status</a></td><td> Get script status and parameters
|
|
</td></tr><tr><td><a href="#stop_script">stop_script</a></td><td> Stop a running script
|
|
</td></tr><tr><td><a href="#delete_script">delete_script</a></td><td> Delete a stored script
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><b>WAVES
|
|
</b></td><td></td></tr><tr><td></td><td></td></tr><tr><td><a href="#wave_clear">wave_clear</a></td><td> Deletes all waveforms
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#wave_add_new">wave_add_new</a></td><td> Starts a new waveform
|
|
</td></tr><tr><td><a href="#wave_add_generic">wave_add_generic</a></td><td> Adds a series of pulses to the waveform
|
|
</td></tr><tr><td><a href="#wave_add_serial">wave_add_serial</a></td><td> Adds serial data to the waveform
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#wave_create">wave_create</a></td><td> Creates a waveform from added data
|
|
</td></tr><tr><td><a href="#wave_delete">wave_delete</a></td><td> Deletes one or more waveforms
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#wave_send_once">wave_send_once</a></td><td> Transmits a waveform once
|
|
</td></tr><tr><td><a href="#wave_send_repeat">wave_send_repeat</a></td><td> Transmits a waveform repeatedly
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#wave_chain">wave_chain</a></td><td> Transmits a chain of waveforms
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#wave_tx_busy">wave_tx_busy</a></td><td> Checks to see if the waveform has ended
|
|
</td></tr><tr><td><a href="#wave_tx_stop">wave_tx_stop</a></td><td> Aborts the current waveform
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#wave_get_micros">wave_get_micros</a></td><td> Length in microseconds of the current waveform
|
|
</td></tr><tr><td><a href="#wave_get_high_micros">wave_get_high_micros</a></td><td> Length of longest waveform so far
|
|
</td></tr><tr><td><a href="#wave_get_max_micros">wave_get_max_micros</a></td><td> Absolute maximum allowed micros
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#wave_get_pulses">wave_get_pulses</a></td><td> Length in pulses of the current waveform
|
|
</td></tr><tr><td><a href="#wave_get_high_pulses">wave_get_high_pulses</a></td><td> Length of longest waveform so far
|
|
</td></tr><tr><td><a href="#wave_get_max_pulses">wave_get_max_pulses</a></td><td> Absolute maximum allowed pulses
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#wave_get_cbs">wave_get_cbs</a></td><td> Length in cbs of the current waveform
|
|
</td></tr><tr><td><a href="#wave_get_high_cbs">wave_get_high_cbs</a></td><td> Length of longest waveform so far
|
|
</td></tr><tr><td><a href="#wave_get_max_cbs">wave_get_max_cbs</a></td><td> Absolute maximum allowed cbs
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><b>I2C
|
|
</b></td><td></td></tr><tr><td></td><td></td></tr><tr><td><a href="#i2c_open">i2c_open</a></td><td> Opens an I2C device
|
|
</td></tr><tr><td><a href="#i2c_close">i2c_close</a></td><td> Closes an I2C device
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#i2c_write_quick">i2c_write_quick</a></td><td> smbus write quick
|
|
</td></tr><tr><td><a href="#i2c_write_byte">i2c_write_byte</a></td><td> smbus write byte
|
|
</td></tr><tr><td><a href="#i2c_read_byte">i2c_read_byte</a></td><td> smbus read byte
|
|
</td></tr><tr><td><a href="#i2c_write_byte_data">i2c_write_byte_data</a></td><td> smbus write byte data
|
|
</td></tr><tr><td><a href="#i2c_write_word_data">i2c_write_word_data</a></td><td> smbus write word data
|
|
</td></tr><tr><td><a href="#i2c_read_byte_data">i2c_read_byte_data</a></td><td> smbus read byte data
|
|
</td></tr><tr><td><a href="#i2c_read_word_data">i2c_read_word_data</a></td><td> smbus read word data
|
|
</td></tr><tr><td><a href="#i2c_process_call">i2c_process_call</a></td><td> smbus process call
|
|
</td></tr><tr><td><a href="#i2c_write_block_data">i2c_write_block_data</a></td><td> smbus write block data
|
|
</td></tr><tr><td><a href="#i2c_read_block_data">i2c_read_block_data</a></td><td> smbus read block data
|
|
</td></tr><tr><td><a href="#i2c_block_process_call">i2c_block_process_call</a></td><td> smbus block process call
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#i2c_write_i2c_block_data">i2c_write_i2c_block_data</a></td><td> smbus write I2C block data
|
|
</td></tr><tr><td><a href="#i2c_read_i2c_block_data">i2c_read_i2c_block_data</a></td><td> smbus read I2C block data
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#i2c_read_device">i2c_read_device</a></td><td> Reads the raw I2C device
|
|
</td></tr><tr><td><a href="#i2c_write_device">i2c_write_device</a></td><td> Writes the raw I2C device
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#i2c_zip">i2c_zip</a></td><td> Performs multiple I2C transactions
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#bb_i2c_open">bb_i2c_open</a></td><td> Opens GPIO for bit banging I2C
|
|
</td></tr><tr><td><a href="#bb_i2c_close">bb_i2c_close</a></td><td> Closes GPIO for bit banging I2C
|
|
</td></tr><tr><td><a href="#bb_i2c_zip">bb_i2c_zip</a></td><td> Performs multiple bit banged I2C transactions
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><b>SPI
|
|
</b></td><td></td></tr><tr><td></td><td></td></tr><tr><td><a href="#spi_open">spi_open</a></td><td> Opens a SPI device
|
|
</td></tr><tr><td><a href="#spi_close">spi_close</a></td><td> Closes a SPI device
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#spi_read">spi_read</a></td><td> Reads bytes from a SPI device
|
|
</td></tr><tr><td><a href="#spi_write">spi_write</a></td><td> Writes bytes to a SPI device
|
|
</td></tr><tr><td><a href="#spi_xfer">spi_xfer</a></td><td> Transfers bytes with a SPI device
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><b>SERIAL
|
|
</b></td><td></td></tr><tr><td></td><td></td></tr><tr><td><a href="#serial_open">serial_open</a></td><td> Opens a serial device
|
|
</td></tr><tr><td><a href="#serial_close">serial_close</a></td><td> Closes a serial device
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#serial_write_byte">serial_write_byte</a></td><td> Writes a byte to a serial device
|
|
</td></tr><tr><td><a href="#serial_read_byte">serial_read_byte</a></td><td> Reads a byte from a serial device
|
|
</td></tr><tr><td><a href="#serial_write">serial_write</a></td><td> Writes bytes to a serial device
|
|
</td></tr><tr><td><a href="#serial_read">serial_read</a></td><td> Reads bytes from a serial device
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#serial_data_available">serial_data_available</a></td><td> Returns number of bytes ready to be read
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><b>CUSTOM
|
|
</b></td><td></td></tr><tr><td></td><td></td></tr><tr><td><a href="#custom_1">custom_1</a></td><td> User custom function 1
|
|
</td></tr><tr><td><a href="#custom_2">custom_2</a></td><td> User custom function 2
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><b>UTILITIES
|
|
</b></td><td></td></tr><tr><td></td><td></td></tr><tr><td><a href="#get_current_tick">get_current_tick</a></td><td> Get current tick (microseconds)
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#get_hardware_revision">get_hardware_revision</a></td><td> Get hardware revision
|
|
</td></tr><tr><td><a href="#get_pigpio_version">get_pigpio_version</a></td><td> Get the pigpio version
|
|
</td></tr><tr><td><a href="#pigpiod_if_version">pigpiod_if_version</a></td><td> Get the pigpiod_if version
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#pigpio_error">pigpio_error</a></td><td> Get a text description of an error code.
|
|
</td></tr><tr><td></td><td></td></tr><tr><td><a href="#time_sleep">time_sleep</a></td><td> Sleeps for a float number of seconds
|
|
</td></tr><tr><td><a href="#time_time">time_time</a></td><td> Float number of seconds since the epoch
|
|
</td></tr><tr><td></td><td></td></tr></tbody></table><h2>FUNCTIONS</h2><h3><a name="time_time"></a><a href="#double"><small>double</small></a> time_time<small>(void)</small></h3>
|
|
Return the current time in seconds since the Epoch.
|
|
<h3><a name="time_sleep"></a><a href="#void"><small>void</small></a> time_sleep<small>(<a href="#double">double</a> <a href="#seconds">seconds</a>)</small></h3>
|
|
Delay execution for a given number of seconds.
|
|
<br><br><code>seconds: the number of seconds to delay.<br></code><h3><a name="pigpio_error"></a><a href="#char"><small>char</small></a> *pigpio_error<small>(<a href="#int">int</a> <a href="#errnum">errnum</a>)</small></h3>
|
|
Return a text description for an error code.
|
|
<br><br><code>errnum: the error code.<br></code><h3><a name="pigpiod_if_version"></a><a href="#unsigned"><small>unsigned</small></a> pigpiod_if_version<small>(void)</small></h3>
|
|
Return the pigpiod_if version.
|
|
<h3><a name="start_thread"></a><a href="#pthread_t"><small>pthread_t</small></a> *start_thread<small>(<a href="#gpioThreadFunc_t">gpioThreadFunc_t</a> <a href="#thread_func">thread_func</a>, <a href="#void">void</a> <a href="#*userdata">*userdata</a>)</small></h3>
|
|
Starts a new thread of execution with thread_func as the main routine.
|
|
<br><br><code>thread_func: the main function for the new thread.<br> userdata: a pointer to an arbitrary argument.<br></code><br><br>Returns a pointer to pthread_t if OK, otherwise NULL.
|
|
<br><br>The function is passed the single argument userdata.
|
|
<br><br>The thread can be cancelled by passing the pointer to pthread_t to
|
|
<a href="#stop_thread">stop_thread</a>.
|
|
<h3><a name="stop_thread"></a><a href="#void"><small>void</small></a> stop_thread<small>(<a href="#pthread_t">pthread_t</a> <a href="#*pth">*pth</a>)</small></h3>
|
|
Cancels the thread pointed at by pth.
|
|
<br><br><code>pth: the thread to be stopped.<br></code><br><br>No value is returned.
|
|
<br><br>The thread to be stopped should have been started with <a href="#start_thread">start_thread</a>.
|
|
<h3><a name="pigpio_start"></a><a href="#int"><small>int</small></a> pigpio_start<small>(<a href="#char">char</a> <a href="#*addrStr">*addrStr</a>, <a href="#char">char</a> <a href="#*portStr">*portStr</a>)</small></h3>
|
|
Connect to the pigpio daemon. Reserving command and
|
|
notification streams.
|
|
<br><br><code>addrStr: specifies the host or IP address of the Pi running the<br> pigpio daemon. It may be NULL in which case localhost<br> is used unless overridden by the PIGPIO_ADDR environment<br> variable.<br><br>portStr: specifies the port address used by the Pi running the<br> pigpio daemon. It may be NULL in which case "8888"<br> is used unless overridden by the PIGPIO_PORT environment<br> variable.<br></code><h3><a name="pigpio_stop"></a><a href="#void"><small>void</small></a> pigpio_stop<small>(void)</small></h3>
|
|
Terminates the connection to the pigpio daemon and releases
|
|
resources used by the library.
|
|
<h3><a name="set_mode"></a><a href="#int"><small>int</small></a> set_mode<small>(<a href="#unsigned">unsigned</a> <a href="#gpio">gpio</a>, <a href="#unsigned">unsigned</a> <a href="#mode">mode</a>)</small></h3>
|
|
Set the GPIO mode.
|
|
<br><br><code>gpio: 0-53.<br>mode: PI_INPUT, PI_OUTPUT, PI_ALT0, PI_ALT1,<br> PI_ALT2, PI_ALT3, PI_ALT4, PI_ALT5.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_GPIO, PI_BAD_MODE,
|
|
or PI_NOT_PERMITTED.
|
|
<h3><a name="get_mode"></a><a href="#int"><small>int</small></a> get_mode<small>(<a href="#unsigned">unsigned</a> <a href="#gpio">gpio</a>)</small></h3>
|
|
Get the GPIO mode.
|
|
<br><br><code>gpio: 0-53.<br></code><br><br>Returns the GPIO mode if OK, otherwise PI_BAD_GPIO.
|
|
<h3><a name="set_pull_up_down"></a><a href="#int"><small>int</small></a> set_pull_up_down<small>(<a href="#unsigned">unsigned</a> <a href="#gpio">gpio</a>, <a href="#unsigned">unsigned</a> <a href="#pud">pud</a>)</small></h3>
|
|
Set or clear the GPIO pull-up/down resistor.
|
|
<br><br><code>gpio: 0-53.<br> pud: PI_PUD_UP, PI_PUD_DOWN, PI_PUD_OFF.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_GPIO, PI_BAD_PUD,
|
|
or PI_NOT_PERMITTED.
|
|
<h3><a name="gpio_read"></a><a href="#int"><small>int</small></a> gpio_read<small>(<a href="#unsigned">unsigned</a> <a href="#gpio">gpio</a>)</small></h3>
|
|
Read the GPIO level.
|
|
<br><br><code>gpio:0-53.<br></code><br><br>Returns the GPIO level if OK, otherwise PI_BAD_GPIO.
|
|
<h3><a name="gpio_write"></a><a href="#int"><small>int</small></a> gpio_write<small>(<a href="#unsigned">unsigned</a> <a href="#gpio">gpio</a>, <a href="#unsigned">unsigned</a> <a href="#level">level</a>)</small></h3>
|
|
Write the GPIO level.
|
|
<br><br><code> gpio: 0-53.<br>level: 0, 1.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_GPIO, PI_BAD_LEVEL,
|
|
or PI_NOT_PERMITTED.
|
|
<br><br>Notes
|
|
<br><br>If PWM or servo pulses are active on the GPIO they are switched off.
|
|
<h3><a name="set_PWM_dutycycle"></a><a href="#int"><small>int</small></a> set_PWM_dutycycle<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>, <a href="#unsigned">unsigned</a> <a href="#dutycycle">dutycycle</a>)</small></h3>
|
|
Start (non-zero dutycycle) or stop (0) PWM pulses on the GPIO.
|
|
<br><br><code>user_gpio: 0-31.<br>dutycycle: 0-range (range defaults to 255).<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_USER_GPIO, PI_BAD_DUTYCYCLE,
|
|
or PI_NOT_PERMITTED.
|
|
Notes
|
|
<br><br>The <a href="#set_PWM_range">set_PWM_range</a> function may be used to change the
|
|
default range of 255.
|
|
<h3><a name="get_PWM_dutycycle"></a><a href="#int"><small>int</small></a> get_PWM_dutycycle<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>)</small></h3>
|
|
Return the PWM dutycycle in use on a GPIO.
|
|
<br><br><code>user_gpio: 0-31.<br></code><br><br>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 the GPIO (see <a href="#get_PWM_range">get_PWM_range</a>).
|
|
<br><br>If a hardware clock is active on the GPIO the reported dutycycle
|
|
will be 500000 (500k) out of 1000000 (1M).
|
|
<br><br>If hardware PWM is active on the GPIO the reported dutycycle
|
|
will be out of a 1000000 (1M).
|
|
<h3><a name="set_PWM_range"></a><a href="#int"><small>int</small></a> set_PWM_range<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>, <a href="#unsigned">unsigned</a> <a href="#range">range</a>)</small></h3>
|
|
Set the range of PWM values to be used on the GPIO.
|
|
<br><br><code>user_gpio: 0-31.<br> range: 25-40000.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_USER_GPIO, PI_BAD_DUTYRANGE,
|
|
or PI_NOT_PERMITTED.
|
|
<br><br>Notes
|
|
<br><br>If PWM is currently active on the GPIO its dutycycle will be
|
|
scaled to reflect the new range.
|
|
<br><br>The real range, the number of steps between fully off and fully on
|
|
for each of the 18 available GPIO frequencies is
|
|
<br><br><code> 25(#1), 50(#2), 100(#3), 125(#4), 200(#5), 250(#6),<br> 400(#7), 500(#8), 625(#9), 800(#10), 1000(#11), 1250(#12),<br>2000(#13), 2500(#14), 4000(#15), 5000(#16), 10000(#17), 20000(#18)<br></code><br><br>The real value set by set_PWM_range is (dutycycle * real range) / range.
|
|
<h3><a name="get_PWM_range"></a><a href="#int"><small>int</small></a> get_PWM_range<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>)</small></h3>
|
|
Get the range of PWM values being used on the GPIO.
|
|
<br><br><code>user_gpio: 0-31.<br></code><br><br>Returns the dutycycle range used for the GPIO if OK,
|
|
otherwise PI_BAD_USER_GPIO.
|
|
<br><br>If a hardware clock or hardware PWM is active on the GPIO the
|
|
reported range will be 1000000 (1M).
|
|
<h3><a name="get_PWM_real_range"></a><a href="#int"><small>int</small></a> get_PWM_real_range<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>)</small></h3>
|
|
Get the real underlying range of PWM values being used on the GPIO.
|
|
<br><br><code>user_gpio: 0-31.<br></code><br><br>Returns the real range used for the GPIO if OK,
|
|
otherwise PI_BAD_USER_GPIO.
|
|
<br><br>If a hardware clock is active on the GPIO the reported
|
|
real range will be 1000000 (1M).
|
|
<br><br>If hardware PWM is active on the GPIO the reported real range
|
|
will be approximately 250M divided by the set PWM frequency.
|
|
<h3><a name="set_PWM_frequency"></a><a href="#int"><small>int</small></a> set_PWM_frequency<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>, <a href="#unsigned">unsigned</a> <a href="#frequency">frequency</a>)</small></h3>
|
|
Set the frequency (in Hz) of the PWM to be used on the GPIO.
|
|
<br><br><code>user_gpio: 0-31.<br>frequency: >=0 (Hz).<br></code><br><br>Returns the numerically closest frequency if OK, otherwise
|
|
PI_BAD_USER_GPIO or PI_NOT_PERMITTED.
|
|
<br><br>If PWM is currently active on the GPIO it will be switched
|
|
off and then back on at the new frequency.
|
|
<br><br>Each GPIO can be independently set to one of 18 different
|
|
PWM frequencies.
|
|
<br><br>The selectable frequencies depend upon the sample rate which
|
|
may be 1, 2, 4, 5, 8, or 10 microseconds (default 5). The
|
|
sample rate is set when the pigpio daemon is started.
|
|
<br><br>The frequencies for each sample rate are:
|
|
<br><br><code> Hertz<br><br> 1: 40000 20000 10000 8000 5000 4000 2500 2000 1600<br> 1250 1000 800 500 400 250 200 100 50<br><br> 2: 20000 10000 5000 4000 2500 2000 1250 1000 800<br> 625 500 400 250 200 125 100 50 25<br><br> 4: 10000 5000 2500 2000 1250 1000 625 500 400<br> 313 250 200 125 100 63 50 25 13<br>sample<br> rate<br> (us) 5: 8000 4000 2000 1600 1000 800 500 400 320<br> 250 200 160 100 80 50 40 20 10<br><br> 8: 5000 2500 1250 1000 625 500 313 250 200<br> 156 125 100 63 50 31 25 13 6<br><br> 10: 4000 2000 1000 800 500 400 250 200 160<br> 125 100 80 50 40 25 20 10 5<br></code><h3><a name="get_PWM_frequency"></a><a href="#int"><small>int</small></a> get_PWM_frequency<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>)</small></h3>
|
|
Get the frequency of PWM being used on the GPIO.
|
|
<br><br><code>user_gpio: 0-31.<br></code><br><br>For normal PWM the frequency will be that defined for the GPIO by
|
|
<a href="#set_PWM_frequency">set_PWM_frequency</a>.
|
|
<br><br>If a hardware clock is active on the GPIO the reported frequency
|
|
will be that set by <a href="#hardware_clock">hardware_clock</a>.
|
|
<br><br>If hardware PWM is active on the GPIO the reported frequency
|
|
will be that set by <a href="#hardware_PWM">hardware_PWM</a>.
|
|
<br><br>Returns the frequency (in hertz) used for the GPIO if OK,
|
|
otherwise PI_BAD_USER_GPIO.
|
|
<h3><a name="set_servo_pulsewidth"></a><a href="#int"><small>int</small></a> set_servo_pulsewidth<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>, <a href="#unsigned">unsigned</a> <a href="#pulsewidth">pulsewidth</a>)</small></h3>
|
|
Start (500-2500) or stop (0) servo pulses on the GPIO.
|
|
<br><br><code> user_gpio: 0-31.<br>pulsewidth: 0 (off), 500 (anti-clockwise) - 2500 (clockwise).<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_USER_GPIO, PI_BAD_PULSEWIDTH or
|
|
PI_NOT_PERMITTED.
|
|
<br><br>The selected pulsewidth will continue to be transmitted until
|
|
changed by a subsequent call to set_servo_pulsewidth.
|
|
<br><br>The pulsewidths supported by servos varies and should probably be
|
|
determined by experiment. A value of 1500 should always be safe and
|
|
represents the mid-point of rotation.
|
|
<br><br>You can DAMAGE a servo if you command it to move beyond its limits.
|
|
<br><br>OTHER UPDATE RATES:
|
|
<br><br>This function updates servos at 50Hz. If you wish to use a different
|
|
update frequency you will have to use the PWM functions.
|
|
<br><br><code>Update Rate (Hz) 50 100 200 400 500<br>1E6/Hz 20000 10000 5000 2500 2000<br></code><br><br>Firstly set the desired PWM frequency using <a href="#set_PWM_frequency">set_PWM_frequency</a>.
|
|
<br><br>Then set the PWM range using <a href="#set_PWM_range">set_PWM_range</a> to 1E6/Hz.
|
|
Doing this allows you to use units of microseconds when setting
|
|
the servo pulsewidth.
|
|
<br><br>E.g. If you want to update a servo connected to GPIO 25 at 400Hz
|
|
<br><br><code>set_PWM_frequency(25, 400);<br>set_PWM_range(25, 2500);<br></code><br><br>Thereafter use the <a href="#set_PWM_dutycycle">set_PWM_dutycycle</a> function to move the servo,
|
|
e.g. set_PWM_dutycycle(25, 1500) will set a 1500 us pulse.<br>
|
|
<h3><a name="get_servo_pulsewidth"></a><a href="#int"><small>int</small></a> get_servo_pulsewidth<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>)</small></h3>
|
|
Return the servo pulsewidth in use on a GPIO.
|
|
<br><br><code>user_gpio: 0-31.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_USER_GPIO or PI_NOT_SERVO_GPIO.
|
|
<h3><a name="notify_open"></a><a href="#int"><small>int</small></a> notify_open<small>(void)</small></h3>
|
|
Get a free notification handle.
|
|
<br><br>Returns a handle greater than or equal to zero if OK,
|
|
otherwise PI_NO_HANDLE.
|
|
<br><br>A notification is a method for being notified of GPIO state
|
|
changes via a pipe.
|
|
<br><br>Pipes are only accessible from the local machine so this function
|
|
serves no purpose if you are using the library from a remote machine.
|
|
The in-built (socket) notifications provided by <a href="#callback">callback</a>
|
|
should be used instead.
|
|
<br><br>Notifications for handle x will be available at the pipe
|
|
named /dev/pigpiox (where x is the handle number).
|
|
E.g. if the function returns 15 then the notifications must be
|
|
read from /dev/pigpio15.
|
|
<h3><a name="notify_begin"></a><a href="#int"><small>int</small></a> notify_begin<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#uint32_t">uint32_t</a> <a href="#bits">bits</a>)</small></h3>
|
|
Start notifications on a previously opened handle.
|
|
<br><br><code>handle: 0-31 (as returned by <a href="#notify_open">notify_open</a>)<br> bits: a mask indicating the GPIO to be notified.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_HANDLE.
|
|
<br><br>The notification sends state changes for each GPIO whose
|
|
corresponding bit in bits is set.
|
|
<br><br>Each notification occupies 12 bytes in the fifo as follows:
|
|
<br><br><code>typedef struct<br>{<br> uint16_t seqno;<br> uint16_t flags;<br> uint32_t tick;<br> uint32_t level;<br>} gpioReport_t;<br></code><br><br>seqno: starts at 0 each time the handle is opened and then increments
|
|
by one for each report.
|
|
<br><br>flags: two flags are defined, PI_NTFY_FLAGS_WDOG and PI_NTFY_FLAGS_ALIVE.
|
|
<br><br>PI_NTFY_FLAGS_WDOG, if bit 5 is set then bits 0-4 of the flags
|
|
indicate a GPIO which has had a watchdog timeout.
|
|
<br><br>PI_NTFY_FLAGS_ALIVE, if bit 6 is set this indicates a keep alive
|
|
signal on the pipe/socket and is sent once a minute in the absence
|
|
of other notification activity.
|
|
<br><br>tick: the number of microseconds since system boot. It wraps around
|
|
after 1h12m.
|
|
<br><br>level: indicates the level of each GPIO. If bit 1<<x is set then
|
|
GPIO x is high.
|
|
<h3><a name="notify_pause"></a><a href="#int"><small>int</small></a> notify_pause<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>)</small></h3>
|
|
Pause notifications on a previously opened handle.
|
|
<br><br><code>handle: 0-31 (as returned by <a href="#notify_open">notify_open</a>)<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_HANDLE.
|
|
<br><br>Notifications for the handle are suspended until
|
|
<a href="#notify_begin">notify_begin</a> is called again.
|
|
<h3><a name="notify_close"></a><a href="#int"><small>int</small></a> notify_close<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>)</small></h3>
|
|
Stop notifications on a previously opened handle and
|
|
release the handle for reuse.
|
|
<br><br><code>handle: 0-31 (as returned by <a href="#notify_open">notify_open</a>)<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_HANDLE.
|
|
<h3><a name="set_watchdog"></a><a href="#int"><small>int</small></a> set_watchdog<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>, <a href="#unsigned">unsigned</a> <a href="#timeout">timeout</a>)</small></h3>
|
|
Sets a watchdog for a GPIO.
|
|
<br><br><code>user_gpio: 0-31.<br> timeout: 0-60000.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_USER_GPIO
|
|
or PI_BAD_WDOG_TIMEOUT.
|
|
<br><br>The watchdog is nominally in milliseconds.
|
|
<br><br>Only one watchdog may be registered per GPIO.
|
|
<br><br>The watchdog may be cancelled by setting timeout to 0.
|
|
<br><br>Once a watchdog has been started callbacks for the GPIO will be
|
|
triggered every timeout interval after the last GPIO activity.
|
|
<br><br>The callback will receive the special level PI_TIMEOUT.
|
|
<h3><a name="set_glitch_filter"></a><a href="#int"><small>int</small></a> set_glitch_filter<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>, <a href="#unsigned">unsigned</a> <a href="#steady">steady</a>)</small></h3>
|
|
Sets a glitch filter on a GPIO.
|
|
<br><br>Level changes on the GPIO are not reported unless the level
|
|
has been stable for at least <a href="#steady">steady</a> microseconds. The
|
|
level is then reported. Level changes of less than <a href="#steady">steady</a>
|
|
microseconds are ignored.
|
|
<br><br><code>user_gpio: 0-31<br> steady: 0-300000<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_USER_GPIO, or PI_BAD_FILTER.
|
|
<br><br>This filter affects the GPIO samples returned to callbacks set up
|
|
with <a href="#callback">callback</a>, <a href="#callback_ex">callback_ex</a> and <a href="#wait_for_edge">wait_for_edge</a>.
|
|
<br><br>It does not affect levels read by <a href="#gpio_read">gpio_read</a>,
|
|
<a href="#read_bank_1">read_bank_1</a>, or <a href="#read_bank_2">read_bank_2</a>.
|
|
Each (stable) edge will be timestamped <a href="#steady">steady</a> microseconds
|
|
after it was first detected.
|
|
<h3><a name="set_noise_filter"></a><a href="#int"><small>int</small></a> set_noise_filter<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>, <a href="#unsigned">unsigned</a> <a href="#steady">steady</a>, <a href="#unsigned">unsigned</a> <a href="#active">active</a>)</small></h3>
|
|
Sets a noise filter on a GPIO.
|
|
<br><br>Level changes on the GPIO are ignored until a level which has
|
|
been stable for <a href="#steady">steady</a> microseconds is detected. Level changes
|
|
on the GPIO are then reported for <a href="#active">active</a> microseconds after
|
|
which the process repeats.
|
|
<br><br><code>user_gpio: 0-31<br> steady: 0-300000<br> active: 0-1000000<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_USER_GPIO, or PI_BAD_FILTER.
|
|
<br><br>This filter affects the GPIO samples returned to callbacks set up
|
|
with <a href="#callback">callback</a>, <a href="#callback_ex">callback_ex</a> and <a href="#wait_for_edge">wait_for_edge</a>.
|
|
<br><br>It does not affect levels read by <a href="#gpio_read">gpio_read</a>,
|
|
<a href="#read_bank_1">read_bank_1</a>, or <a href="#read_bank_2">read_bank_2</a>.
|
|
<br><br>Level changes before and after the active period may
|
|
be reported. Your software must be designed to cope with
|
|
such reports.
|
|
<h3><a name="read_bank_1"></a><a href="#uint32_t"><small>uint32_t</small></a> read_bank_1<small>(void)</small></h3>
|
|
Read the levels of the bank 1 GPIO (GPIO 0-31).
|
|
<br><br>The returned 32 bit integer has a bit set if the corresponding
|
|
GPIO is logic 1. GPIO n has bit value (1<<n).
|
|
<h3><a name="read_bank_2"></a><a href="#uint32_t"><small>uint32_t</small></a> read_bank_2<small>(void)</small></h3>
|
|
Read the levels of the bank 2 GPIO (GPIO 32-53).
|
|
<br><br>The returned 32 bit integer has a bit set if the corresponding
|
|
GPIO is logic 1. GPIO n has bit value (1<<(n-32)).
|
|
<h3><a name="clear_bank_1"></a><a href="#int"><small>int</small></a> clear_bank_1<small>(<a href="#uint32_t">uint32_t</a> <a href="#bits">bits</a>)</small></h3>
|
|
Clears GPIO 0-31 if the corresponding bit in bits is set.
|
|
<br><br><code>bits: a bit mask with 1 set if the corresponding GPIO is<br> to be cleared.<br></code><br><br>Returns 0 if OK, otherwise PI_SOME_PERMITTED.
|
|
<br><br>A status of PI_SOME_PERMITTED indicates that the user is not
|
|
allowed to write to one or more of the GPIO.
|
|
<h3><a name="clear_bank_2"></a><a href="#int"><small>int</small></a> clear_bank_2<small>(<a href="#uint32_t">uint32_t</a> <a href="#bits">bits</a>)</small></h3>
|
|
Clears GPIO 32-53 if the corresponding bit (0-21) in bits is set.
|
|
<br><br><code>bits: a bit mask with 1 set if the corresponding GPIO is<br> to be cleared.<br></code><br><br>Returns 0 if OK, otherwise PI_SOME_PERMITTED.
|
|
<br><br>A status of PI_SOME_PERMITTED indicates that the user is not
|
|
allowed to write to one or more of the GPIO.
|
|
<h3><a name="set_bank_1"></a><a href="#int"><small>int</small></a> set_bank_1<small>(<a href="#uint32_t">uint32_t</a> <a href="#bits">bits</a>)</small></h3>
|
|
Sets GPIO 0-31 if the corresponding bit in bits is set.
|
|
<br><br><code>bits: a bit mask with 1 set if the corresponding GPIO is<br> to be set.<br></code><br><br>Returns 0 if OK, otherwise PI_SOME_PERMITTED.
|
|
<br><br>A status of PI_SOME_PERMITTED indicates that the user is not
|
|
allowed to write to one or more of the GPIO.
|
|
<h3><a name="set_bank_2"></a><a href="#int"><small>int</small></a> set_bank_2<small>(<a href="#uint32_t">uint32_t</a> <a href="#bits">bits</a>)</small></h3>
|
|
Sets GPIO 32-53 if the corresponding bit (0-21) in bits is set.
|
|
<br><br><code>bits: a bit mask with 1 set if the corresponding GPIO is<br> to be set.<br></code><br><br>Returns 0 if OK, otherwise PI_SOME_PERMITTED.
|
|
<br><br>A status of PI_SOME_PERMITTED indicates that the user is not
|
|
allowed to write to one or more of the GPIO.
|
|
<h3><a name="hardware_clock"></a><a href="#int"><small>int</small></a> hardware_clock<small>(<a href="#unsigned">unsigned</a> <a href="#gpio">gpio</a>, <a href="#unsigned">unsigned</a> <a href="#clkfreq">clkfreq</a>)</small></h3>
|
|
Starts a hardware clock on a GPIO at the specified frequency.
|
|
Frequencies above 30MHz are unlikely to work.
|
|
<br><br><code> gpio: see description<br>frequency: 0 (off) or 4689-250000000 (250M)<br></code><br><br>Returns 0 if OK, otherwise PI_NOT_PERMITTED, PI_BAD_GPIO,
|
|
PI_NOT_HCLK_GPIO, PI_BAD_HCLK_FREQ,or PI_BAD_HCLK_PASS.
|
|
<br><br>The same clock is available on multiple GPIO. The latest
|
|
frequency setting will be used by all GPIO which share a clock.
|
|
<br><br>The GPIO must be one of the following.
|
|
<br><br><code>4 clock 0 All models<br>5 clock 1 All models but A and B (reserved for system use)<br>6 clock 2 All models but A and B<br>20 clock 0 All models but A and B<br>21 clock 1 All models but A and Rev.2 B (reserved for system use)<br><br>32 clock 0 Compute module only<br>34 clock 0 Compute module only<br>42 clock 1 Compute module only (reserved for system use)<br>43 clock 2 Compute module only<br>44 clock 1 Compute module only (reserved for system use)<br></code><br><br>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
|
|
GPIO number.
|
|
<h3><a name="hardware_PWM"></a><a href="#int"><small>int</small></a> hardware_PWM<small>(<a href="#unsigned">unsigned</a> <a href="#gpio">gpio</a>, <a href="#unsigned">unsigned</a> <a href="#PWMfreq">PWMfreq</a>, <a href="#uint32_t">uint32_t</a> <a href="#PWMduty">PWMduty</a>)</small></h3>
|
|
Starts hardware PWM on a GPIO at the specified frequency and dutycycle.
|
|
Frequencies above 30MHz are unlikely to work.
|
|
<br><br>NOTE: Any waveform started by <a href="#wave_send_once">wave_send_once</a>, <a href="#wave_send_repeat">wave_send_repeat</a>,
|
|
or <a href="#wave_chain">wave_chain</a> will be cancelled.
|
|
<br><br>This function is only valid if the pigpio main clock is PCM. The
|
|
main clock defaults to PCM but may be overridden when the pigpio
|
|
daemon is started (option -t).
|
|
<br><br><code> gpio: see descripton<br>PWMfreq: 0 (off) or 1-125000000 (125M)<br>PWMduty: 0 (off) to 1000000 (1M)(fully on)<br></code><br><br>Returns 0 if OK, otherwise PI_NOT_PERMITTED, PI_BAD_GPIO,
|
|
PI_NOT_HPWM_GPIO, PI_BAD_HPWM_DUTY, PI_BAD_HPWM_FREQ,
|
|
or PI_HPWM_ILLEGAL.
|
|
<br><br>The same PWM channel is available on multiple GPIO. The latest
|
|
frequency and dutycycle setting will be used by all GPIO which
|
|
share a PWM channel.
|
|
<br><br>The GPIO must be one of the following.
|
|
<br><br><code>12 PWM channel 0 All models but A and B<br>13 PWM channel 1 All models but A and B<br>18 PWM channel 0 All models<br>19 PWM channel 1 All models but A and B<br><br>40 PWM channel 0 Compute module only<br>41 PWM channel 1 Compute module only<br>45 PWM channel 1 Compute module only<br>52 PWM channel 0 Compute module only<br>53 PWM channel 1 Compute module only<br></code><h3><a name="get_current_tick"></a><a href="#uint32_t"><small>uint32_t</small></a> get_current_tick<small>(void)</small></h3>
|
|
Gets the current system tick.
|
|
<br><br>Tick is the number of microseconds since system boot.
|
|
<br><br>As tick is an unsigned 32 bit quantity it wraps around after
|
|
2**32 microseconds, which is approximately 1 hour 12 minutes.
|
|
<h3><a name="get_hardware_revision"></a><a href="#uint32_t"><small>uint32_t</small></a> get_hardware_revision<small>(void)</small></h3>
|
|
Get the Pi's hardware revision number.
|
|
<br><br>The hardware revision is the last few characters on the Revision line
|
|
of /proc/cpuinfo.
|
|
<br><br>If the hardware revision can not be found or is not a valid
|
|
hexadecimal number the function returns 0.
|
|
<br><br>The revision number can be used to determine the assignment of GPIO
|
|
to pins (see <a href="#gpio">gpio</a>).
|
|
<br><br>There are at least three types of board.
|
|
<br><br>Type 1 boards have hardware revision numbers of 2 and 3.
|
|
<br><br>Type 2 boards have hardware revision numbers of 4, 5, 6, and 15.
|
|
<br><br>Type 3 boards have hardware revision numbers of 16 or greater.
|
|
<h3><a name="get_pigpio_version"></a><a href="#uint32_t"><small>uint32_t</small></a> get_pigpio_version<small>(void)</small></h3>
|
|
Returns the pigpio version.
|
|
<h3><a name="wave_clear"></a><a href="#int"><small>int</small></a> wave_clear<small>(void)</small></h3>
|
|
This function clears all waveforms and any data added by calls to the
|
|
<a href="#wave_add_*">wave_add_*</a> functions.
|
|
<br><br>Returns 0 if OK.
|
|
<h3><a name="wave_add_new"></a><a href="#int"><small>int</small></a> wave_add_new<small>(void)</small></h3>
|
|
This function starts a new empty waveform. You wouldn't normally need
|
|
to call this function as it is automatically called after a waveform is
|
|
created with the <a href="#wave_create">wave_create</a> function.
|
|
<br><br>Returns 0 if OK.
|
|
<h3><a name="wave_add_generic"></a><a href="#int"><small>int</small></a> wave_add_generic<small>(<a href="#unsigned">unsigned</a> <a href="#numPulses">numPulses</a>, <a href="#gpioPulse_t">gpioPulse_t</a> <a href="#*pulses">*pulses</a>)</small></h3>
|
|
This function adds a number of pulses to the current waveform.
|
|
<br><br><code>numPulses: the number of pulses.<br> pulses: an array of pulses.<br></code><br><br>Returns the new total number of pulses in the current waveform if OK,
|
|
otherwise PI_TOO_MANY_PULSES.
|
|
<br><br>The pulses are interleaved in time order within the existing waveform
|
|
(if any).
|
|
<br><br>Merging allows the waveform to be built in parts, that is the settings
|
|
for GPIO#1 can be added, and then GPIO#2 etc.
|
|
<br><br>If the added waveform is intended to start after or within the existing
|
|
waveform then the first pulse should consist solely of a delay.
|
|
<h3><a name="wave_add_serial"></a><a href="#int"><small>int</small></a> wave_add_serial<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>, <a href="#unsigned">unsigned</a> <a href="#baud">baud</a>, <a href="#unsigned">unsigned</a> <a href="#data_bits">data_bits</a>, <a href="#unsigned">unsigned</a> <a href="#stop_bits">stop_bits</a>, <a href="#unsigned">unsigned</a> <a href="#offset">offset</a>, <a href="#unsigned">unsigned</a> <a href="#numBytes">numBytes</a>, <a href="#char">char</a> <a href="#*str">*str</a>)</small></h3>
|
|
This function adds a waveform representing serial data to the
|
|
existing waveform (if any). The serial data starts offset
|
|
microseconds from the start of the waveform.
|
|
<br><br><code>user_gpio: 0-31.<br> baud: 50-1000000<br>data_bits: number of data bits (1-32)<br>stop_bits: number of stop half bits (2-8)<br> offset: >=0<br> numBytes: >=1<br> str: an array of chars.<br></code><br><br>Returns the new total number of pulses in the current waveform if OK,
|
|
otherwise PI_BAD_USER_GPIO, PI_BAD_WAVE_BAUD, PI_BAD_DATABITS,
|
|
PI_BAD_STOP_BITS, PI_TOO_MANY_CHARS, PI_BAD_SER_OFFSET,
|
|
or PI_TOO_MANY_PULSES.
|
|
<br><br>NOTES:
|
|
<br><br>The serial data is formatted as one start bit, <a href="#data_bits">data_bits</a> data bits,
|
|
and <a href="#stop_bits">stop_bits</a>/2 stop bits.
|
|
<br><br>It is legal to add serial data streams with different baud rates to
|
|
the same waveform.
|
|
<br><br><a href="#numBytes">numBytes</a> is the number of bytes of data in str.
|
|
<br><br>The bytes required for each character depend upon <a href="#data_bits">data_bits</a>.
|
|
<br><br>For <a href="#data_bits">data_bits</a> 1-8 there will be one byte per character.<br>
|
|
For <a href="#data_bits">data_bits</a> 9-16 there will be two bytes per character.<br>
|
|
For <a href="#data_bits">data_bits</a> 17-32 there will be four bytes per character.
|
|
<h3><a name="wave_create"></a><a href="#int"><small>int</small></a> wave_create<small>(void)</small></h3>
|
|
This function creates a waveform from the data provided by the prior
|
|
calls to the <a href="#wave_add_*">wave_add_*</a> functions. Upon success a wave id
|
|
greater than or equal to 0 is returned, otherwise PI_EMPTY_WAVEFORM,
|
|
PI_TOO_MANY_CBS, PI_TOO_MANY_OOL, or PI_NO_WAVEFORM_ID.
|
|
<br><br>The data provided by the <a href="#wave_add_*">wave_add_*</a> functions is consumed by this
|
|
function.
|
|
<br><br>As many waveforms may be created as there is space available. The
|
|
wave id is passed to <a href="#wave_send_*">wave_send_*</a> to specify the waveform to transmit.
|
|
<br><br>Normal usage would be
|
|
<br><br>Step 1. <a href="#wave_clear">wave_clear</a> to clear all waveforms and added data.
|
|
<br><br>Step 2. <a href="#wave_add_*">wave_add_*</a> calls to supply the waveform data.
|
|
<br><br>Step 3. <a href="#wave_create">wave_create</a> to create the waveform and get a unique id
|
|
<br><br>Repeat steps 2 and 3 as needed.
|
|
<br><br>Step 4. <a href="#wave_send_*">wave_send_*</a> with the id of the waveform to transmit.
|
|
<br><br>A waveform comprises one or more pulses. Each pulse consists of a
|
|
<a href="#gpioPulse_t">gpioPulse_t</a> structure.
|
|
<br><br><code>typedef struct<br>{<br> uint32_t gpioOn;<br> uint32_t gpioOff;<br> uint32_t usDelay;<br>} gpioPulse_t;<br></code><br><br>The fields specify
|
|
<br><br>1) the GPIO to be switched on at the start of the pulse.<br>
|
|
2) the GPIO to be switched off at the start of the pulse.<br>
|
|
3) the delay in microseconds before the next pulse.<br>
|
|
<br><br>Any or all the fields can be zero. It doesn't make any sense to
|
|
set all the fields to zero (the pulse will be ignored).
|
|
<br><br>When a waveform is started each pulse is executed in order with the
|
|
specified delay between the pulse and the next.
|
|
<br><br>Returns the new waveform id if OK, otherwise PI_EMPTY_WAVEFORM,
|
|
PI_NO_WAVEFORM_ID, PI_TOO_MANY_CBS, or PI_TOO_MANY_OOL.
|
|
<h3><a name="wave_delete"></a><a href="#int"><small>int</small></a> wave_delete<small>(<a href="#unsigned">unsigned</a> <a href="#wave_id">wave_id</a>)</small></h3>
|
|
This function deletes the waveform with id wave_id.
|
|
<br><br><code>wave_id: >=0, as returned by <a href="#wave_create">wave_create</a>.<br></code><br><br>Wave ids are allocated in order, 0, 1, 2, etc.
|
|
<br><br>The wave is flagged for deletion. The resources used by the wave
|
|
will only be reused when either of the following apply.
|
|
<br><br>- all waves with higher numbered wave ids have been deleted or have
|
|
been flagged for deletion.
|
|
<br><br>- a new wave is created which uses exactly the same resources as
|
|
the current wave (see the C source for gpioWaveCreate for details).
|
|
<br><br>Returns 0 if OK, otherwise PI_BAD_WAVE_ID.
|
|
<h3><a name="wave_send_once"></a><a href="#int"><small>int</small></a> wave_send_once<small>(<a href="#unsigned">unsigned</a> <a href="#wave_id">wave_id</a>)</small></h3>
|
|
This function transmits the waveform with id wave_id. The waveform
|
|
is sent once.
|
|
<br><br>NOTE: Any hardware PWM started by <a href="#hardware_PWM">hardware_PWM</a> will be cancelled.
|
|
<br><br><code>wave_id: >=0, as returned by <a href="#wave_create">wave_create</a>.<br></code><br><br>Returns the number of DMA control blocks in the waveform if OK,
|
|
otherwise PI_BAD_WAVE_ID, or PI_BAD_WAVE_MODE.
|
|
<h3><a name="wave_send_repeat"></a><a href="#int"><small>int</small></a> wave_send_repeat<small>(<a href="#unsigned">unsigned</a> <a href="#wave_id">wave_id</a>)</small></h3>
|
|
This function transmits the waveform with id wave_id. The waveform
|
|
cycles until cancelled (either by the sending of a new waveform or
|
|
by <a href="#wave_tx_stop">wave_tx_stop</a>).
|
|
<br><br>NOTE: Any hardware PWM started by <a href="#hardware_PWM">hardware_PWM</a> will be cancelled.
|
|
<br><br><code>wave_id: >=0, as returned by <a href="#wave_create">wave_create</a>.<br></code><br><br>Returns the number of DMA control blocks in the waveform if OK,
|
|
otherwise PI_BAD_WAVE_ID, or PI_BAD_WAVE_MODE.
|
|
<h3><a name="wave_chain"></a><a href="#int"><small>int</small></a> wave_chain<small>(<a href="#char">char</a> <a href="#*buf">*buf</a>, <a href="#unsigned">unsigned</a> <a href="#bufSize">bufSize</a>)</small></h3>
|
|
This function transmits a chain of waveforms.
|
|
<br><br>NOTE: Any hardware PWM started by <a href="#hardware_PWM">hardware_PWM</a> will be cancelled.
|
|
<br><br>The waves to be transmitted are specified by the contents of buf
|
|
which contains an ordered list of <a href="#wave_id">wave_id</a>s and optional command
|
|
codes and related data.
|
|
<br><br><code> buf: pointer to the wave_ids and optional command codes<br>bufSize: the number of bytes in buf<br></code><br><br>Returns 0 if OK, otherwise PI_CHAIN_NESTING, PI_CHAIN_LOOP_CNT, PI_BAD_CHAIN_LOOP, PI_BAD_CHAIN_CMD, PI_CHAIN_COUNTER,
|
|
PI_BAD_CHAIN_DELAY, PI_CHAIN_TOO_BIG, or PI_BAD_WAVE_ID.
|
|
<br><br>Each wave is transmitted in the order specified. A wave may
|
|
occur multiple times per chain.
|
|
<br><br>A blocks of waves may be transmitted multiple times by using
|
|
the loop commands. The block is bracketed by loop start and
|
|
end commands. Loops may be nested.
|
|
<br><br>Delays between waves may be added with the delay command.
|
|
<br><br>The following command codes are supported:
|
|
<br><br><table border="1" cellpadding="2" cellspacing="2"><tbody><tr><td>Name</td><td>Cmd & Data</td><td>Meaning</td></tr><tr><td>Loop Start</td><td>255 0</td><td>Identify start of a wave block</td></tr><tr><td>Loop Repeat</td><td>255 1 x y</td><td>loop x + y*256 times</td></tr><tr><td>Delay</td><td>255 2 x y</td><td>delay x + y*256 microseconds</td></tr><tr><td>Loop Forever</td><td>255 3</td><td>loop forever</td></tr></tbody></table><br><br>If present Loop Forever must be the last entry in the chain.
|
|
<br><br>The code is currently dimensioned to support a chain with roughly
|
|
600 entries and 20 loop counters.
|
|
<br><br><b><small>Example</small></b><br><br><code>#include <stdio.h><br>#include <pigpiod_if.h><br><br>#define WAVES 5<br>#define GPIO 4<br><br>int main(int argc, char *argv[])<br>{<br> int i, wid[WAVES];<br><br> if (pigpio_start(0, 0)<0) return -1;<br><br> set_mode(GPIO, PI_OUTPUT);<br><br> for (i=0; i<WAVES; i++)<br> {<br> wave_add_generic(2, (gpioPulse_t[])<br> {{1<<GPIO, 0, 20},<br> {0, 1<<GPIO, (i+1)*200}});<br><br> wid[i] = wave_create();<br> }<br><br> wave_chain((char []) {<br> wid[4], wid[3], wid[2], // transmit waves 4+3+2<br> 255, 0, // loop start<br> wid[0], wid[0], wid[0], // transmit waves 0+0+0<br> 255, 0, // loop start<br> wid[0], wid[1], // transmit waves 0+1<br> 255, 2, 0x88, 0x13, // delay 5000us<br> 255, 1, 30, 0, // loop end (repeat 30 times)<br> 255, 0, // loop start<br> wid[2], wid[3], wid[0], // transmit waves 2+3+0<br> wid[3], wid[1], wid[2], // transmit waves 3+1+2<br> 255, 1, 10, 0, // loop end (repeat 10 times)<br> 255, 1, 5, 0, // loop end (repeat 5 times)<br> wid[4], wid[4], wid[4], // transmit waves 4+4+4<br> 255, 2, 0x20, 0x4E, // delay 20000us<br> wid[0], wid[0], wid[0], // transmit waves 0+0+0<br><br> }, 46);<br><br> while (wave_tx_busy()) time_sleep(0.1);<br><br> for (i=0; i<WAVES; i++) wave_delete(wid[i]);<br><br> pigpio_stop();<br>}<br></code><h3><a name="wave_tx_busy"></a><a href="#int"><small>int</small></a> wave_tx_busy<small>(void)</small></h3>
|
|
This function checks to see if a waveform is currently being
|
|
transmitted.
|
|
<br><br>Returns 1 if a waveform is currently being transmitted, otherwise 0.
|
|
<h3><a name="wave_tx_stop"></a><a href="#int"><small>int</small></a> wave_tx_stop<small>(void)</small></h3>
|
|
This function stops the transmission of the current waveform.
|
|
<br><br>Returns 0 if OK.
|
|
<br><br>This function is intended to stop a waveform started with the repeat mode.
|
|
<h3><a name="wave_get_micros"></a><a href="#int"><small>int</small></a> wave_get_micros<small>(void)</small></h3>
|
|
This function returns the length in microseconds of the current
|
|
waveform.
|
|
<h3><a name="wave_get_high_micros"></a><a href="#int"><small>int</small></a> wave_get_high_micros<small>(void)</small></h3>
|
|
This function returns the length in microseconds of the longest waveform
|
|
created since the pigpio daemon was started.
|
|
<h3><a name="wave_get_max_micros"></a><a href="#int"><small>int</small></a> wave_get_max_micros<small>(void)</small></h3>
|
|
This function returns the maximum possible size of a waveform in<br>
|
|
microseconds.
|
|
<h3><a name="wave_get_pulses"></a><a href="#int"><small>int</small></a> wave_get_pulses<small>(void)</small></h3>
|
|
This function returns the length in pulses of the current waveform.
|
|
<h3><a name="wave_get_high_pulses"></a><a href="#int"><small>int</small></a> wave_get_high_pulses<small>(void)</small></h3>
|
|
This function returns the length in pulses of the longest waveform
|
|
created since the pigpio daemon was started.
|
|
<h3><a name="wave_get_max_pulses"></a><a href="#int"><small>int</small></a> wave_get_max_pulses<small>(void)</small></h3>
|
|
This function returns the maximum possible size of a waveform in pulses.
|
|
<h3><a name="wave_get_cbs"></a><a href="#int"><small>int</small></a> wave_get_cbs<small>(void)</small></h3>
|
|
This function returns the length in DMA control blocks of the current
|
|
waveform.
|
|
<h3><a name="wave_get_high_cbs"></a><a href="#int"><small>int</small></a> wave_get_high_cbs<small>(void)</small></h3>
|
|
This function returns the length in DMA control blocks of the longest
|
|
waveform created since the pigpio daemon was started.
|
|
<h3><a name="wave_get_max_cbs"></a><a href="#int"><small>int</small></a> wave_get_max_cbs<small>(void)</small></h3>
|
|
This function returns the maximum possible size of a waveform in DMA
|
|
control blocks.
|
|
<h3><a name="gpio_trigger"></a><a href="#int"><small>int</small></a> gpio_trigger<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>, <a href="#unsigned">unsigned</a> <a href="#pulseLen">pulseLen</a>, <a href="#unsigned">unsigned</a> <a href="#level">level</a>)</small></h3>
|
|
This function sends a trigger pulse to a GPIO. The GPIO is set to
|
|
level for pulseLen microseconds and then reset to not level.
|
|
<br><br><code>user_gpio: 0-31.<br> pulseLen: 1-100.<br> level: 0,1.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_USER_GPIO, PI_BAD_LEVEL,
|
|
PI_BAD_PULSELEN, or PI_NOT_PERMITTED.
|
|
<h3><a name="store_script"></a><a href="#int"><small>int</small></a> store_script<small>(<a href="#char">char</a> <a href="#*script">*script</a>)</small></h3>
|
|
This function stores a script for later execution.
|
|
<br><br>See <a href="http://abyz.me.uk/rpi/pigpio/pigs.html#Scripts">http://abyz.me.uk/rpi/pigpio/pigs.html#Scripts</a> for details.
|
|
<br><br><code>script: the text of the script.<br></code><br><br>The function returns a script id if the script is valid,
|
|
otherwise PI_BAD_SCRIPT.
|
|
<h3><a name="run_script"></a><a href="#int"><small>int</small></a> run_script<small>(<a href="#unsigned">unsigned</a> <a href="#script_id">script_id</a>, <a href="#unsigned">unsigned</a> <a href="#numPar">numPar</a>, <a href="#uint32_t">uint32_t</a> <a href="#*param">*param</a>)</small></h3>
|
|
This function runs a stored script.
|
|
<br><br><code>script_id: >=0, as returned by <a href="#store_script">store_script</a>.<br> numPar: 0-10, the number of parameters.<br> param: an array of parameters.<br></code><br><br>The function returns 0 if OK, otherwise PI_BAD_SCRIPT_ID, or
|
|
PI_TOO_MANY_PARAM
|
|
<br><br>param is an array of up to 10 parameters which may be referenced in
|
|
the script as p0 to p9.
|
|
<h3><a name="script_status"></a><a href="#int"><small>int</small></a> script_status<small>(<a href="#unsigned">unsigned</a> <a href="#script_id">script_id</a>, <a href="#uint32_t">uint32_t</a> <a href="#*param">*param</a>)</small></h3>
|
|
This function returns the run status of a stored script as well
|
|
as the current values of parameters 0 to 9.
|
|
<br><br><code>script_id: >=0, as returned by <a href="#store_script">store_script</a>.<br> param: an array to hold the returned 10 parameters.<br></code><br><br>The function returns greater than or equal to 0 if OK,
|
|
otherwise PI_BAD_SCRIPT_ID.
|
|
<br><br>The run status may be
|
|
<br><br><code>PI_SCRIPT_INITING<br>PI_SCRIPT_HALTED<br>PI_SCRIPT_RUNNING<br>PI_SCRIPT_WAITING<br>PI_SCRIPT_FAILED<br></code><br><br>The current value of script parameters 0 to 9 are returned in param.
|
|
<h3><a name="stop_script"></a><a href="#int"><small>int</small></a> stop_script<small>(<a href="#unsigned">unsigned</a> <a href="#script_id">script_id</a>)</small></h3>
|
|
This function stops a running script.
|
|
<br><br><code>script_id: >=0, as returned by <a href="#store_script">store_script</a>.<br></code><br><br>The function returns 0 if OK, otherwise PI_BAD_SCRIPT_ID.
|
|
<h3><a name="delete_script"></a><a href="#int"><small>int</small></a> delete_script<small>(<a href="#unsigned">unsigned</a> <a href="#script_id">script_id</a>)</small></h3>
|
|
This function deletes a stored script.
|
|
<br><br><code>script_id: >=0, as returned by <a href="#store_script">store_script</a>.<br></code><br><br>The function returns 0 if OK, otherwise PI_BAD_SCRIPT_ID.
|
|
<h3><a name="bb_serial_read_open"></a><a href="#int"><small>int</small></a> bb_serial_read_open<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>, <a href="#unsigned">unsigned</a> <a href="#baud">baud</a>, <a href="#unsigned">unsigned</a> <a href="#data_bits">data_bits</a>)</small></h3>
|
|
This function opens a GPIO for bit bang reading of serial data.
|
|
<br><br><code>user_gpio: 0-31.<br> baud: 50-250000<br>data_bits: 1-32<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_USER_GPIO, PI_BAD_WAVE_BAUD,
|
|
or PI_GPIO_IN_USE.
|
|
<br><br>The serial data is returned in a cyclic buffer and is read using
|
|
bb_serial_read.
|
|
<br><br>It is the caller's responsibility to read data from the cyclic buffer
|
|
in a timely fashion.
|
|
<h3><a name="bb_serial_read"></a><a href="#int"><small>int</small></a> bb_serial_read<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>, <a href="#void">void</a> <a href="#*buf">*buf</a>, <a href="#size_t">size_t</a> <a href="#bufSize">bufSize</a>)</small></h3>
|
|
This function copies up to bufSize bytes of data read from the
|
|
bit bang serial cyclic buffer to the buffer starting at buf.
|
|
<br><br><code>user_gpio: 0-31, previously opened with <a href="#bb_serial_read_open">bb_serial_read_open</a>.<br> buf: an array to receive the read bytes.<br> bufSize: >=0<br></code><br><br>Returns the number of bytes copied if OK, otherwise PI_BAD_USER_GPIO
|
|
or PI_NOT_SERIAL_GPIO.
|
|
<br><br>The bytes returned for each character depend upon the number of
|
|
data bits <a href="#data_bits">data_bits</a> specified in the <a href="#bb_serial_read_open">bb_serial_read_open</a> command.
|
|
<br><br>For <a href="#data_bits">data_bits</a> 1-8 there will be one byte per character.<br>
|
|
For <a href="#data_bits">data_bits</a> 9-16 there will be two bytes per character.<br>
|
|
For <a href="#data_bits">data_bits</a> 17-32 there will be four bytes per character.
|
|
<h3><a name="bb_serial_read_close"></a><a href="#int"><small>int</small></a> bb_serial_read_close<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>)</small></h3>
|
|
This function closes a GPIO for bit bang reading of serial data.
|
|
<br><br><code>user_gpio: 0-31, previously opened with <a href="#bb_serial_read_open">bb_serial_read_open</a>.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_USER_GPIO, or PI_NOT_SERIAL_GPIO.
|
|
<h3><a name="bb_serial_invert"></a><a href="#int"><small>int</small></a> bb_serial_invert<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>, <a href="#unsigned">unsigned</a> <a href="#invert">invert</a>)</small></h3>
|
|
This function inverts serial logic for big bang serial reads.
|
|
<br><br><code>user_gpio: 0-31, previously opened with <a href="#bb_serial_read_open">bb_serial_read_open</a>.<br> invert: 0-1, 1 invert, 0 normal.<br></code><br><br>Returns 0 if OK, otherwise PI_NOT_SERIAL_GPIO or PI_BAD_SER_INVERT.
|
|
<h3><a name="i2c_open"></a><a href="#int"><small>int</small></a> i2c_open<small>(<a href="#unsigned">unsigned</a> <a href="#i2c_bus">i2c_bus</a>, <a href="#unsigned">unsigned</a> <a href="#i2c_addr">i2c_addr</a>, <a href="#unsigned">unsigned</a> <a href="#i2c_flags">i2c_flags</a>)</small></h3>
|
|
This returns a handle for the device at address i2c_addr on bus i2c_bus.
|
|
<br><br><code> i2c_bus: >=0.<br> i2c_addr: 0-0x7F.<br>i2c_flags: 0.<br></code><br><br>No flags are currently defined. This parameter should be set to zero.
|
|
<br><br>Physically buses 0 and 1 are available on the Pi. Higher numbered buses
|
|
will be available if a kernel supported bus multiplexor is being used.
|
|
<br><br>The GPIO used are given in the following table.
|
|
<br><br><table border="1" cellpadding="2" cellspacing="2"><tbody><tr><td></td><td>SDA</td><td>SCL</td></tr><tr><td>I2C 0</td><td>0</td><td>1</td></tr><tr><td>I2C 1</td><td>2</td><td>3</td></tr></tbody></table><br><br>Returns a handle (>=0) if OK, otherwise PI_BAD_I2C_BUS, PI_BAD_I2C_ADDR,
|
|
PI_BAD_FLAGS, PI_NO_HANDLE, or PI_I2C_OPEN_FAILED.
|
|
<br><br>For the SMBus commands the low level transactions are shown at the end
|
|
of the function description. The following abbreviations are used.
|
|
<br><br><code>S (1 bit) : Start bit<br>P (1 bit) : Stop bit<br>Rd/Wr (1 bit) : Read/Write bit. Rd equals 1, Wr equals 0.<br>A, NA (1 bit) : Accept and not accept bit.<br><br>Addr (7 bits): I2C 7 bit address.<br>Comm (8 bits): Command byte, a data byte which often selects a register.<br>Data (8 bits): A data byte.<br>Count (8 bits): A data byte containing the length of a block operation.<br><br>[..]: Data sent by the device.<br></code><h3><a name="i2c_close"></a><a href="#int"><small>int</small></a> i2c_close<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>)</small></h3>
|
|
This closes the I2C device associated with the handle.
|
|
<br><br><code>handle: >=0, as returned by a call to <a href="#i2c_open">i2c_open</a>.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_HANDLE.
|
|
<h3><a name="i2c_write_quick"></a><a href="#int"><small>int</small></a> i2c_write_quick<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#unsigned">unsigned</a> <a href="#bit">bit</a>)</small></h3>
|
|
This sends a single bit (in the Rd/Wr bit) to the device associated
|
|
with handle.
|
|
<br><br><code>handle: >=0, as returned by a call to <a href="#i2c_open">i2c_open</a>.<br> bit: 0-1, the value to write.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or
|
|
PI_I2C_WRITE_FAILED.
|
|
<br><br>Quick command. SMBus 2.0 5.5.1
|
|
<code>S Addr Rd/Wr [A] P<br></code><h3><a name="i2c_write_byte"></a><a href="#int"><small>int</small></a> i2c_write_byte<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#unsigned">unsigned</a> <a href="#bVal">bVal</a>)</small></h3>
|
|
This sends a single byte to the device associated with handle.
|
|
<br><br><code>handle: >=0, as returned by a call to <a href="#i2c_open">i2c_open</a>.<br> bVal: 0-0xFF, the value to write.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or
|
|
PI_I2C_WRITE_FAILED.
|
|
<br><br>Send byte. SMBus 2.0 5.5.2
|
|
<code>S Addr Wr [A] Data [A] P<br></code><h3><a name="i2c_read_byte"></a><a href="#int"><small>int</small></a> i2c_read_byte<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>)</small></h3>
|
|
This reads a single byte from the device associated with handle.
|
|
<br><br><code>handle: >=0, as returned by a call to <a href="#i2c_open">i2c_open</a>.<br></code><br><br>Returns the byte read (>=0) if OK, otherwise PI_BAD_HANDLE,
|
|
or PI_I2C_READ_FAILED.
|
|
<br><br>Receive byte. SMBus 2.0 5.5.3
|
|
<code>S Addr Rd [A] [Data] NA P<br></code><h3><a name="i2c_write_byte_data"></a><a href="#int"><small>int</small></a> i2c_write_byte_data<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#unsigned">unsigned</a> <a href="#i2c_reg">i2c_reg</a>, <a href="#unsigned">unsigned</a> <a href="#bVal">bVal</a>)</small></h3>
|
|
This writes a single byte to the specified register of the device
|
|
associated with handle.
|
|
<br><br><code> handle: >=0, as returned by a call to <a href="#i2c_open">i2c_open</a>.<br>i2c_reg: 0-255, the register to write.<br> bVal: 0-0xFF, the value to write.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or
|
|
PI_I2C_WRITE_FAILED.
|
|
<br><br>Write byte. SMBus 2.0 5.5.4
|
|
<code>S Addr Wr [A] Comm [A] Data [A] P<br></code><h3><a name="i2c_write_word_data"></a><a href="#int"><small>int</small></a> i2c_write_word_data<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#unsigned">unsigned</a> <a href="#i2c_reg">i2c_reg</a>, <a href="#unsigned">unsigned</a> <a href="#wVal">wVal</a>)</small></h3>
|
|
This writes a single 16 bit word to the specified register of the device
|
|
associated with handle.
|
|
<br><br><code> handle: >=0, as returned by a call to <a href="#i2c_open">i2c_open</a>.<br>i2c_reg: 0-255, the register to write.<br> wVal: 0-0xFFFF, the value to write.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or
|
|
PI_I2C_WRITE_FAILED.
|
|
<br><br>Write word. SMBus 2.0 5.5.4
|
|
<code>S Addr Wr [A] Comm [A] DataLow [A] DataHigh [A] P<br></code><h3><a name="i2c_read_byte_data"></a><a href="#int"><small>int</small></a> i2c_read_byte_data<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#unsigned">unsigned</a> <a href="#i2c_reg">i2c_reg</a>)</small></h3>
|
|
This reads a single byte from the specified register of the device
|
|
associated with handle.
|
|
<br><br><code> handle: >=0, as returned by a call to <a href="#i2c_open">i2c_open</a>.<br>i2c_reg: 0-255, the register to read.<br></code><br><br>Returns the byte read (>=0) if OK, otherwise PI_BAD_HANDLE,
|
|
PI_BAD_PARAM, or PI_I2C_READ_FAILED.
|
|
<br><br>Read byte. SMBus 2.0 5.5.5
|
|
<code>S Addr Wr [A] Comm [A] S Addr Rd [A] [Data] NA P<br></code><h3><a name="i2c_read_word_data"></a><a href="#int"><small>int</small></a> i2c_read_word_data<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#unsigned">unsigned</a> <a href="#i2c_reg">i2c_reg</a>)</small></h3>
|
|
This reads a single 16 bit word from the specified register of the device
|
|
associated with handle.
|
|
<br><br><code> handle: >=0, as returned by a call to <a href="#i2c_open">i2c_open</a>.<br>i2c_reg: 0-255, the register to read.<br></code><br><br>Returns the word read (>=0) if OK, otherwise PI_BAD_HANDLE,
|
|
PI_BAD_PARAM, or PI_I2C_READ_FAILED.
|
|
<br><br>Read word. SMBus 2.0 5.5.5
|
|
<code>S Addr Wr [A] Comm [A] S Addr Rd [A] [DataLow] A [DataHigh] NA P<br></code><h3><a name="i2c_process_call"></a><a href="#int"><small>int</small></a> i2c_process_call<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#unsigned">unsigned</a> <a href="#i2c_reg">i2c_reg</a>, <a href="#unsigned">unsigned</a> <a href="#wVal">wVal</a>)</small></h3>
|
|
This writes 16 bits of data to the specified register of the device
|
|
associated with handle and and reads 16 bits of data in return.
|
|
<br><br><code> handle: >=0, as returned by a call to <a href="#i2c_open">i2c_open</a>.<br>i2c_reg: 0-255, the register to write/read.<br> wVal: 0-0xFFFF, the value to write.<br></code><br><br>Returns the word read (>=0) if OK, otherwise PI_BAD_HANDLE,
|
|
PI_BAD_PARAM, or PI_I2C_READ_FAILED.
|
|
<br><br>Process call. SMBus 2.0 5.5.6
|
|
<code>S Addr Wr [A] Comm [A] DataLow [A] DataHigh [A]<br> S Addr Rd [A] [DataLow] A [DataHigh] NA P<br></code><h3><a name="i2c_write_block_data"></a><a href="#int"><small>int</small></a> i2c_write_block_data<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#unsigned">unsigned</a> <a href="#i2c_reg">i2c_reg</a>, <a href="#char">char</a> <a href="#*buf">*buf</a>, <a href="#unsigned">unsigned</a> <a href="#count">count</a>)</small></h3>
|
|
This writes up to 32 bytes to the specified register of the device
|
|
associated with handle.
|
|
<br><br><code> handle: >=0, as returned by a call to <a href="#i2c_open">i2c_open</a>.<br>i2c_reg: 0-255, the register to write.<br> buf: an array with the data to send.<br> count: 1-32, the number of bytes to write.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or
|
|
PI_I2C_WRITE_FAILED.
|
|
<br><br>Block write. SMBus 2.0 5.5.7
|
|
<code>S Addr Wr [A] Comm [A] Count [A] Data [A] Data [A] ... [A] Data [A] P<br></code><h3><a name="i2c_read_block_data"></a><a href="#int"><small>int</small></a> i2c_read_block_data<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#unsigned">unsigned</a> <a href="#i2c_reg">i2c_reg</a>, <a href="#char">char</a> <a href="#*buf">*buf</a>)</small></h3>
|
|
This reads a block of up to 32 bytes from the specified register of
|
|
the device associated with handle.
|
|
<br><br><code> handle: >=0, as returned by a call to <a href="#i2c_open">i2c_open</a>.<br>i2c_reg: 0-255, the register to read.<br> buf: an array to receive the read data.<br></code><br><br>The amount of returned data is set by the device.
|
|
<br><br>Returns the number of bytes read (>=0) if OK, otherwise PI_BAD_HANDLE,
|
|
PI_BAD_PARAM, or PI_I2C_READ_FAILED.
|
|
<br><br>Block read. SMBus 2.0 5.5.7
|
|
<code>S Addr Wr [A] Comm [A]<br> S Addr Rd [A] [Count] A [Data] A [Data] A ... A [Data] NA P<br></code><h3><a name="i2c_block_process_call"></a><a href="#int"><small>int</small></a> i2c_block_process_call<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#unsigned">unsigned</a> <a href="#i2c_reg">i2c_reg</a>, <a href="#char">char</a> <a href="#*buf">*buf</a>, <a href="#unsigned">unsigned</a> <a href="#count">count</a>)</small></h3>
|
|
This writes data bytes to the specified register of the device
|
|
associated with handle and reads a device specified number
|
|
of bytes of data in return.
|
|
<br><br><code> handle: >=0, as returned by a call to <a href="#i2c_open">i2c_open</a>.<br>i2c_reg: 0-255, the register to write/read.<br> buf: an array with the data to send and to receive the read data.<br> count: 1-32, the number of bytes to write.<br></code><br><br>Returns the number of bytes read (>=0) if OK, otherwise PI_BAD_HANDLE,
|
|
PI_BAD_PARAM, or PI_I2C_READ_FAILED.
|
|
<br><br>The smbus 2.0 documentation states that a minimum of 1 byte may be
|
|
sent and a minimum of 1 byte may be received. The total number of
|
|
bytes sent/received must be 32 or less.
|
|
<br><br>Block write-block read. SMBus 2.0 5.5.8
|
|
<code>S Addr Wr [A] Comm [A] Count [A] Data [A] ...<br> S Addr Rd [A] [Count] A [Data] ... A P<br></code><h3><a name="i2c_read_i2c_block_data"></a><a href="#int"><small>int</small></a> i2c_read_i2c_block_data<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#unsigned">unsigned</a> <a href="#i2c_reg">i2c_reg</a>, <a href="#char">char</a> <a href="#*buf">*buf</a>, <a href="#unsigned">unsigned</a> <a href="#count">count</a>)</small></h3>
|
|
This reads count bytes from the specified register of the device
|
|
associated with handle . The count may be 1-32.
|
|
<br><br><code> handle: >=0, as returned by a call to <a href="#i2c_open">i2c_open</a>.<br>i2c_reg: 0-255, the register to read.<br> buf: an array to receive the read data.<br> count: 1-32, the number of bytes to read.<br></code><br><br>Returns the number of bytes read (>0) if OK, otherwise PI_BAD_HANDLE,
|
|
PI_BAD_PARAM, or PI_I2C_READ_FAILED.
|
|
<br><br><code>S Addr Wr [A] Comm [A]<br> S Addr Rd [A] [Data] A [Data] A ... A [Data] NA P<br></code><h3><a name="i2c_write_i2c_block_data"></a><a href="#int"><small>int</small></a> i2c_write_i2c_block_data<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#unsigned">unsigned</a> <a href="#i2c_reg">i2c_reg</a>, <a href="#char">char</a> <a href="#*buf">*buf</a>, <a href="#unsigned">unsigned</a> <a href="#count">count</a>)</small></h3>
|
|
This writes 1 to 32 bytes to the specified register of the device
|
|
associated with handle.
|
|
<br><br><code> handle: >=0, as returned by a call to <a href="#i2c_open">i2c_open</a>.<br>i2c_reg: 0-255, the register to write.<br> buf: the data to write.<br> count: 1-32, the number of bytes to write.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or
|
|
PI_I2C_WRITE_FAILED.
|
|
<br><br><code>S Addr Wr [A] Comm [A] Data [A] Data [A] ... [A] Data [A] P<br></code><h3><a name="i2c_read_device"></a><a href="#int"><small>int</small></a> i2c_read_device<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#char">char</a> <a href="#*buf">*buf</a>, <a href="#unsigned">unsigned</a> <a href="#count">count</a>)</small></h3>
|
|
This reads count bytes from the raw device into buf.
|
|
<br><br><code>handle: >=0, as returned by a call to <a href="#i2c_open">i2c_open</a>.<br> buf: an array to receive the read data bytes.<br> count: >0, the number of bytes to read.<br></code><br><br>Returns count (>0) if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or
|
|
PI_I2C_READ_FAILED.
|
|
<h3><a name="i2c_write_device"></a><a href="#int"><small>int</small></a> i2c_write_device<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#char">char</a> <a href="#*buf">*buf</a>, <a href="#unsigned">unsigned</a> <a href="#count">count</a>)</small></h3>
|
|
This writes count bytes from buf to the raw device.
|
|
<br><br><code>handle: >=0, as returned by a call to <a href="#i2c_open">i2c_open</a>.<br> buf: an array containing the data bytes to write.<br> count: >0, the number of bytes to write.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or
|
|
PI_I2C_WRITE_FAILED.
|
|
<h3><a name="i2c_zip"></a><a href="#int"><small>int</small></a> i2c_zip<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#char">char</a> <a href="#*inBuf">*inBuf</a>, <a href="#unsigned">unsigned</a> <a href="#inLen">inLen</a>, <a href="#char">char</a> <a href="#*outBuf">*outBuf</a>, <a href="#unsigned">unsigned</a> <a href="#outLen">outLen</a>)</small></h3>
|
|
This function executes a sequence of I2C operations. The
|
|
operations to be performed are specified by the contents of inBuf
|
|
which contains the concatenated command codes and associated data.
|
|
<br><br><code>handle: >=0, as returned by a call to <a href="#i2cOpen">i2cOpen</a><br> inBuf: pointer to the concatenated I2C commands, see below<br> inLen: size of command buffer<br>outBuf: pointer to buffer to hold returned data<br>outLen: size of output buffer<br></code><br><br>Returns >= 0 if OK (the number of bytes read), otherwise
|
|
PI_BAD_HANDLE, PI_BAD_POINTER, PI_BAD_I2C_CMD, PI_BAD_I2C_RLEN.
|
|
PI_BAD_I2C_WLEN, or PI_BAD_I2C_SEG.
|
|
<br><br>The following command codes are supported:
|
|
<br><br><table border="1" cellpadding="2" cellspacing="2"><tbody><tr><td>Name</td><td>Cmd & Data</td><td>Meaning</td></tr><tr><td>End</td><td>0</td><td>No more commands</td></tr><tr><td>Escape</td><td>1</td><td>Next P is two bytes</td></tr><tr><td>On</td><td>2</td><td>Switch combined flag on</td></tr><tr><td>Off</td><td>3</td><td>Switch combined flag off</td></tr><tr><td>Address</td><td>4 P</td><td>Set I2C address to P</td></tr><tr><td>Flags</td><td>5 lsb msb</td><td>Set I2C flags to lsb + (msb << 8)</td></tr><tr><td>Read</td><td>6 P</td><td>Read P bytes of data</td></tr><tr><td>Write</td><td>7 P ...</td><td>Write P bytes of data</td></tr></tbody></table><br><br>The address, read, and write commands take a parameter P.
|
|
Normally P is one byte (0-255). If the command is preceded by
|
|
the Escape command then P is two bytes (0-65535, least significant
|
|
byte first).
|
|
<br><br>The address defaults to that associated with the handle.
|
|
The flags default to 0. The address and flags maintain their
|
|
previous value until updated.
|
|
<br><br>The returned I2C data is stored in consecutive locations of outBuf.
|
|
<br><br><b><small>Example</small></b><br><br><code>Set address 0x53, write 0x32, read 6 bytes<br>Set address 0x1E, write 0x03, read 6 bytes<br>Set address 0x68, write 0x1B, read 8 bytes<br>End<br><br>0x04 0x53 0x07 0x01 0x32 0x06 0x06<br>0x04 0x1E 0x07 0x01 0x03 0x06 0x06<br>0x04 0x68 0x07 0x01 0x1B 0x06 0x08<br>0x00<br></code><h3><a name="bb_i2c_open"></a><a href="#int"><small>int</small></a> bb_i2c_open<small>(<a href="#unsigned">unsigned</a> <a href="#SDA">SDA</a>, <a href="#unsigned">unsigned</a> <a href="#SCL">SCL</a>, <a href="#unsigned">unsigned</a> <a href="#baud">baud</a>)</small></h3>
|
|
This function selects a pair of GPIO for bit banging I2C at a
|
|
specified baud rate.
|
|
<br><br>Bit banging I2C allows for certain operations which are not possible
|
|
with the standard I2C driver.
|
|
<br><br>o baud rates as low as 50<br>
|
|
o repeated starts<br>
|
|
o clock stretching<br>
|
|
o I2C on any pair of spare GPIO
|
|
<br><br><code> SDA: 0-31<br> SCL: 0-31<br>baud: 50-500000<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_USER_GPIO, PI_BAD_I2C_BAUD, or
|
|
PI_GPIO_IN_USE.
|
|
<br><br>NOTE:
|
|
<br><br>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.
|
|
<h3><a name="bb_i2c_close"></a><a href="#int"><small>int</small></a> bb_i2c_close<small>(<a href="#unsigned">unsigned</a> <a href="#SDA">SDA</a>)</small></h3>
|
|
This function stops bit banging I2C on a pair of GPIO previously
|
|
opened with <a href="#bb_i2c_open">bb_i2c_open</a>.
|
|
<br><br><code>SDA: 0-31, the SDA GPIO used in a prior call to <a href="#bb_i2c_open">bb_i2c_open</a><br></code><br><br>Returns 0 if OK, otherwise PI_BAD_USER_GPIO, or PI_NOT_I2C_GPIO.
|
|
<h3><a name="bb_i2c_zip"></a><a href="#int"><small>int</small></a> bb_i2c_zip<small>(<a href="#unsigned">unsigned</a> <a href="#SDA">SDA</a>, <a href="#char">char</a> <a href="#*inBuf">*inBuf</a>, <a href="#unsigned">unsigned</a> <a href="#inLen">inLen</a>, <a href="#char">char</a> <a href="#*outBuf">*outBuf</a>, <a href="#unsigned">unsigned</a> <a href="#outLen">outLen</a>)</small></h3>
|
|
This function executes a sequence of bit banged I2C operations. The
|
|
operations to be performed are specified by the contents of inBuf
|
|
which contains the concatenated command codes and associated data.
|
|
<br><br><code> SDA: 0-31 (as used in a prior call to <a href="#bb_i2c_open">bb_i2c_open</a>)<br> inBuf: pointer to the concatenated I2C commands, see below<br> inLen: size of command buffer<br>outBuf: pointer to buffer to hold returned data<br>outLen: size of output buffer<br></code><br><br>Returns >= 0 if OK (the number of bytes read), otherwise
|
|
PI_BAD_USER_GPIO, PI_NOT_I2C_GPIO, PI_BAD_POINTER,
|
|
PI_BAD_I2C_CMD, PI_BAD_I2C_RLEN, PI_BAD_I2C_WLEN,
|
|
PI_I2C_READ_FAILED, or PI_I2C_WRITE_FAILED.
|
|
<br><br>The following command codes are supported:
|
|
<br><br><table border="1" cellpadding="2" cellspacing="2"><tbody><tr><td>Name</td><td>Cmd & Data</td><td>Meaning</td></tr><tr><td>End</td><td>0</td><td>No more commands</td></tr><tr><td>Escape</td><td>1</td><td>Next P is two bytes</td></tr><tr><td>Start</td><td>2</td><td>Start condition</td></tr><tr><td>Stop</td><td>3</td><td>Stop condition</td></tr><tr><td>Address</td><td>4 P</td><td>Set I2C address to P</td></tr><tr><td>Flags</td><td>5 lsb msb</td><td>Set I2C flags to lsb + (msb << 8)</td></tr><tr><td>Read</td><td>6 P</td><td>Read P bytes of data</td></tr><tr><td>Write</td><td>7 P ...</td><td>Write P bytes of data</td></tr></tbody></table><br><br>The address, read, and write commands take a parameter P.
|
|
Normally P is one byte (0-255). If the command is preceded by
|
|
the Escape command then P is two bytes (0-65535, least significant
|
|
byte first).
|
|
<br><br>The address and flags default to 0. The address and flags maintain
|
|
their previous value until updated.
|
|
<br><br>No flags are currently defined.
|
|
<br><br>The returned I2C data is stored in consecutive locations of outBuf.
|
|
<br><br><b><small>Example</small></b><br><br><code>Set address 0x53<br>start, write 0x32, (re)start, read 6 bytes, stop<br>Set address 0x1E<br>start, write 0x03, (re)start, read 6 bytes, stop<br>Set address 0x68<br>start, write 0x1B, (re)start, read 8 bytes, stop<br>End<br><br>0x04 0x53<br>0x02 0x07 0x01 0x32 0x02 0x06 0x06 0x03<br><br>0x04 0x1E<br>0x02 0x07 0x01 0x03 0x02 0x06 0x06 0x03<br><br>0x04 0x68<br>0x02 0x07 0x01 0x1B 0x02 0x06 0x08 0x03<br><br>0x00<br></code><h3><a name="spi_open"></a><a href="#int"><small>int</small></a> spi_open<small>(<a href="#unsigned">unsigned</a> <a href="#spi_channel">spi_channel</a>, <a href="#unsigned">unsigned</a> <a href="#baud">baud</a>, <a href="#unsigned">unsigned</a> <a href="#spi_flags">spi_flags</a>)</small></h3>
|
|
This function returns a handle for the SPI device on the channel.
|
|
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,
|
|
active low chip select.
|
|
<br><br>The Pi has two SPI peripherals: main and auxiliary.
|
|
<br><br>The main SPI has two chip selects (channels), the auxiliary has
|
|
three.
|
|
<br><br>The auxiliary SPI is available on all models but the A and B.
|
|
<br><br>The GPIO used are given in the following table.
|
|
<br><br><table border="1" cellpadding="2" cellspacing="2"><tbody><tr><td></td><td>MISO</td><td>MOSI</td><td>SCLK</td><td>CE0</td><td>CE1</td><td>CE2</td></tr><tr><td>Main SPI</td><td>9</td><td>10</td><td>11</td><td>8</td><td>7</td><td>-</td></tr><tr><td>Aux SPI</td><td>19</td><td>20</td><td>21</td><td>18</td><td>17</td><td>16</td></tr></tbody></table><br><br><code>spi_channel: 0-1 (0-2 for the auxiliary SPI).<br> baud: 32K-125M (values above 30M are unlikely to work).<br> spi_flags: see below.<br></code><br><br>Returns a handle (>=0) if OK, otherwise PI_BAD_SPI_CHANNEL,
|
|
PI_BAD_SPI_SPEED, PI_BAD_FLAGS, PI_NO_AUX_SPI, or PI_SPI_OPEN_FAILED.
|
|
<br><br>spi_flags consists of the least significant 22 bits.
|
|
<br><br><code>21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0<br> b b b b b b R T n n n n W A u2 u1 u0 p2 p1 p0 m m<br></code><br><br>mm defines the SPI mode.
|
|
<br><br>Warning: modes 1 and 3 do not appear to work on the auxiliary SPI.
|
|
<br><br><code>Mode POL PHA<br> 0 0 0<br> 1 0 1<br> 2 1 0<br> 3 1 1<br></code><br><br>px is 0 if CEx is active low (default) and 1 for active high.
|
|
<br><br>ux is 0 if the CEx GPIO is reserved for SPI (default) and 1 otherwise.
|
|
<br><br>A is 0 for the main SPI, 1 for the auxiliary SPI.
|
|
<br><br>W is 0 if the device is not 3-wire, 1 if the device is 3-wire. Main
|
|
SPI only.
|
|
<br><br>nnnn defines the number of bytes (0-15) to write before switching
|
|
the MOSI line to MISO to read data. This field is ignored
|
|
if W is not set. Main SPI only.
|
|
<br><br>T is 1 if the least significant bit is transmitted on MOSI first, the
|
|
default (0) shifts the most significant bit out first. Auxiliary SPI
|
|
only.
|
|
<br><br>R is 1 if the least significant bit is received on MISO first, the
|
|
default (0) receives the most significant bit first. Auxiliary SPI
|
|
only.
|
|
<br><br>bbbbbb defines the word size in bits (0-32). The default (0)
|
|
sets 8 bits per word. Auxiliary SPI only.
|
|
<br><br>The <a href="#spi_read">spi_read</a>, <a href="#spi_write">spi_write</a>, and <a href="#spi_xfer">spi_xfer</a> 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 word.<br>
|
|
For bits 9-16 there will be two bytes per word.<br>
|
|
For bits 17-32 there will be four bytes per word.
|
|
<br><br>Multi-byte transfers are made in least significant byte first order.
|
|
<br><br>E.g. to transfer 32 11-bit words buf should contain 64 bytes
|
|
and count should be 64.
|
|
<br><br>E.g. to transfer the 14 bit value 0x1ABC send the bytes 0xBC followed
|
|
by 0x1A.
|
|
<br><br>The other bits in flags should be set to zero.
|
|
<h3><a name="spi_close"></a><a href="#int"><small>int</small></a> spi_close<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>)</small></h3>
|
|
This functions closes the SPI device identified by the handle.
|
|
<br><br><code>handle: >=0, as returned by a call to <a href="#spi_open">spi_open</a>.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_HANDLE.
|
|
<h3><a name="spi_read"></a><a href="#int"><small>int</small></a> spi_read<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#char">char</a> <a href="#*buf">*buf</a>, <a href="#unsigned">unsigned</a> <a href="#count">count</a>)</small></h3>
|
|
This function reads count bytes of data from the SPI
|
|
device associated with the handle.
|
|
<br><br><code>handle: >=0, as returned by a call to <a href="#spi_open">spi_open</a>.<br> buf: an array to receive the read data bytes.<br> count: the number of bytes to read.<br></code><br><br>Returns the number of bytes transferred if OK, otherwise
|
|
PI_BAD_HANDLE, PI_BAD_SPI_COUNT, or PI_SPI_XFER_FAILED.
|
|
<h3><a name="spi_write"></a><a href="#int"><small>int</small></a> spi_write<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#char">char</a> <a href="#*buf">*buf</a>, <a href="#unsigned">unsigned</a> <a href="#count">count</a>)</small></h3>
|
|
This function writes count bytes of data from buf to the SPI
|
|
device associated with the handle.
|
|
<br><br><code>handle: >=0, as returned by a call to <a href="#spi_open">spi_open</a>.<br> buf: the data bytes to write.<br> count: the number of bytes to write.<br></code><br><br>Returns the number of bytes transferred if OK, otherwise
|
|
PI_BAD_HANDLE, PI_BAD_SPI_COUNT, or PI_SPI_XFER_FAILED.
|
|
<h3><a name="spi_xfer"></a><a href="#int"><small>int</small></a> spi_xfer<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#char">char</a> <a href="#*txBuf">*txBuf</a>, <a href="#char">char</a> <a href="#*rxBuf">*rxBuf</a>, <a href="#unsigned">unsigned</a> <a href="#count">count</a>)</small></h3>
|
|
This function transfers count bytes of data from txBuf to the SPI
|
|
device associated with the handle. Simultaneously count bytes of
|
|
data are read from the device and placed in rxBuf.
|
|
<br><br><code>handle: >=0, as returned by a call to <a href="#spi_open">spi_open</a>.<br> txBuf: the data bytes to write.<br> rxBuf: the received data bytes.<br> count: the number of bytes to transfer.<br></code><br><br>Returns the number of bytes transferred if OK, otherwise
|
|
PI_BAD_HANDLE, PI_BAD_SPI_COUNT, or PI_SPI_XFER_FAILED.
|
|
<h3><a name="serial_open"></a><a href="#int"><small>int</small></a> serial_open<small>(<a href="#char">char</a> <a href="#*ser_tty">*ser_tty</a>, <a href="#unsigned">unsigned</a> <a href="#baud">baud</a>, <a href="#unsigned">unsigned</a> <a href="#ser_flags">ser_flags</a>)</small></h3>
|
|
This function opens a serial device at a specified baud rate
|
|
with specified flags. The device name must start with
|
|
/dev/tty or /dev/serial.
|
|
<br><br><code> ser_tty: the serial device to open.<br> baud: the baud rate in bits per second, see below.<br>ser_flags: 0.<br></code><br><br>Returns a handle (>=0) if OK, otherwise PI_NO_HANDLE, or
|
|
PI_SER_OPEN_FAILED.
|
|
<br><br>The baud rate must be one of 50, 75, 110, 134, 150,
|
|
200, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200,
|
|
38400, 57600, 115200, or 230400.
|
|
<br><br>No flags are currently defined. This parameter should be set to zero.
|
|
<h3><a name="serial_close"></a><a href="#int"><small>int</small></a> serial_close<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>)</small></h3>
|
|
This function closes the serial device associated with handle.
|
|
<br><br><code>handle: >=0, as returned by a call to <a href="#serial_open">serial_open</a>.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_HANDLE.
|
|
<h3><a name="serial_write_byte"></a><a href="#int"><small>int</small></a> serial_write_byte<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#unsigned">unsigned</a> <a href="#bVal">bVal</a>)</small></h3>
|
|
This function writes bVal to the serial port associated with handle.
|
|
<br><br><code>handle: >=0, as returned by a call to <a href="#serial_open">serial_open</a>.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or
|
|
PI_SER_WRITE_FAILED.
|
|
<h3><a name="serial_read_byte"></a><a href="#int"><small>int</small></a> serial_read_byte<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>)</small></h3>
|
|
This function reads a byte from the serial port associated with handle.
|
|
<br><br><code>handle: >=0, as returned by a call to <a href="#serial_open">serial_open</a>.<br></code><br><br>Returns the read byte (>=0) if OK, otherwise PI_BAD_HANDLE,
|
|
PI_SER_READ_NO_DATA, or PI_SER_READ_FAILED.
|
|
<br><br>If no data is ready PI_SER_READ_NO_DATA is returned.
|
|
<h3><a name="serial_write"></a><a href="#int"><small>int</small></a> serial_write<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#char">char</a> <a href="#*buf">*buf</a>, <a href="#unsigned">unsigned</a> <a href="#count">count</a>)</small></h3>
|
|
This function writes count bytes from buf to the the serial port
|
|
associated with handle.
|
|
<br><br><code>handle: >=0, as returned by a call to <a href="#serial_open">serial_open</a>.<br> buf: the array of bytes to write.<br> count: the number of bytes to write.<br></code><br><br>Returns 0 if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or
|
|
PI_SER_WRITE_FAILED.
|
|
<h3><a name="serial_read"></a><a href="#int"><small>int</small></a> serial_read<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>, <a href="#char">char</a> <a href="#*buf">*buf</a>, <a href="#unsigned">unsigned</a> <a href="#count">count</a>)</small></h3>
|
|
This function reads up to count bytes from the the serial port
|
|
associated with handle and writes them to buf.
|
|
<br><br><code>handle: >=0, as returned by a call to <a href="#serial_open">serial_open</a>.<br> buf: an array to receive the read data.<br> count: the maximum number of bytes to read.<br></code><br><br>Returns the number of bytes read (>0) if OK, otherwise PI_BAD_HANDLE,
|
|
PI_BAD_PARAM, PI_SER_READ_NO_DATA, or PI_SER_WRITE_FAILED.
|
|
<br><br>If no data is ready zero is returned.
|
|
<h3><a name="serial_data_available"></a><a href="#int"><small>int</small></a> serial_data_available<small>(<a href="#unsigned">unsigned</a> <a href="#handle">handle</a>)</small></h3>
|
|
Returns the number of bytes available to be read from the
|
|
device associated with handle.
|
|
<br><br><code>handle: >=0, as returned by a call to <a href="#serial_open">serial_open</a>.<br></code><br><br>Returns the number of bytes of data available (>=0) if OK,
|
|
otherwise PI_BAD_HANDLE.
|
|
<h3><a name="custom_1"></a><a href="#int"><small>int</small></a> custom_1<small>(<a href="#unsigned">unsigned</a> <a href="#arg1">arg1</a>, <a href="#unsigned">unsigned</a> <a href="#arg2">arg2</a>, <a href="#char">char</a> <a href="#*argx">*argx</a>, <a href="#unsigned">unsigned</a> <a href="#argc">argc</a>)</small></h3>
|
|
This function is available for user customisation.
|
|
<br><br>It returns a single integer value.
|
|
<br><br><code>arg1: >=0<br>arg2: >=0<br>argx: extra (byte) arguments<br>argc: number of extra arguments<br></code><br><br>Returns >= 0 if OK, less than 0 indicates a user defined error.
|
|
<h3><a name="custom_2"></a><a href="#int"><small>int</small></a> custom_2<small>(<a href="#unsigned">unsigned</a> <a href="#arg1">arg1</a>, <a href="#char">char</a> <a href="#*argx">*argx</a>, <a href="#unsigned">unsigned</a> <a href="#argc">argc</a>, <a href="#char">char</a> <a href="#*retBuf">*retBuf</a>, <a href="#unsigned">unsigned</a> <a href="#retMax">retMax</a>)</small></h3>
|
|
This function is available for user customisation.
|
|
<br><br>It differs from custom_1 in that it returns an array of bytes
|
|
rather than just an integer.
|
|
<br><br>The return value is an integer indicating the number of returned bytes.
|
|
<code> arg1: >=0<br> argc: extra (byte) arguments<br> count: number of extra arguments<br>retBuf: buffer for returned data<br>retMax: maximum number of bytes to return<br></code><br><br>Returns >= 0 if OK, less than 0 indicates a user defined error.
|
|
<br><br>Note, the number of returned bytes will be retMax or less.
|
|
<h3><a name="callback"></a><a href="#int"><small>int</small></a> callback<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>, <a href="#unsigned">unsigned</a> <a href="#edge">edge</a>, <a href="#CBFunc_t">CBFunc_t</a> <a href="#f">f</a>)</small></h3>
|
|
This function initialises a new callback.
|
|
<br><br><code>user_gpio: 0-31.<br> edge: RISING_EDGE, FALLING_EDGE, or EITHER_EDGE.<br> f: the callback function.<br></code><br><br>The function returns a callback id if OK, otherwise pigif_bad_malloc,
|
|
pigif_duplicate_callback, or pigif_bad_callback.
|
|
<br><br>The callback is called with the GPIO, edge, and tick, whenever the
|
|
GPIO has the identified edge.
|
|
<br><br><code>Parameter Value Meaning<br><br>GPIO 0-31 The GPIO which has changed state<br><br>edge 0-2 0 = change to low (a falling edge)<br> 1 = change to high (a rising edge)<br> 2 = no level change (a watchdog timeout)<br><br>tick 32 bit The number of microseconds since boot<br> WARNING: this wraps around from<br> 4294967295 to 0 roughly every 72 minutes<br></code><h3><a name="callback_ex"></a><a href="#int"><small>int</small></a> callback_ex<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>, <a href="#unsigned">unsigned</a> <a href="#edge">edge</a>, <a href="#CBFuncEx_t">CBFuncEx_t</a> <a href="#f">f</a>, <a href="#void">void</a> <a href="#*userdata">*userdata</a>)</small></h3>
|
|
This function initialises a new callback.
|
|
<br><br><code>user_gpio: 0-31.<br> edge: RISING_EDGE, FALLING_EDGE, or EITHER_EDGE.<br> f: the callback function.<br> userdata: a pointer to arbitrary user data.<br></code><br><br>The function returns a callback id if OK, otherwise pigif_bad_malloc,
|
|
pigif_duplicate_callback, or pigif_bad_callback.
|
|
<br><br>The callback is called with the GPIO, edge, tick, and user, whenever
|
|
the GPIO has the identified edge.
|
|
<br><br><code>Parameter Value Meaning<br><br>GPIO 0-31 The GPIO which has changed state<br><br>edge 0-2 0 = change to low (a falling edge)<br> 1 = change to high (a rising edge)<br> 2 = no level change (a watchdog timeout)<br><br>tick 32 bit The number of microseconds since boot<br> WARNING: this wraps around from<br> 4294967295 to 0 roughly every 72 minutes<br><br>userdata pointer Pointer to an arbitrary object<br></code><h3><a name="callback_cancel"></a><a href="#int"><small>int</small></a> callback_cancel<small>(<a href="#unsigned">unsigned</a> <a href="#callback_id">callback_id</a>)</small></h3>
|
|
This function cancels a callback identified by its id.
|
|
<br><br><code>callback_id: >=0, as returned by a call to <a href="#callback">callback</a> or <a href="#callback_ex">callback_ex</a>.<br></code><br><br>The function returns 0 if OK, otherwise pigif_callback_not_found.
|
|
<h3><a name="wait_for_edge"></a><a href="#int"><small>int</small></a> wait_for_edge<small>(<a href="#unsigned">unsigned</a> <a href="#user_gpio">user_gpio</a>, <a href="#unsigned">unsigned</a> <a href="#edge">edge</a>, <a href="#double">double</a> <a href="#timeout">timeout</a>)</small></h3>
|
|
This function waits for edge on the GPIO for up to timeout
|
|
seconds.
|
|
<br><br><code>user_gpio: 0-31.<br> edge: RISING_EDGE, FALLING_EDGE, or EITHER_EDGE.<br> timeout: >=0.<br></code><br><br>The function returns 1 if the edge occurred, otherwise 0.
|
|
<br><br>The function returns when the edge occurs or after the timeout.
|
|
<h2>PARAMETERS</h2><h3><a name="active">active</a>: 0-1000000</h3>
|
|
The number of microseconds level changes are reported for once
|
|
a noise filter has been triggered (by <a href="#steady">steady</a> microseconds of
|
|
a stable level).
|
|
<h3><a name="*addrStr">*addrStr</a></h3>
|
|
A string specifying the host or IP address of the Pi running
|
|
the pigpio daemon. It may be NULL in which case localhost
|
|
is used unless overridden by the PIGPIO_ADDR environment
|
|
variable.
|
|
<h3><a name="arg1">arg1</a></h3>
|
|
An unsigned argument passed to a user customised function. Its
|
|
meaning is defined by the customiser.
|
|
<h3><a name="arg2">arg2</a></h3>
|
|
An unsigned argument passed to a user customised function. Its
|
|
meaning is defined by the customiser.
|
|
<h3><a name="argc">argc</a></h3>
|
|
The count of bytes passed to a user customised function.
|
|
<h3><a name="*argx">*argx</a></h3>
|
|
A pointer to an array of bytes passed to a user customised function.
|
|
Its meaning and content is defined by the customiser.
|
|
<h3><a name="baud">baud</a></h3>
|
|
The speed of serial communication (I2C, SPI, serial link, waves) in
|
|
bits per second.
|
|
<h3><a name="bit">bit</a></h3>
|
|
A value of 0 or 1.
|
|
<h3><a name="bits">bits</a></h3>
|
|
A value used to select GPIO. If bit n of bits is set then GPIO n is
|
|
selected.
|
|
<br><br>A convenient way to set bit n is to or in (1<<n).
|
|
<br><br>e.g. to select bits 5, 9, 23 you could use (1<<5) | (1<<9) | (1<<23).
|
|
<h3><a name="*buf">*buf</a></h3>
|
|
A buffer to hold data being sent or being received.
|
|
<h3><a name="bufSize">bufSize</a></h3>
|
|
The size in bytes of a buffer.
|
|
<h3><a name="bVal">bVal</a>: 0-255 (Hex 0x0-0xFF, Octal 0-0377)</h3>
|
|
An 8-bit byte value.
|
|
<h3><a name="callback_id">callback_id</a></h3>
|
|
A >=0, as returned by a call to <a href="#callback">callback</a> or <a href="#callback_ex">callback_ex</a>. This is
|
|
passed to <a href="#callback_cancel">callback_cancel</a> to cancel the callback.
|
|
<h3><a name="CBFunc_t">CBFunc_t</a></h3>
|
|
<code>typedef void (*CBFunc_t)<br> (unsigned user_gpio, unsigned level, uint32_t tick);<br></code><h3><a name="CBFuncEx_t">CBFuncEx_t</a></h3>
|
|
<code>typedef void (*CBFuncEx_t)<br> (unsigned user_gpio, unsigned level, uint32_t tick, void * user);<br></code><h3><a name="char">char</a></h3>
|
|
A single character, an 8 bit quantity able to store 0-255.
|
|
<h3><a name="clkfreq">clkfreq</a>: 4689-250000000 (250M)</h3>
|
|
The hardware clock frequency.
|
|
<h3><a name="count">count</a></h3>
|
|
The number of bytes to be transferred in an I2C, SPI, or Serial
|
|
command.
|
|
<h3><a name="data_bits">data_bits</a>: 1-32</h3>
|
|
The number of data bits in each character of serial data.
|
|
<br><br><code>#define PI_MIN_WAVE_DATABITS 1<br>#define PI_MAX_WAVE_DATABITS 32<br></code><h3><a name="double">double</a></h3>
|
|
A floating point number.
|
|
<h3><a name="dutycycle">dutycycle</a>: 0-range</h3>
|
|
A number representing the ratio of on time to off time for PWM.
|
|
<br><br>The number may vary between 0 and range (default 255) where
|
|
0 is off and range is fully on.
|
|
<h3><a name="edge">edge</a></h3>
|
|
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.
|
|
<br><br><code>RISING_EDGE 0<br>FALLING_EDGE 1<br>EITHER_EDGE. 2<br></code><h3><a name="errnum">errnum</a></h3>
|
|
A negative number indicating a function call failed and the nature
|
|
of the error.
|
|
<h3><a name="f">f</a></h3>
|
|
A function.
|
|
<h3><a name="frequency">frequency</a>: >=0</h3>
|
|
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
|
|
40KHz. The GPIO will be on for a proportion of the time as defined
|
|
by its dutycycle.
|
|
<h3><a name="gpio">gpio</a></h3>
|
|
A Broadcom numbered GPIO, in the range 0-53.
|
|
<br><br>There are 54 General Purpose Input Outputs (GPIO) named gpio0 through
|
|
gpio53.
|
|
<br><br>They are split into two banks. Bank 1 consists of gpio0 through
|
|
gpio31. Bank 2 consists of gpio32 through gpio53.
|
|
<br><br>All the GPIO which are safe for the user to read and write are in
|
|
bank 1. Not all GPIO in bank 1 are safe though. Type 1 boards
|
|
have 17 safe GPIO. Type 2 boards have 21. Type 3 boards have 26.
|
|
<br><br>See <a href="#get_hardware_revision">get_hardware_revision</a>.
|
|
<br><br>The user GPIO are marked with an X in the following table.
|
|
<br><br><code> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15<br>Type 1 X X - - X - - X X X X X - - X X<br>Type 2 - - X X X - - X X X X X - - X X<br>Type 3 X X X X X X X X X X X X X X<br><br> 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31<br>Type 1 - X X - - X X X X X - - - - - -<br>Type 2 - X X - - - X X X X - X X X X X<br>Type 3 X X X X X X X X X X X X - - - -<br></code><h3><a name="gpioPulse_t">gpioPulse_t</a></h3>
|
|
<code>typedef struct<br>{<br>uint32_t gpioOn;<br>uint32_t gpioOff;<br>uint32_t usDelay;<br>} gpioPulse_t;<br></code><h3><a name="gpioThreadFunc_t">gpioThreadFunc_t</a></h3>
|
|
<code>typedef void *(gpioThreadFunc_t) (void *);<br></code><h3><a name="handle">handle</a>: >=0</h3>
|
|
A number referencing an object opened by one of <a href="#i2c_open">i2c_open</a>, <a href="#notify_open">notify_open</a>,
|
|
<a href="#serial_open">serial_open</a>, and <a href="#spi_open">spi_open</a>.
|
|
<h3><a name="i2c_addr">i2c_addr</a>: 0-0x7F</h3>
|
|
The address of a device on the I2C bus.
|
|
<h3><a name="i2c_bus">i2c_bus</a>: >=0</h3>
|
|
An I2C bus number.
|
|
<h3><a name="i2c_flags">i2c_flags</a>: 0</h3>
|
|
Flags which modify an I2C open command. None are currently defined.
|
|
<h3><a name="i2c_reg">i2c_reg</a>: 0-255</h3>
|
|
A register of an I2C device.
|
|
<h3><a name="*inBuf">*inBuf</a></h3>
|
|
A buffer used to pass data to a function.
|
|
<h3><a name="inLen">inLen</a></h3>
|
|
The number of bytes of data in a buffer.
|
|
<h3><a name="int">int</a></h3>
|
|
A whole number, negative or positive.
|
|
<h3><a name="invert">invert</a></h3>
|
|
A flag used to set normal or inverted bit bang serial data level logic.
|
|
<h3><a name="level">level</a></h3>
|
|
The level of a GPIO. Low or High.
|
|
<br><br><code>PI_OFF 0<br>PI_ON 1<br><br>PI_CLEAR 0<br>PI_SET 1<br><br>PI_LOW 0<br>PI_HIGH 1<br></code><br><br>There is one exception. If a watchdog expires on a GPIO the level will be
|
|
reported as PI_TIMEOUT. See <a href="#set_watchdog">set_watchdog</a>.
|
|
<br><br><code>PI_TIMEOUT 2<br></code><h3><a name="mode">mode</a>: 0-7</h3>
|
|
The operational mode of a GPIO, normally INPUT or OUTPUT.
|
|
<br><br><code>PI_INPUT 0<br>PI_OUTPUT 1<br>PI_ALT0 4<br>PI_ALT1 5<br>PI_ALT2 6<br>PI_ALT3 7<br>PI_ALT4 3<br>PI_ALT5 2<br></code><h3><a name="numBytes">numBytes</a></h3>
|
|
The number of bytes used to store characters in a string. Depending
|
|
on the number of bits per character there may be 1, 2, or 4 bytes
|
|
per character.
|
|
<h3><a name="numPar">numPar</a>: 0-10</h3>
|
|
The number of parameters passed to a script.
|
|
<h3><a name="numPulses">numPulses</a></h3>
|
|
The number of pulses to be added to a waveform.
|
|
<h3><a name="offset">offset</a></h3>
|
|
The associated data starts this number of microseconds from the start of
|
|
the waveform.
|
|
<h3><a name="*outBuf">*outBuf</a></h3>
|
|
A buffer used to return data from a function.
|
|
<h3><a name="outLen">outLen</a></h3>
|
|
The size in bytes of an output buffer.
|
|
<h3><a name="*param">*param</a></h3>
|
|
An array of script parameters.
|
|
<h3><a name="*portStr">*portStr</a></h3>
|
|
A string specifying the port address used by the Pi running
|
|
the pigpio daemon. It may be NULL in which case "8888"
|
|
is used unless overridden by the PIGPIO_PORT environment
|
|
variable.
|
|
<h3><a name="*pth">*pth</a></h3>
|
|
A thread identifier, returned by <a href="#start_thread">start_thread</a>.
|
|
<h3><a name="pthread_t">pthread_t</a></h3>
|
|
A thread identifier.
|
|
<h3><a name="pud">pud</a>: 0-2</h3>
|
|
The setting of the pull up/down resistor for a GPIO, which may be off,
|
|
pull-up, or pull-down.
|
|
<code>PI_PUD_OFF 0<br>PI_PUD_DOWN 1<br>PI_PUD_UP 2<br></code><h3><a name="pulseLen">pulseLen</a></h3>
|
|
1-100, the length of a trigger pulse in microseconds.
|
|
<h3><a name="*pulses">*pulses</a></h3>
|
|
An array of pulses to be added to a waveform.
|
|
<h3><a name="pulsewidth">pulsewidth</a>: 0, 500-2500</h3>
|
|
<code>PI_SERVO_OFF 0<br>PI_MIN_SERVO_PULSEWIDTH 500<br>PI_MAX_SERVO_PULSEWIDTH 2500<br></code><h3><a name="PWMduty">PWMduty</a>: 0-1000000 (1M)</h3>
|
|
The hardware PWM dutycycle.
|
|
<br><br><code>#define PI_HW_PWM_RANGE 1000000<br></code><h3><a name="PWMfreq">PWMfreq</a>: 1-125000000 (125M)</h3>
|
|
The hardware PWM frequency.
|
|
<br><br><code>#define PI_HW_PWM_MIN_FREQ 1<br>#define PI_HW_PWM_MAX_FREQ 125000000<br></code><h3><a name="range">range</a>: 25-40000</h3>
|
|
The permissible dutycycle values are 0-range.
|
|
<code>PI_MIN_DUTYCYCLE_RANGE 25<br>PI_MAX_DUTYCYCLE_RANGE 40000<br></code><h3><a name="*retBuf">*retBuf</a></h3>
|
|
A buffer to hold a number of bytes returned to a used customised function,
|
|
<h3><a name="retMax">retMax</a></h3>
|
|
The maximum number of bytes a user customised function should return.
|
|
<h3><a name="*rxBuf">*rxBuf</a></h3>
|
|
A pointer to a buffer to receive data.
|
|
<h3><a name="SCL">SCL</a></h3>
|
|
The user GPIO to use for the clock when bit banging I2C.
|
|
<h3><a name="*script">*script</a></h3>
|
|
A pointer to the text of a script.
|
|
<h3><a name="script_id">script_id</a></h3>
|
|
An id of a stored script as returned by <a href="#store_script">store_script</a>.
|
|
<h3><a name="SDA">SDA</a></h3>
|
|
The user GPIO to use for data when bit banging I2C.
|
|
<h3><a name="seconds">seconds</a></h3>
|
|
The number of seconds.
|
|
<h3><a name="ser_flags">ser_flags</a></h3>
|
|
Flags which modify a serial open command. None are currently defined.
|
|
<h3><a name="*ser_tty">*ser_tty</a></h3>
|
|
The name of a serial tty device, e.g. /dev/ttyAMA0, /dev/ttyUSB0, /dev/tty1.
|
|
<h3><a name="size_t">size_t</a></h3>
|
|
A standard type used to indicate the size of an object in bytes.
|
|
<h3><a name="spi_channel">spi_channel</a></h3>
|
|
A SPI channel, 0-2.
|
|
<h3><a name="spi_flags">spi_flags</a></h3>
|
|
See <a href="#spi_open">spi_open</a>.
|
|
<h3><a name="steady">steady</a>: 0-300000</h3>
|
|
The number of microseconds level changes must be stable for
|
|
before reporting the level changed (<a href="#set_glitch_filter">set_glitch_filter</a>) or triggering
|
|
the active part of a noise filter (<a href="#set_noise_filter">set_noise_filter</a>).
|
|
<h3><a name="stop_bits">stop_bits</a>: 2-8</h3>
|
|
The number of (half) stop bits to be used when adding serial data
|
|
to a waveform.
|
|
<br><br><code>#define PI_MIN_WAVE_HALFSTOPBITS 2<br>#define PI_MAX_WAVE_HALFSTOPBITS 8<br></code><h3><a name="*str">*str</a></h3>
|
|
An array of characters.
|
|
<h3><a name="thread_func">thread_func</a></h3>
|
|
A function of type gpioThreadFunc_t used as the main function of a
|
|
thread.
|
|
<h3><a name="timeout">timeout</a></h3>
|
|
A GPIO watchdog timeout in milliseconds.
|
|
<code>PI_MIN_WDOG_TIMEOUT 0<br>PI_MAX_WDOG_TIMEOUT 60000<br></code><h3><a name="*txBuf">*txBuf</a></h3>
|
|
An array of bytes to transmit.
|
|
<h3><a name="uint32_t">uint32_t</a>: 0-0-4,294,967,295 (Hex 0x0-0xFFFFFFFF)</h3>
|
|
A 32-bit unsigned value.
|
|
<h3><a name="unsigned">unsigned</a></h3>
|
|
A whole number >= 0.
|
|
<h3><a name="user_gpio">user_gpio</a></h3>
|
|
0-31, a Broadcom numbered GPIO.
|
|
<br><br>See <a href="#gpio">gpio</a>.
|
|
<h3><a name="*userdata">*userdata</a></h3>
|
|
A pointer to arbitrary user data. This may be used to identify the instance.
|
|
<h3><a name="void">void</a></h3>
|
|
Denoting no parameter is required
|
|
<h3><a name="wave_add_*">wave_add_*</a></h3>
|
|
One of <a href="#wave_add_new">wave_add_new</a>, <a href="#wave_add_generic">wave_add_generic</a>, <a href="#wave_add_serial">wave_add_serial</a>.
|
|
<h3><a name="wave_id">wave_id</a></h3>
|
|
A number representing a waveform created by <a href="#wave_create">wave_create</a>.
|
|
<h3><a name="wave_send_*">wave_send_*</a></h3>
|
|
One of <a href="#wave_send_once">wave_send_once</a>, <a href="#wave_send_repeat">wave_send_repeat</a>.
|
|
<h3><a name="wVal">wVal</a>: 0-65535 (Hex 0x0-0xFFFF, Octal 0-0177777)</h3>
|
|
A 16-bit word value.
|
|
<h2>pigpiod_if Error Codes</h2><code><br>typedef enum<br>{<br> pigif_bad_send = -2000,<br> pigif_bad_recv = -2001,<br> pigif_bad_getaddrinfo = -2002,<br> pigif_bad_connect = -2003,<br> pigif_bad_socket = -2004,<br> pigif_bad_noib = -2005,<br> pigif_duplicate_callback = -2006,<br> pigif_bad_malloc = -2007,<br> pigif_bad_callback = -2008,<br> pigif_notify_failed = -2009,<br> pigif_callback_not_found = -2010,<br>} pigifError_t;<br><br></code></td>
|
|
</table>
|
|
<div style="vertical-align: center; text-align: center; background-color:#98bf21; font-size:0.8em; height:30px"><a class="l2" href="index.html">[pigpio]</a>
|
|
<a class="l2" href="cif.html">[pigpio C I/F]</a>
|
|
<a class="l2" href="pigpiod.html">[pigpiod]</a>
|
|
<a class="l2" href="pdif2.html">[pigpiod C I/F]</a>
|
|
<a class="l2" href="python.html">[Python]</a>
|
|
<a class="l2" href="pigs.html">[pigs]</a>
|
|
<a class="l2" href="piscope.html">[piscope]</a>
|
|
<a class="l2" href="misc.html">[Misc]</a>
|
|
<a class="l2" href="examples.html">[Examples]</a>
|
|
<a class="l2" href="download.html">[Download]</a>
|
|
<a class="l2" href="faq.html">[FAQ]</a>
|
|
<a class="l2" href="sitemap.html">[Site Map]</a>
|
|
</div>
|
|
<table><tr>
|
|
<td style="width: 200px"><div style="text-align: left;"><small>© 2012-2020</small></div></td>
|
|
<td style="width: 350px"><div style="text-align: center;">e-mail: pigpio @ abyz.me.uk</div></td>
|
|
<td style="width: 200px"><div style="text-align: right;"><small>Updated: 30/04/2020</small></div></td>
|
|
</tr></table>
|
|
</td>
|
|
</table>
|
|
</body>
|
|
</html>
|