uart.h
浏览该文件的文档.
1 /*
2  * Copyright (C) 2020-2021 Alibaba Group Holding Limited
3  */
4 
5 #ifndef AOS_UART_H
6 #define AOS_UART_H
7 
8 #include <aos/tty.h>
9 
18 typedef aos_tty_ref_t aos_uart_ref_t;
19 
20 typedef enum {
25 
26 #define aos_uart_put aos_tty_put
27 #define aos_uart_get_attr aos_tty_get_attr
28 #define aos_uart_set_attr aos_tty_set_attr
29 #define aos_uart_read aos_tty_read
30 #define aos_uart_write aos_tty_write
31 
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35 
36 static inline aos_status_t aos_uart_get(aos_uart_ref_t *ref, uint32_t id)
37 {
38  struct termios termios;
39  aos_status_t ret;
40 
41  ret = aos_tty_get(ref, id);
42  if (ret)
43  return ret;
44 
45  ret = aos_tty_get_attr(ref, &termios);
46  if (ret) {
47  aos_tty_put(ref);
48  return ret;
49  }
50 
51  cfmakeraw(&termios);
52  termios.c_cflag |= CREAD;
53  termios.c_cc[VMIN] = 0;
54  termios.c_cc[VTIME] = 0;
55 
56  ret = aos_tty_set_attr(ref, TCSANOW, &termios);
57  if (ret) {
58  aos_tty_put(ref);
59  return ret;
60  }
61 
62  return 0;
63 }
64 
65 static inline aos_status_t
66 aos_uart_get_with_attr(aos_uart_ref_t *ref, uint32_t id, uint32_t baudrate, aos_uart_parity_t parity)
67 {
68  struct termios termios;
69  aos_status_t ret;
70 
71  ret = aos_tty_get(ref, id);
72  if (ret)
73  return ret;
74 
75  ret = aos_tty_get_attr(ref, &termios);
76  if (ret) {
77  aos_tty_put(ref);
78  return ret;
79  }
80 
81  cfmakeraw(&termios);
82  termios.c_cflag |= CREAD;
83  termios.c_cflag &= ~(PARENB | PARODD);
84  termios.c_cc[VMIN] = 0;
85  termios.c_cc[VTIME] = 0;
86 
87  if (cfsetspeed(&termios, baudrate)) {
88  aos_tty_put(ref);
89  return -EINVAL;
90  }
91 
92  switch (parity) {
94  break;
96  termios.c_cflag |= PARENB | PARODD;
97  break;
99  termios.c_cflag |= PARENB;
100  break;
101  default:
102  aos_tty_put(ref);
103  return -EINVAL;
104  }
105 
106  ret = aos_tty_set_attr(ref, TCSANOW, &termios);
107  if (ret) {
108  aos_tty_put(ref);
109  return ret;
110  }
111 
112  return 0;
113 }
114 
115 #ifdef __cplusplus
116 }
117 #endif
118 
121 #endif /* AOS_UART_H */
int32_t aos_status_t
Definition: kernel.h:185
aos_tty_ref_t aos_uart_ref_t
Definition: uart.h:18
aos_uart_parity_t
Definition: uart.h:20
@ AOS_UART_PARITY_NONE
Definition: uart.h:21
@ AOS_UART_PARITY_ODD
Definition: uart.h:22
@ AOS_UART_PARITY_EVEN
Definition: uart.h:23