Hardware Abstraction Layer for FreeRTOS
uart.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Author: Andreas Werner <kernel@andy89.org>
4  * Date: 2016
5  */
6 #ifndef UART_H_
7 #define UART_H_
8 #include <FreeRTOS.h>
9 #include <semphr.h>
10 #include <stdint.h>
11 #include <stdbool.h>
12 #include <system.h>
13 #include <hal.h>
27 struct uart;
28 #ifdef CONFIG_UART_MULTI
29 
32 struct uart_ops {
33  struct uart *(*uart_init)(uint8_t port, uint32_t baudrate);
34  int32_t (*uart_deinit)(struct uart *uart);
35  char (*uart_getc)(struct uart *uart, TickType_t waittime);
36  int32_t (*uart_putc)(struct uart *uart, char c, TickType_t waittime);
37 # ifndef CONFIG_UART_GENERIC_BYTE
38  int32_t (*uart_read)(struct uart *uart, uint8_t *data, size_t length, TickType_t waittime);
39  int32_t (*uart_write)(struct uart *uart, uint8_t *data, size_t length, TickType_t waittime);
40 # endif
41 # ifndef CONFIG_UART_GENERIC_STRING
42  int32_t (*uart_puts)(struct uart *uart, char *s, TickType_t waittime);
43 # endif
44 
45  char (*uart_getcISR)(struct uart *uart);
46  int32_t (*uart_putcISR)(struct uart *uart, char c);
47 # ifndef CONFIG_UART_GENERIC_BYTE
48  int32_t (*uart_readISR)(struct uart *uart, uint8_t *data, size_t length);
49  int32_t (*uart_writeISR)(struct uart *uart, uint8_t *data, size_t length);
50 # endif
51 # ifndef CONFIG_UART_GENERIC_STRING
52  int32_t (*uart_putsISR)(struct uart *uart, char *s);
53 # endif
54 };
55 #endif
56 
60 struct uart_generic {
65  bool init;
66 #ifdef CONFIG_INSTANCE_NAME
67 
70  const char *name;
71 #endif
72 #ifdef CONFIG_UART_THREAD_SAVE
73 
77 #endif
78 #ifdef CONFIG_UART_MULTI
79 
82  const struct uart_ops *ops;
83 #endif
84 };
85 #ifndef CONFIG_UART_MULTI
86 
92 struct uart *uart_init(uint8_t port, uint32_t baudrate);
98 int32_t uart_deinit(struct uart *uart);
105 char uart_getc(struct uart *uart, TickType_t waittime);
113 int32_t uart_putc(struct uart *uart, char c, TickType_t waittime);
122 int32_t uart_read(struct uart *uart, uint8_t *data, size_t length, TickType_t waittime);
131 int32_t uart_write(struct uart *uart, uint8_t *data, size_t length, TickType_t waittime);
139 int32_t uart_puts(struct uart *uart, char *s, TickType_t waittime);
145 char uart_getcISR(struct uart *uart);
152 int32_t uart_putcISR(struct uart *uart, char c);
160 int32_t uart_readISR(struct uart *uart, uint8_t *data, size_t length);
168 int32_t uart_writeISR(struct uart *uart, uint8_t *data, size_t length);
175 int32_t uart_putsISR(struct uart *uart, char *s);
176 #else
177 /* #ifdef CONFIG_UART_MULTI */
178 inline struct uart *uart_init(uint8_t port, uint32_t baudrate) {
180  struct uart_generic *uart = (struct uart_generic *) HAL_GET_DEV(uart, port);
181  if (uart == NULL) {
182  return NULL;
183  }
184  return uart->ops->uart_init(port, baudrate);
185 }
186 inline int32_t uart_deinit(struct uart *uart) {
187  struct uart_generic *u = (struct uart_generic *) uart;
188  return u->ops->uart_deinit(uart);
189 }
190 inline char uart_getc(struct uart *uart, TickType_t waittime) {
191  struct uart_generic *u = (struct uart_generic *) uart;
192  return u->ops->uart_getc(uart, waittime);
193 }
194 inline int32_t uart_putc(struct uart *uart, char c, TickType_t waittime) {
195  struct uart_generic *u = (struct uart_generic *) uart;
196  return u->ops->uart_putc(uart, c, waittime);
197 }
198 # ifndef CONFIG_UART_GENERIC_BYTE
199 inline int32_t uart_read(struct uart *uart, uint8_t *data, size_t length, TickType_t waittime) {
200  struct uart_generic *u = (struct uart_generic *) uart;
201  return u->ops->uart_read(uart, data, length, waittime);
202 }
203 inline int32_t uart_write(struct uart *uart, uint8_t *data, size_t length, TickType_t waittime) {
204  struct uart_generic *u = (struct uart_generic *) uart;
205  return u->ops->uart_write(uart, data, length, waittime);
206 }
207 # else
208 int32_t uart_read(struct uart *uart, uint8_t *data, size_t length, TickType_t waittime);
209 int32_t uart_write(struct uart *uart, uint8_t *data, size_t length, TickType_t waittime);
210 # endif
211 # ifndef CONFIG_UART_GENERIC_STRING
212 inline int32_t uart_puts(struct uart *uart, char *s, TickType_t waittime) {
213  struct uart_generic *u = (struct uart_generic *) uart;
214  return u->ops->uart_puts(uart, s, waittime);
215 }
216 # else
217 int32_t uart_puts(struct uart *uart, char *s, TickType_t waittime);
218 # endif
219 inline char uart_getcISR(struct uart *uart) {
220  struct uart_generic *u = (struct uart_generic *) uart;
221  return u->ops->uart_getcISR(uart);
222 }
223 inline int32_t uart_putcISR(struct uart *uart, char c) {
224  struct uart_generic *u = (struct uart_generic *) uart;
225  return u->ops->uart_putcISR(uart, c);
226 }
227 # ifndef CONFIG_UART_GENERIC_BYTE
228 inline int32_t uart_readISR(struct uart *uart, uint8_t *data, size_t length) {
229  struct uart_generic *u = (struct uart_generic *) uart;
230  return u->ops->uart_readISR(uart, data, length);
231 }
232 inline int32_t uart_writeISR(struct uart *uart, uint8_t *data, size_t length) {
233  struct uart_generic *u = (struct uart_generic *) uart;
234  return u->ops->uart_writeISR(uart, data, length);
235 }
236 # endif
237 # ifndef CONFIG_UART_GENERIC_STRING
238 inline int32_t uart_putsISR(struct uart *uart, char *s) {
239  struct uart_generic *u = (struct uart_generic *) uart;
240  return u->ops->uart_putsISR(uart, s);
241 }
242 # endif
243 #endif
244 
245 #endif
uart_init
struct uart * uart_init(uint8_t port, uint32_t baudrate)
uart_generic::init
bool init
Definition: uart.h:65
uart_generic
Definition: uart.h:60
OS_DEFINE_MUTEX_RECURSIVE
#define OS_DEFINE_MUTEX_RECURSIVE(name)
Definition: os.h:59
uart_write
int32_t uart_write(struct uart *uart, uint8_t *data, size_t length, TickType_t waittime)
hal.h
uart_readISR
int32_t uart_readISR(struct uart *uart, uint8_t *data, size_t length)
uart_puts
int32_t uart_puts(struct uart *uart, char *s, TickType_t waittime)
uart_getcISR
char uart_getcISR(struct uart *uart)
HAL_DEFINE_GLOBAL_ARRAY
#define HAL_DEFINE_GLOBAL_ARRAY(gns)
Definition: hal.h:149
uart_getc
char uart_getc(struct uart *uart, TickType_t waittime)
HAL_GET_DEV
#define HAL_GET_DEV(gns, index)
Definition: hal.h:182
uart_putsISR
int32_t uart_putsISR(struct uart *uart, char *s)
uart
Definition: remoteproc_trace.h:4
uart_read
int32_t uart_read(struct uart *uart, uint8_t *data, size_t length, TickType_t waittime)
system.h
uart_writeISR
int32_t uart_writeISR(struct uart *uart, uint8_t *data, size_t length)
uart_putc
int32_t uart_putc(struct uart *uart, char c, TickType_t waittime)
uart_putcISR
int32_t uart_putcISR(struct uart *uart, char c)
uart_deinit
int32_t uart_deinit(struct uart *uart)