gpio_open,
gpio_close — library to
handle GPIO pins
General-Purpose Input Output (GPIO) library
(libgpio, -lgpio)
#include
<sys/types.h>
#include <libgpio.h>
gpio_handle_t
gpio_open(unsigned
int unit);
gpio_handle_t
gpio_open_device(const
char *device);
void
gpio_close(gpio_handle_t
handle);
int
gpio_pin_list(gpio_handle_t
handle, gpio_config_t
**pcfgs);
int
gpio_pin_config(gpio_handle_t
handle, gpio_config_t
*cfg);
int
gpio_pin_set_name(gpio_handle_t
handle, gpio_pin_t
pin, char
*name);
int
gpio_pin_set_flags(gpio_handle_t
handle, gpio_config_t
*cfg);
gpio_value_t
gpio_pin_get(gpio_handle_t
handle, gpio_pin_t
pin);
int
gpio_pin_set(gpio_handle_t
handle, gpio_pin_t
pin, gpio_value_t
value);
int
gpio_pin_toggle(gpio_handle_t
handle, gpio_pin_t
pin);
int
gpio_pin_low(gpio_handle_t
handle, gpio_pin_t
pin);
int
gpio_pin_high(gpio_handle_t
handle, gpio_pin_t
pin);
int
gpio_pin_input(gpio_handle_t
handle, gpio_pin_t
pin);
int
gpio_pin_output(gpio_handle_t
handle, gpio_pin_t
pin);
int
gpio_pin_opendrain(gpio_handle_t
handle, gpio_pin_t
pin);
int
gpio_pin_pushpull(gpio_handle_t
handle, gpio_pin_t
pin);
int
gpio_pin_tristate(gpio_handle_t
handle, gpio_pin_t
pin);
int
gpio_pin_pullup(gpio_handle_t
handle, gpio_pin_t
pin);
int
gpio_pin_pulldown(gpio_handle_t
handle, gpio_pin_t
pin);
int
gpio_pin_invin(gpio_handle_t
handle, gpio_pin_t
pin);
int
gpio_pin_invout(gpio_handle_t
handle, gpio_pin_t
pin);
int
gpio_pin_pulsate(gpio_handle_t
handle, gpio_pin_t
pin);
The libgpio library provides an interface
to configure GPIO pins. The library operates with a
gpio_handle_t opaque type which can be created with
gpio_open()
or
gpio_open_device().
When no more GPIO operations are needed, this handle can be destroyed with
gpio_close().
To get a list of all available pins, one can
call
gpio_pin_list().
This function takes a pointer to a gpio_config_t which
is dynamically allocated. This pointer should be freed with
free(3)
when it is no longer necessary.
The function
gpio_pin_config()
retrieves the current configuration of a pin. The pin number should be
passed in via the g_pin variable which is part of the
gpio_config_t structure.
The function
gpio_pin_set_name()
sets the name used to describe a pin.
The function
gpio_pin_set_flags()
configures a pin with the flags passed in by the
gpio_config_t structure. The pin number should also be
passed in through the g_pin variable. All other
structure members will be ignored by this function. The list of flags can be
found in /usr/include/sys/gpio.h.
The get or set the state of a GPIO pin, the
functions
gpio_pin_get()
and
gpio_pin_set()
are available, respectively. To toggle the state, use
gpio_pin_toggle().
The functions
gpio_pin_low()
and
gpio_pin_high()
are wrappers around gpio_pin_set().
The functions
gpio_pin_input(),
gpio_pin_output(),
gpio_pin_opendrain(),
gpio_pin_pushpull(),
gpio_pin_tristate(),
gpio_pin_pullup(),
gpio_pin_pulldown(),
gpio_pin_invin(),
gpio_pin_invout()
and
gpio_pin_pulsate()
are wrappers around gpio_pin_set_flags().
The following example shows how to configure pin 16 as output and
then drive it high:
#include <sys/types.h>
#include <err.h>
#include <libgpio.h>
gpio_handle_t handle;
handle = gpio_open(0);
if (handle == GPIO_INVALID_HANDLE)
err(1, "gpio_open failed");
gpio_pin_output(handle, 16);
gpio_pin_high(handle, 16);
gpio_close(handle);
The following example shows how to get a configuration of a
pin:
gpio_config_t cfg;
cfg.g_pin = 32;
gpio_pin_config(handle, &cfg);
The structure will contain the name of the pin and its flags.
The libgpio library first appeared in
FreeBSD 11.0.