2 .\" Copyright (c) 2014 Rui Paulo
3 .\" All rights reserved.
5 .\" Redistribution and use in source and binary forms, with or without
6 .\" modification, are permitted provided that the following conditions
8 .\" 1. Redistributions of source code must retain the above copyright
9 .\" notice, this list of conditions and the following disclaimer.
10 .\" 2. Redistributions in binary form must reproduce the above copyright
11 .\" notice, this list of conditions and the following disclaimer in the
12 .\" documentation and/or other materials provided with the distribution.
14 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 .Nd "library to handle GPIO pins"
41 .Fn gpio_open "unsigned int unit"
43 .Fn gpio_open_device "const char *device"
45 .Fn gpio_close "gpio_handle_t handle"
47 .Fn gpio_pin_list "gpio_handle_t handle" "gpio_config_t **pcfgs"
49 .Fn gpio_pin_config "gpio_handle_t handle" "gpio_config_t *cfg"
51 .Fn gpio_pin_set_name "gpio_handle_t handle" "gpio_pin_t pin" "char *name"
53 .Fn gpio_pin_set_flags "gpio_handle_t handle" "gpio_config_t *cfg"
55 .Fn gpio_pin_get "gpio_handle_t handle" "gpio_pin_t pin"
57 .Fn gpio_pin_set "gpio_handle_t handle" "gpio_pin_t pin" "gpio_value_t value"
59 .Fn gpio_pin_toggle "gpio_handle_t handle" "gpio_pin_t pin"
61 .Fn gpio_pin_low "gpio_handle_t handle" "gpio_pin_t pin"
63 .Fn gpio_pin_high "gpio_handle_t handle" "gpio_pin_t pin"
65 .Fn gpio_pin_input "gpio_handle_t handle" "gpio_pin_t pin"
67 .Fn gpio_pin_output "gpio_handle_t handle" "gpio_pin_t pin"
69 .Fn gpio_pin_opendrain "gpio_handle_t handle" "gpio_pin_t pin"
71 .Fn gpio_pin_pushpull "gpio_handle_t handle" "gpio_pin_t pin"
73 .Fn gpio_pin_tristate "gpio_handle_t handle" "gpio_pin_t pin"
75 .Fn gpio_pin_pullup "gpio_handle_t handle" "gpio_pin_t pin"
77 .Fn gpio_pin_pulldown "gpio_handle_t handle" "gpio_pin_t pin"
79 .Fn gpio_pin_invin "gpio_handle_t handle" "gpio_pin_t pin"
81 .Fn gpio_pin_invout "gpio_handle_t handle" "gpio_pin_t pin"
83 .Fn gpio_pin_pulsate "gpio_handle_t handle" "gpio_pin_t pin"
87 library provides an interface to configure GPIO pins.
88 The library operates with a
90 opaque type which can be created with
93 .Fn gpio_open_device .
94 When no more GPIO operations are needed, this handle can be destroyed
98 To get a list of all available pins, one can call
100 This function takes a pointer to a
102 which is dynamically allocated.
103 This pointer should be freed with
105 when it is no longer necessary.
109 retrieves the current configuration of a pin.
110 The pin number should be passed in via the
112 variable which is part of the
117 .Fn gpio_pin_set_name
118 sets the name used to describe a pin.
121 .Fn gpio_pin_set_flags
122 configures a pin with the flags passed in by the
125 The pin number should also be passed in through the
128 All other structure members will be ignored by this function.
129 The list of flags can be found in
130 .Pa /usr/include/sys/gpio.h .
132 The get or set the state of a GPIO pin, the functions
136 are available, respectively.
137 To toggle the state, use
138 .Fn gpio_pin_toggle .
149 .Fn gpio_pin_output ,
150 .Fn gpio_pin_opendrain ,
151 .Fn gpio_pin_pushpull ,
152 .Fn gpio_pin_tristate ,
153 .Fn gpio_pin_pullup ,
154 .Fn gpio_pin_pulldown ,
160 .Fn gpio_pin_set_flags .
162 The following example shows how to configure pin 16 as output and then
165 #include <sys/types.h>
169 gpio_handle_t handle;
171 handle = gpio_open(0);
172 if (handle == GPIO_INVALID_HANDLE)
173 err(1, "gpio_open failed");
174 gpio_pin_output(handle, 16);
175 gpio_pin_high(handle, 16);
179 The following example shows how to get a configuration of a pin:
184 gpio_pin_config(handle, &cfg);
187 The structure will contain the name of the pin and its flags.
194 library first appeared in
199 library was implemented by
200 .An Rui Paulo Aq Mt rpaulo@FreeBSD.org .