xref: /freebsd/lib/libgpio/gpio.3 (revision fa9896e082a1046ff4fbc75fcba4d18d1f2efc19)
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