1f12128e4SRui Paulo.\" 2f12128e4SRui Paulo.\" Copyright (c) 2014 Rui Paulo 3f12128e4SRui Paulo.\" All rights reserved. 4f12128e4SRui Paulo.\" 5f12128e4SRui Paulo.\" Redistribution and use in source and binary forms, with or without 6f12128e4SRui Paulo.\" modification, are permitted provided that the following conditions 7f12128e4SRui Paulo.\" are met: 8f12128e4SRui Paulo.\" 1. Redistributions of source code must retain the above copyright 9f12128e4SRui Paulo.\" notice, this list of conditions and the following disclaimer. 10f12128e4SRui Paulo.\" 2. Redistributions in binary form must reproduce the above copyright 11f12128e4SRui Paulo.\" notice, this list of conditions and the following disclaimer in the 12f12128e4SRui Paulo.\" documentation and/or other materials provided with the distribution. 13f12128e4SRui Paulo.\" 14f12128e4SRui Paulo.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15f12128e4SRui Paulo.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16f12128e4SRui Paulo.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17f12128e4SRui Paulo.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18f12128e4SRui Paulo.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19f12128e4SRui Paulo.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20f12128e4SRui Paulo.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21f12128e4SRui Paulo.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22f12128e4SRui Paulo.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23f12128e4SRui Paulo.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24f12128e4SRui Paulo.\" SUCH DAMAGE. 25f12128e4SRui Paulo.\" 26*35189d47SChristian Brueffer.Dd July 1, 2015 27f12128e4SRui Paulo.Dt GPIO 3 28f12128e4SRui Paulo.Os 29f12128e4SRui Paulo.Sh NAME 30f12128e4SRui Paulo.Nm gpio_open , 31f12128e4SRui Paulo.Nm gpio_close 32f12128e4SRui Paulo.Nd "library to handle GPIO pins" 33f12128e4SRui Paulo.Sh LIBRARY 34f12128e4SRui Paulo.Lb libgpio 35f12128e4SRui Paulo.Sh SYNOPSIS 36b28dfe65SChristian Brueffer.In sys/types.h 37f12128e4SRui Paulo.In libgpio.h 38f12128e4SRui Paulo.Ft "gpio_handle_t" 39f12128e4SRui Paulo.Fn gpio_open "unsigned int unit" 40f12128e4SRui Paulo.Ft "gpio_handle_t" 41f12128e4SRui Paulo.Fn gpio_open_device "const char *device" 42f12128e4SRui Paulo.Ft void 43f12128e4SRui Paulo.Fn gpio_close "gpio_handle_t handle" 44f12128e4SRui Paulo.Ft int 455126a473SLuiz Otavio O Souza.Fn gpio_pin_list "gpio_handle_t handle" "gpio_config_t **pcfgs" 46f12128e4SRui Paulo.Ft int 475126a473SLuiz Otavio O Souza.Fn gpio_pin_config "gpio_handle_t handle" "gpio_config_t *cfg" 48d752f0f6SLuiz Otavio O Souza.Ft int 495126a473SLuiz Otavio O Souza.Fn gpio_pin_set_name "gpio_handle_t handle" "gpio_pin_t pin" "char *name" 50f12128e4SRui Paulo.Ft int 515126a473SLuiz Otavio O Souza.Fn gpio_pin_set_flags "gpio_handle_t handle" "gpio_config_t *cfg" 52f12128e4SRui Paulo.Ft gpio_value_t 535126a473SLuiz Otavio O Souza.Fn gpio_pin_get "gpio_handle_t handle" "gpio_pin_t pin" 54f12128e4SRui Paulo.Ft int 555126a473SLuiz Otavio O Souza.Fn gpio_pin_set "gpio_handle_t handle" "gpio_pin_t pin" "gpio_value_t value" 56f12128e4SRui Paulo.Ft int 575126a473SLuiz Otavio O Souza.Fn gpio_pin_toggle "gpio_handle_t handle" "gpio_pin_t pin" 58f12128e4SRui Paulo.Ft int 595126a473SLuiz Otavio O Souza.Fn gpio_pin_low "gpio_handle_t handle" "gpio_pin_t pin" 60f12128e4SRui Paulo.Ft int 615126a473SLuiz Otavio O Souza.Fn gpio_pin_high "gpio_handle_t handle" "gpio_pin_t pin" 62f12128e4SRui Paulo.Ft int 635126a473SLuiz Otavio O Souza.Fn gpio_pin_input "gpio_handle_t handle" "gpio_pin_t pin" 64f12128e4SRui Paulo.Ft int 655126a473SLuiz Otavio O Souza.Fn gpio_pin_output "gpio_handle_t handle" "gpio_pin_t pin" 66f12128e4SRui Paulo.Ft int 675126a473SLuiz Otavio O Souza.Fn gpio_pin_opendrain "gpio_handle_t handle" "gpio_pin_t pin" 68f12128e4SRui Paulo.Ft int 695126a473SLuiz Otavio O Souza.Fn gpio_pin_pushpull "gpio_handle_t handle" "gpio_pin_t pin" 70f12128e4SRui Paulo.Ft int 715126a473SLuiz Otavio O Souza.Fn gpio_pin_tristate "gpio_handle_t handle" "gpio_pin_t pin" 72f12128e4SRui Paulo.Ft int 735126a473SLuiz Otavio O Souza.Fn gpio_pin_pullup "gpio_handle_t handle" "gpio_pin_t pin" 74f12128e4SRui Paulo.Ft int 755126a473SLuiz Otavio O Souza.Fn gpio_pin_pulldown "gpio_handle_t handle" "gpio_pin_t pin" 76f12128e4SRui Paulo.Ft int 775126a473SLuiz Otavio O Souza.Fn gpio_pin_invin "gpio_handle_t handle" "gpio_pin_t pin" 78f12128e4SRui Paulo.Ft int 795126a473SLuiz Otavio O Souza.Fn gpio_pin_invout "gpio_handle_t handle" "gpio_pin_t pin" 80f12128e4SRui Paulo.Ft int 815126a473SLuiz Otavio O Souza.Fn gpio_pin_pulsate "gpio_handle_t handle" "gpio_pin_t pin" 82f12128e4SRui Paulo.Sh DESCRIPTION 83f12128e4SRui PauloThe 84f12128e4SRui Paulo.Nm libgpio 85f12128e4SRui Paulolibrary provides an interface to configure GPIO pins. 86f12128e4SRui PauloThe library operates with a 87f12128e4SRui Paulo.Ft gpio_handle_t 88f12128e4SRui Pauloopaque type which can be created with 89f12128e4SRui Paulo.Fn gpio_open 90f12128e4SRui Pauloor 91f12128e4SRui Paulo.Fn gpio_open_device . 92f12128e4SRui PauloWhen no more GPIO operations are needed, this handle can be destroyed 93f12128e4SRui Paulowith 94f12128e4SRui Paulo.Fn gpio_close . 95f12128e4SRui Paulo.Pp 96f12128e4SRui PauloTo get a list of all available pins, one can call 97f12128e4SRui Paulo.Fn gpio_pin_list . 98f12128e4SRui PauloThis function takes a pointer to a 99f12128e4SRui Paulo.Ft gpio_config_t 100f12128e4SRui Paulowhich is dynamically allocated. 101f12128e4SRui PauloThis pointer should be freed with 102f12128e4SRui Paulo.Xr free 3 1035126a473SLuiz Otavio O Souzawhen it is no longer necessary. 104f12128e4SRui Paulo.Pp 105f12128e4SRui PauloThe function 106f12128e4SRui Paulo.Fn gpio_pin_config 107f12128e4SRui Pauloretrieves the current configuration of a pin. 108f12128e4SRui PauloThe pin number should be passed in via the 109f12128e4SRui Paulo.Ft g_pin 110f12128e4SRui Paulovariable which is part of the 111f12128e4SRui Paulo.Ft gpio_config_t 112f12128e4SRui Paulostructure. 113f12128e4SRui Paulo.Pp 114f12128e4SRui PauloThe function 115d752f0f6SLuiz Otavio O Souza.Fn gpio_pin_set_name 116d752f0f6SLuiz Otavio O Souzasets the name used to describe a pin. 117d752f0f6SLuiz Otavio O Souza.Pp 118d752f0f6SLuiz Otavio O SouzaThe function 119f12128e4SRui Paulo.Fn gpio_pin_set_flags 120f12128e4SRui Pauloconfigures a pin with the flags passed in by the 121f12128e4SRui Paulo.Ft gpio_config_t 122f12128e4SRui Paulostructure. 123f12128e4SRui PauloThe pin number should also be passed in through the 124f12128e4SRui Paulo.Ft g_pin 125f12128e4SRui Paulovariable. 126f12128e4SRui PauloAll other structure members will be ignored by this function. 127f12128e4SRui PauloThe list of flags can be found in 128f12128e4SRui Paulo.Pa /usr/include/sys/gpio.h . 129f12128e4SRui Paulo.Pp 130f12128e4SRui PauloThe get or set the state of a GPIO pin, the functions 131f12128e4SRui Paulo.Fn gpio_pin_get 132f12128e4SRui Pauloand 133f12128e4SRui Paulo.Fn gpio_pin_set 134f12128e4SRui Pauloare available, respectively. 135f12128e4SRui PauloTo toggle the state, use 136f12128e4SRui Paulo.Fn gpio_pin_toggle . 137f12128e4SRui Paulo.Pp 138f12128e4SRui PauloThe functions 139f12128e4SRui Paulo.Fn gpio_pin_low 140f12128e4SRui Pauloand 141f12128e4SRui Paulo.Fn gpio_pin_high 142f12128e4SRui Pauloare wrappers around 143f12128e4SRui Paulo.Fn gpio_pin_set . 144f12128e4SRui Paulo.Pp 145f12128e4SRui PauloThe functions 146f12128e4SRui Paulo.Fn gpio_pin_input , 147f12128e4SRui Paulo.Fn gpio_pin_output , 148f12128e4SRui Paulo.Fn gpio_pin_opendrain , 149f12128e4SRui Paulo.Fn gpio_pin_pushpull , 150f12128e4SRui Paulo.Fn gpio_pin_tristate , 151f12128e4SRui Paulo.Fn gpio_pin_pullup , 152f12128e4SRui Paulo.Fn gpio_pin_pulldown , 153f12128e4SRui Paulo.Fn gpio_pin_invin , 154f12128e4SRui Paulo.Fn gpio_pin_invout 155f12128e4SRui Pauloand 156f12128e4SRui Paulo.Fn gpio_pin_pulsate 157f12128e4SRui Pauloare wrappers around 158f12128e4SRui Paulo.Fn gpio_pin_set_flags . 159f12128e4SRui Paulo.Sh EXAMPLES 160f12128e4SRui PauloThe following example shows how to configure pin 16 as output and then 161f12128e4SRui Paulodrive it high: 162f12128e4SRui Paulo.Bd -literal 163b28dfe65SChristian Brueffer#include <sys/types.h> 164f12128e4SRui Paulo#include <err.h> 165f12128e4SRui Paulo#include <libgpio.h> 166f12128e4SRui Paulo 167f12128e4SRui Paulogpio_handle_t handle; 168f12128e4SRui Paulo 169f12128e4SRui Paulohandle = gpio_open(0); 170b28dfe65SChristian Bruefferif (handle == GPIO_INVALID_HANDLE) 171f12128e4SRui Paulo err(1, "gpio_open failed"); 172f12128e4SRui Paulogpio_pin_output(handle, 16); 173f12128e4SRui Paulogpio_pin_high(handle, 16); 174f12128e4SRui Paulogpio_close(handle); 175f12128e4SRui Paulo.Ed 176f12128e4SRui Paulo.Pp 177f12128e4SRui PauloThe following example shows how to get a configuration of a pin: 178f12128e4SRui Paulo.Bd -literal 179f12128e4SRui Paulogpio_config_t cfg; 180f12128e4SRui Paulo 181f12128e4SRui Paulocfg.g_pin = 32; 182f12128e4SRui Paulogpio_pin_config(handle, &cfg); 183f12128e4SRui Paulo.Ed 184f12128e4SRui Paulo.Pp 185f12128e4SRui PauloThe structure will contain the name of the pin and its flags. 186f12128e4SRui Paulo.Sh SEE ALSO 187f12128e4SRui Paulo.Xr gpiobus 4 , 188f12128e4SRui Paulo.Xr gpioctl 8 189f12128e4SRui Paulo.Sh HISTORY 190f12128e4SRui PauloThe 191f12128e4SRui Paulo.Nm libgpio 192f12128e4SRui Paulolibrary first appeared in 193f12128e4SRui Paulo.Fx 11.0 . 194f12128e4SRui Paulo.Sh AUTHORS 195f12128e4SRui PauloThe 196f12128e4SRui Paulo.Nm libgpio 197f12128e4SRui Paulolibrary was implemented by 198f12128e4SRui Paulo.An Rui Paulo Aq Mt rpaulo@FreeBSD.org . 199