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_uart.h
31  *
32  * @brief Declares UART functions.
33  *
34  * These functions are used for UART initialization,
35  * data input/output, and data flow control. \n
36  *
37  * @since 2.2
38  * @version 2.2
39  */
40 
41 #ifndef IOT_UART_H
42 #define IOT_UART_H
43 
44 /**
45  * @brief Enumerates the number of UART data bits.
46  *
47  * @since 2.2
48  * @version 2.2
49  */
50 typedef enum {
51     /** 5 data bits */
52     IOT_UART_DATA_BIT_5 = 5,
53     /** 6 data bits */
54     IOT_UART_DATA_BIT_6,
55     /** 7 data bits */
56     IOT_UART_DATA_BIT_7,
57     /** 8 data bits */
58     IOT_UART_DATA_BIT_8,
59 } IotUartIdxDataBit;
60 
61 /**
62  * @brief Enumerates the number of UART stop bits.
63  *
64  * @since 2.2
65  * @version 2.2
66  */
67 typedef enum {
68     /** 1 stop bit */
69     IOT_UART_STOP_BIT_1 = 1,
70     /** 2 stop bits */
71     IOT_UART_STOP_BIT_2 = 2,
72 } IotUartStopBit;
73 
74 /**
75  * @brief Enumerates UART parity bits.
76  *
77  * @since 2.2
78  * @version 2.2
79  */
80 typedef enum {
81     /** No parity */
82     IOT_UART_PARITY_NONE = 0,
83     /** Odd parity */
84     IOT_UART_PARITY_ODD = 1,
85     /** Even parity */
86     IOT_UART_PARITY_EVEN = 2,
87 } IotUartParity;
88 
89 /**
90  * @brief Enumerates UART block states.
91  *
92  * @since 2.2
93  * @version 2.2
94  */
95 typedef enum {
96     /** Block disabled */
97     IOT_UART_BLOCK_STATE_NONE_BLOCK = 0,
98     /** Block enabled */
99     IOT_UART_BLOCK_STATE_BLOCK,
100 } IotUartBlockState;
101 
102 /**
103  * @brief Enumerates hardware flow control modes.
104  *
105  * @since 2.2
106  * @version 2.2
107  */
108 typedef enum {
109     /** Hardware flow control disabled */
110     IOT_FLOW_CTRL_NONE,
111     /** RTS and CTS hardware flow control enabled */
112     IOT_FLOW_CTRL_RTS_CTS,
113     /** RTS hardware flow control enabled */
114     IOT_FLOW_CTRL_RTS_ONLY,
115      /** CTS hardware flow control enabled */
116     IOT_FLOW_CTRL_CTS_ONLY,
117 } IotFlowCtrl;
118 
119 /**
120  * @brief Defines basic attributes of a UART port.
121  *
122  * @since 2.2
123  * @version 2.2
124  */
125 typedef struct {
126     /** Baud rate */
127     unsigned int baudRate;
128     /** Data bits */
129     IotUartIdxDataBit dataBits;
130     /** Stop bit */
131     IotUartStopBit stopBits;
132     /** Parity */
133     IotUartParity parity;
134     /** Rx block state */
135     IotUartBlockState rxBlock;
136     /** Tx block state */
137     IotUartBlockState txBlock;
138     /** Padding bit */
139     unsigned char pad;
140 } IotUartAttribute;
141 
142 /**
143  * @brief Configures a UART device with the port number specified by <b>id</b>
144  * based on the basic and extended attributes.
145  *
146  *
147  *
148  * @param id Indicates the port number of the UART device.
149  * @param param Indicates the pointer to the UART attributes.
150  * @return Returns {@link IOT_SUCCESS} if the UART device is configured successfully;
151  * returns {@link IOT_FAILURE} otherwise. For details about other return values, see the chip description.
152  * @since 2.2
153  * @version 2.2
154  */
155 unsigned int IoTUartInit(unsigned int id, const IotUartAttribute *param);
156 
157 /**
158  * @brief Reads a specified length of data from a UART device with the port number specified by <b>id</b>.
159  *
160  *
161  *
162  * @param id Indicates the port number of the UART device.
163  * @param data Indicates the pointer to the start address of the data to read.
164  * @param dataLen Indicates the number of bytes to read.
165  * @return Returns the number of bytes read if the operation is successful; returns <b>-1</b> otherwise.
166  * @since 2.2
167  * @version 2.2
168  */
169 int IoTUartRead(unsigned int id, unsigned char *data, unsigned int dataLen);
170 
171 /**
172  * @brief Writes a specified length of data to a UART device with the port number specified by <b>id</b>.
173  *
174  *
175  *
176  * @param id Indicates the port number of the UART device.
177  * @param data Indicates the pointer to the start address of the data to write.
178  * @param dataLen Indicates the number of bytes to write.
179  * @return Returns the number of bytes written if the operation is successful; returns <b>-1</b> otherwise.
180  * @since 2.2
181  * @version 2.2
182  */
183 int IoTUartWrite(unsigned int id, const unsigned char *data, unsigned int dataLen);
184 
185 /**
186  * @brief Deinitializes a UART device.
187  *
188  * @param id Indicates the port number of the UART device.
189  * @return Returns {@link IOT_SUCCESS} if the UART device is deinitialized;
190  * returns {@link IOT_FAILURE} otherwise. For details about other return values, see the chip description.
191  * @since 2.2
192  * @version 2.2
193  */
194 unsigned int IoTUartDeinit(unsigned int id);
195 
196 /**
197  * @brief Sets flow control for a UART device with the port number specified by <b>id</b>.
198  *
199  *
200  *
201  * @param id Indicates the port number of the UART device.
202  * @param flowCtrl Indicates the flow control parameters, as enumerated in {@link IotFlowCtrl}.
203  * @return Returns {@link IOT_SUCCESS} if flow control is set successfully;
204  * returns {@link IOT_FAILURE} otherwise. For details about other return values, see the chip description.
205  * @since 2.2
206  * @version 2.2
207  */
208 unsigned int IoTUartSetFlowCtrl(unsigned int id, IotFlowCtrl flowCtrl);
209 
210 #endif // IOT_UART_H
211 /** @} */
212