Home | History | Annotate | Download | only in inc
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef GPIO_H_
     18 #define GPIO_H_
     19 
     20 #ifdef __cplusplus
     21 extern "C" {
     22 #endif
     23 
     24 #include <stdint.h>
     25 #include <stdbool.h>
     26 
     27 enum GpioMode
     28 {
     29     GPIO_MODE_IN = 0,
     30     GPIO_MODE_OUT,
     31     GPIO_MODE_ALTERNATE,
     32     GPIO_MODE_ANALOG,
     33 };
     34 
     35 enum GpioOpenDrainMode
     36 {
     37     GPIO_OUT_PUSH_PULL = 0,
     38     GPIO_OUT_OPEN_DRAIN,
     39 };
     40 
     41 enum GpioPullMode
     42 {
     43     GPIO_PULL_NONE = 0,
     44     GPIO_PULL_UP,
     45     GPIO_PULL_DOWN,
     46 };
     47 
     48 #define GPIO_SPEED_BEST_POWER      -1 //all non-negative values are platform specific, YMMV
     49 #define GPIO_SPEED_BEST_SPEED      -2
     50 #define GPIO_SPEED_DEFAULT         -3
     51 #define GPIO_SPEED_1MHZ_PLUS       -4
     52 #define GPIO_SPEED_3MHZ_PLUS       -5
     53 #define GPIO_SPEED_5MHZ_PLUS       -6
     54 #define GPIO_SPEED_10MHZ_PLUS      -7
     55 #define GPIO_SPEED_15MHZ_PLUS      -8
     56 #define GPIO_SPEED_20MHZ_PLUS      -9
     57 #define GPIO_SPEED_30MHZ_PLUS      -10
     58 #define GPIO_SPEED_50MHZ_PLUS      -11
     59 #define GPIO_SPEED_100MHZ_PLUS     -12
     60 #define GPIO_SPEED_150MHZ_PLUS     -13
     61 #define GPIO_SPEED_200MHZ_PLUS     -14
     62 
     63 
     64 struct Gpio;
     65 
     66 /* Requests a GPIO and allocates the gpio handle/struct/etc */
     67 struct Gpio* gpioRequest(uint32_t gpioNum);
     68 void gpioRelease(struct Gpio* __restrict gpio);
     69 
     70 /* Configures the direction and pull type of a GPIO */
     71 void gpioConfigInput(const struct Gpio* __restrict gpio, int32_t gpioSpeed, enum GpioPullMode pull);
     72 void gpioConfigOutput(const struct Gpio* __restrict gpio, int32_t gpioSpeed, enum GpioPullMode pull, enum GpioOpenDrainMode odrMode, bool value);
     73 void gpioConfigAlt(const struct Gpio* __restrict gpio, int32_t gpioSpeed, enum GpioPullMode pull, enum GpioOpenDrainMode odrMode, uint32_t altFunc);
     74 void gpioConfigAnalog(const struct Gpio* __restrict gpio);
     75 
     76 /* Sets and gets a value for a specific GPIO pin */
     77 void gpioSet(const struct Gpio* __restrict gpio, bool value);
     78 bool gpioGet(const struct Gpio* __restrict gpio);
     79 
     80 #ifdef __cplusplus
     81 }
     82 #endif
     83 
     84 #endif
     85