• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 /**
17  * @addtogroup IotHardware
18  * @{
19  *
20  * @brief Provides APIs for operating devices,
21  * including flash, GPIO, I2C, PWM, UART, and watchdog APIs.
22  *
23  *
24  *
25  * @since 2.2
26  * @version 2.2
27  */
28 
29 /**
30  * @file iot_gpio.h
31  *
32  * @brief Declares functions for operating GPIO devices.
33  *
34  * These functions are used for GPIO initialization, input/output settings, and level settings. \n
35  *
36  * @since 2.2
37  * @version 2.2
38  */
39 #ifndef IOT_GPIO_H
40 #define IOT_GPIO_H
41 
42 /**
43  * @brief Enumerates GPIO level values.
44  */
45 typedef enum {
46     /** Low GPIO level */
47     IOT_GPIO_VALUE0 = 0,
48     /** High GPIO level */
49     IOT_GPIO_VALUE1
50 } IotGpioValue;
51 
52 /**
53  * @brief Enumerates GPIO directions.
54  */
55 typedef enum {
56     /** Input */
57     IOT_GPIO_DIR_IN = 0,
58     /** Output */
59     IOT_GPIO_DIR_OUT
60 } IotGpioDir;
61 
62 /**
63  * @brief Enumerates GPIO interrupt trigger modes.
64  */
65 typedef enum {
66     /** Level-sensitive interrupt */
67     IOT_INT_TYPE_LEVEL = 0,
68     /** Edge-sensitive interrupt */
69     IOT_INT_TYPE_EDGE
70 } IotGpioIntType;
71 
72 /**
73  * @brief Enumerates I/O interrupt polarities.
74  */
75 typedef enum {
76     /** Interrupt at a low level or falling edge */
77     IOT_GPIO_EDGE_FALL_LEVEL_LOW = 0,
78     /** Interrupt at a high level or rising edge */
79     IOT_GPIO_EDGE_RISE_LEVEL_HIGH
80 } IotGpioIntPolarity;
81 
82 /**
83  * @brief Indicates the GPIO interrupt callback.
84  *
85  */
86 typedef void (*GpioIsrCallbackFunc) (char *arg);
87 
88 /**
89  * @brief Initializes a GPIO device.
90  *
91  * @param id Indicates the GPIO pin number.
92  * @return Returns {@link IOT_SUCCESS} if the GPIO device is initialized;
93  * returns {@link IOT_FAILURE} otherwise. For details about other return values, see the chip description.
94  * @since 2.2
95  * @version 2.2
96  */
97 unsigned int IoTGpioInit(unsigned int id);
98 
99 /**
100  * @brief Deinitializes a GPIO device.
101  *
102  * @param id Indicates the GPIO pin number.
103  * @return Returns {@link IOT_SUCCESS} if the GPIO device is deinitialized;
104  * returns {@link IOT_FAILURE} otherwise. For details about other return values, see the chip description.
105  * @since 2.2
106  * @version 2.2
107  */
108 unsigned int IoTGpioDeinit(unsigned int id);
109 
110 /**
111  * @brief Sets the direction for a GPIO pin.
112  *
113  * @param id Indicates the GPIO pin number.
114  * @param dir Indicates the GPIO input/output direction.
115  * @return Returns {@link IOT_SUCCESS} if the direction is set;
116  * returns {@link IOT_FAILURE} otherwise. For details about other return values, see the chip description.
117  * @since 2.2
118  * @version 2.2
119  */
120 unsigned int IoTGpioSetDir(unsigned int id, IotGpioDir dir);
121 
122 /**
123  * @brief Obtains the direction for a GPIO pin.
124  *
125  * @param id Indicates the GPIO pin number.
126  * @param dir Indicates the pointer to the GPIO input/output direction.
127  * @return Returns {@link IOT_SUCCESS} if the direction is obtained;
128  * returns {@link IOT_FAILURE} otherwise. For details about other return values, see the chip description.
129  * @since 2.2
130  * @version 2.2
131  */
132 unsigned int IoTGpioGetDir(unsigned int id, IotGpioDir *dir);
133 
134 /**
135  * @brief Sets the output level value for a GPIO pin.
136  *
137  * @param id Indicates the GPIO pin number.
138  * @param val Indicates the output level value.
139  * @return Returns {@link IOT_SUCCESS} if the output level value is set;
140  * returns {@link IOT_FAILURE} otherwise. For details about other return values, see the chip description.
141  * @since 2.2
142  * @version 2.2
143  */
144 unsigned int IoTGpioSetOutputVal(unsigned int id, IotGpioValue val);
145 
146 /**
147  * @brief Obtains the output level value of a GPIO pin.
148  *
149  * @param id Indicates the GPIO pin number.
150  * @param val Indicates the pointer to the output level value.
151  * @return Returns {@link IOT_SUCCESS} if the output level value is obtained;
152  * returns {@link IOT_FAILURE} otherwise. For details about other return values, see the chip description.
153  * @since 2.2
154  * @version 2.2
155  */
156 unsigned int IoTGpioGetOutputVal(unsigned int id, IotGpioValue *val);
157 
158 /**
159  * @brief Obtains the input level value of a GPIO pin.
160  *
161  * @param id Indicates the GPIO pin number.
162  * @param val Indicates the pointer to the input level value.
163  * @return Returns {@link IOT_SUCCESS} if the input level value is obtained;
164  * returns {@link IOT_FAILURE} otherwise. For details about other return values, see the chip description.
165  * @since 2.2
166  * @version 2.2
167  */
168 unsigned int IoTGpioGetInputVal(unsigned int id, IotGpioValue *val);
169 
170 /**
171  * @brief Enables the interrupt feature for a GPIO pin.
172  *
173  * This function can be used to set the interrupt type, interrupt polarity, and interrupt callback for a GPIO pin.
174  *
175  * @param id Indicates the GPIO pin number.
176  * @param intType Indicates the interrupt type.
177  * @param intPolarity Indicates the interrupt polarity.
178  * @param func Indicates the interrupt callback function.
179  * @param arg Indicates the pointer to the argument used in the interrupt callback function.
180  * @return Returns {@link IOT_SUCCESS} if the interrupt feature is enabled;
181  * returns {@link IOT_FAILURE} otherwise. For details about other return values, see the chip description.
182  * @since 2.2
183  * @version 2.2
184  */
185 unsigned int IoTGpioRegisterIsrFunc(unsigned int id, IotGpioIntType intType, IotGpioIntPolarity intPolarity,
186                                     GpioIsrCallbackFunc func, char *arg);
187 
188 /**
189  * @brief Disables the interrupt feature for a GPIO pin.
190  *
191  * @param id Indicates the GPIO pin number.
192  * @return Returns {@link IOT_SUCCESS} if the interrupt feature is disabled;
193  * returns {@link IOT_FAILURE} otherwise. For details about other return values, see the chip description.
194  * @since 2.2
195  * @version 2.2
196  */
197 unsigned int IoTGpioUnregisterIsrFunc(unsigned int id);
198 
199 /**
200  * @brief Masks the interrupt feature for a GPIO pin.
201  *
202  * @param id Indicates the GPIO pin number.
203  * @param mask Indicates whether the interrupt function is masked.
204  * The value <b>1</b> means to mask the interrupt function, and <b>0</b> means not to mask the interrupt function.
205  * @return Returns {@link IOT_SUCCESS} if the interrupt feature is masked;
206  * returns {@link IOT_FAILURE} otherwise. For details about other return values, see the chip description.
207  * @since 2.2
208  * @version 2.2
209  */
210 unsigned int IoTGpioSetIsrMask(unsigned int id, unsigned char mask);
211 
212 /**
213  * @brief Sets the interrupt trigger mode of a GPIO pin.
214  *
215  * This function configures a GPIO pin based on the interrupt type and interrupt polarity.
216  *
217  * @param id Indicates the GPIO pin number.
218  * @param intType Indicates the interrupt type.
219  * @param intPolarity Indicates the interrupt polarity.
220  * @return Returns {@link IOT_SUCCESS} if the interrupt trigger mode is set;
221  * returns {@link IOT_FAILURE} otherwise. For details about other return values, see the chip description.
222  * @since 2.2
223  * @version 2.2
224  */
225 unsigned int IoTGpioSetIsrMode(unsigned int id, IotGpioIntType intType, IotGpioIntPolarity intPolarity);
226 
227 #endif // IOT_GPIO_H
228 /** @} */
229