2 * Author: Thomas Ingleby <thomas.c.ingleby@intel.com>
3 * Copyright (c) 2014 Intel Corporation.
5 * Permission is hereby granted, free of charge, to any person obtaining
6 * a copy of this software and associated documentation files (the
7 * "Software"), to deal in the Software without restriction, including
8 * without limitation the rights to use, copy, modify, merge, publish,
9 * distribute, sublicense, and/or sell copies of the Software, and to
10 * permit persons to whom the Software is furnished to do so, subject to
11 * the following conditions:
13 * The above copyright notice and this permission notice shall be
14 * included in all copies or substantial portions of the Software.
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 * This file defines the gpio interface for libmaa
46 * A strucutre representing a gpio pin.
50 * Opaque pointer definition to the internal struct _gpio
52 typedef struct _gpio* maa_gpio_context;
58 MAA_GPIO_STRONG = 0, /**< Default. Strong high and low */
59 MAA_GPIO_PULLUP = 1, /**< Resistive High */
60 MAA_GPIO_PULLDOWN = 2, /**< Resistive Low */
61 MAA_GPIO_HIZ = 3 /**< High Z State */
65 * GPIO Direction options.
68 MAA_GPIO_OUT = 0, /**< Output. A Mode can also be set */
69 MAA_GPIO_IN = 1 /**< Input. */
73 MAA_GPIO_EDGE_NONE = 0, /**< No interrupt on GPIO */
74 MAA_GPIO_EDGE_BOTH = 1, /**< Interupt on rising & falling */
75 MAA_GPIO_EDGE_RISING = 2, /**< Interupt on rising only */
76 MAA_GPIO_EDGE_FALLING = 3 /**< Interupt on falling only */
79 /** Initialise gpio_context, based on board number
81 * @param pin pin number read from the board, i.e IO3 is 3.
83 * @returns maa_gpio_context based on the IO pin
85 maa_gpio_context maa_gpio_init(int pin);
87 /** Initialise gpio context without any mapping to a pin.
88 * - For more expert users
90 * @param gpiopin gpio pin as listed in SYSFS
92 * @return gpio context
94 maa_gpio_context maa_gpio_init_raw(int gpiopin);
96 /** Set the edge mode on the gpio
98 * @param dev The GPIO context
99 * @param mode The edge mode to set the gpio into
101 * @return maa result type.
103 maa_result_t maa_gpio_edge_mode(maa_gpio_context dev, gpio_edge_t mode);
105 /** Set an interupt on pin
107 * @param dev The GPIO context
108 * @param mode The edge mode to set the gpio into
109 * @param fptr Function pointer to function to be called when interupt is
112 * @return maa result type.
115 maa_gpio_isr(maa_gpio_context dev, gpio_edge_t edge, void (*fptr)(void));
117 /** Stop the current interupt watcher on this GPIO, and set the GPIO edge mode
118 * to MAA_GPIO_EDGE_NONE.
120 * @param dev The GPIO context.
122 * @return maa result type.
125 maa_gpio_isr_exit(maa_gpio_context dev);
127 /** Set GPIO Output Mode,
129 * @param dev The GPIO context
130 * @param mode The GPIO Output Mode.
132 * @return maa result type.
134 maa_result_t maa_gpio_mode(maa_gpio_context dev, gpio_mode_t mode);
136 /** Set GPIO direction
138 * @param dev The GPIO context.
139 * @param dir The direction of the GPIO.
141 * @return maa result type.
143 maa_result_t maa_gpio_dir(maa_gpio_context dev, gpio_dir_t dir);
145 /** Close the GPIO context
146 * - Will free the memory for the context and unexport the GPIO
148 * @param dev the GPIO context
150 * @return maa result type.
152 maa_result_t maa_gpio_close(maa_gpio_context dev);
154 /** Read the GPIO value.
156 * @param dev The GPIO context.
158 * @return the integer value of the GPIO
160 int maa_gpio_read(maa_gpio_context dev);
162 /** Write to the GPIO Value.
164 * @param dev The GPIO context.
165 * @param value Integer value to write.
167 * @return maa result type
169 maa_result_t maa_gpio_write(maa_gpio_context dev, int value);
171 /** Change ownership of the context.
173 * @param dev gpio context
174 * @param owner does this context own the pin.
176 maa_result_t maa_gpio_owner(maa_gpio_context dev, maa_boolean_t owner);