libgpio.h revision 274987
1274987Srpaulo/*- 2274987Srpaulo * Copyright (c) 2013-2014 Rui Paulo <rpaulo@FreeBSD.org> 3274987Srpaulo * All rights reserved. 4274987Srpaulo * 5274987Srpaulo * Redistribution and use in source and binary forms, with or without 6274987Srpaulo * modification, are permitted provided that the following conditions 7274987Srpaulo * are met: 8274987Srpaulo * 1. Redistributions of source code must retain the above copyright 9274987Srpaulo * notice, this list of conditions and the following disclaimer. 10274987Srpaulo * 2. Redistributions in binary form must reproduce the above copyright 11274987Srpaulo * notice, this list of conditions and the following disclaimer in the 12274987Srpaulo * documentation and/or other materials provided with the distribution. 13274987Srpaulo * 14274987Srpaulo * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 15274987Srpaulo * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16274987Srpaulo * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17274987Srpaulo * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 18274987Srpaulo * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 19274987Srpaulo * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 20274987Srpaulo * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21274987Srpaulo * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 22274987Srpaulo * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 23274987Srpaulo * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 24274987Srpaulo * POSSIBILITY OF SUCH DAMAGE. 25274987Srpaulo * 26274987Srpaulo * $FreeBSD: head/lib/libgpio/libgpio.h 274987 2014-11-24 21:49:40Z rpaulo $ 27274987Srpaulo */ 28274987Srpaulo 29274987Srpaulo#ifndef _LIBGPIO_H_ 30274987Srpaulo#define _LIBGPIO_H_ 31274987Srpaulo 32274987Srpaulo#include <sys/gpio.h> 33274987Srpaulo 34274987Srpaulo__BEGIN_DECLS 35274987Srpaulo 36274987Srpaulo#define GPIO_INVALID_HANDLE -1 37274987Srpaulotypedef int gpio_handle_t; 38274987Srpaulotypedef uint32_t gpio_pin_t; 39274987Srpaulo 40274987Srpaulo/* 41274987Srpaulo * Structure describing a GPIO pin configuration. 42274987Srpaulo */ 43274987Srpaulotypedef struct { 44274987Srpaulo gpio_pin_t g_pin; 45274987Srpaulo char g_name[GPIOMAXNAME]; 46274987Srpaulo uint32_t g_caps; 47274987Srpaulo uint32_t g_flags; 48274987Srpaulo} gpio_config_t; 49274987Srpaulo 50274987Srpaulotypedef enum { 51274987Srpaulo GPIO_VALUE_INVALID = -1, 52274987Srpaulo GPIO_VALUE_LOW = GPIO_PIN_LOW, 53274987Srpaulo GPIO_VALUE_HIGH = GPIO_PIN_HIGH 54274987Srpaulo} gpio_value_t; 55274987Srpaulo 56274987Srpaulo/* 57274987Srpaulo * Open /dev/gpiocN or a specific device. 58274987Srpaulo */ 59274987Srpaulogpio_handle_t gpio_open(unsigned int); 60274987Srpaulogpio_handle_t gpio_open_device(const char *); 61274987Srpaulovoid gpio_close(gpio_handle_t); 62274987Srpaulo/* 63274987Srpaulo * Get a list of all the GPIO pins. 64274987Srpaulo */ 65274987Srpauloint gpio_pin_list(gpio_handle_t, gpio_config_t **); 66274987Srpaulo/* 67274987Srpaulo * GPIO pin configuration. 68274987Srpaulo * 69274987Srpaulo * Retrieve the configuration of a specific GPIO pin. The pin number is 70274987Srpaulo * passed through the gpio_config_t structure. 71274987Srpaulo */ 72274987Srpauloint gpio_pin_config(gpio_handle_t, gpio_config_t *); 73274987Srpaulo/* 74274987Srpaulo * Sets the GPIO flags on a specific GPIO pin. The pin number and the flags 75274987Srpaulo * to be set are passed through the gpio_config_t structure. 76274987Srpaulo */ 77274987Srpauloint gpio_pin_set_flags(gpio_handle_t, gpio_config_t *); 78274987Srpaulo/* 79274987Srpaulo * GPIO pin values. 80274987Srpaulo */ 81274987Srpauloint gpio_pin_get(gpio_handle_t, gpio_pin_t); 82274987Srpauloint gpio_pin_set(gpio_handle_t, gpio_pin_t, int); 83274987Srpauloint gpio_pin_toggle(gpio_handle_t, gpio_pin_t); 84274987Srpaulo/* 85274987Srpaulo * Helper functions to set pin states. 86274987Srpaulo */ 87274987Srpauloint gpio_pin_low(gpio_handle_t, gpio_pin_t); 88274987Srpauloint gpio_pin_high(gpio_handle_t, gpio_pin_t); 89274987Srpaulo/* 90274987Srpaulo * Helper functions to configure pins. 91274987Srpaulo */ 92274987Srpauloint gpio_pin_input(gpio_handle_t, gpio_pin_t); 93274987Srpauloint gpio_pin_output(gpio_handle_t, gpio_pin_t); 94274987Srpauloint gpio_pin_opendrain(gpio_handle_t, gpio_pin_t); 95274987Srpauloint gpio_pin_pushpull(gpio_handle_t, gpio_pin_t); 96274987Srpauloint gpio_pin_tristate(gpio_handle_t, gpio_pin_t); 97274987Srpauloint gpio_pin_pullup(gpio_handle_t, gpio_pin_t); 98274987Srpauloint gpio_pin_pulldown(gpio_handle_t, gpio_pin_t); 99274987Srpauloint gpio_pin_invin(gpio_handle_t, gpio_pin_t); 100274987Srpauloint gpio_pin_invout(gpio_handle_t, gpio_pin_t); 101274987Srpauloint gpio_pin_pulsate(gpio_handle_t, gpio_pin_t); 102274987Srpaulo 103274987Srpaulo__END_DECLS 104274987Srpaulo 105274987Srpaulo#endif /* _LIBGPIO_H_ */ 106