uart.h
Go to the documentation of this file.
1 /*
2  * KubOS HAL
3  * Copyright (C) 2016 Kubos Corporation
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
22 #ifndef K_UART_H
23 #define K_UART_H
24 
25 #include "FreeRTOS.h"
26 #include "queue.h"
27 #include <stdint.h>
28 
29 #include "pins.h"
30 
31 #ifndef K_NUM_UARTS
32 #define K_NUM_UARTS YOTTA_CFG_HARDWARE_UARTCOUNT
33 #endif
34 
35 #ifndef K_UART_CONSOLE
36 #define K_UART_CONSOLE YOTTA_CFG_HARDWARE_CONSOLE_UART
37 #endif
38 
39 #ifndef K_UART_CONSOLE_BAUDRATE
40 #define K_UART_CONSOLE_BAUDRATE YOTTA_CFG_HARDWARE_CONSOLE_BAUDRATE
41 #endif
42 
43 typedef enum {
44  K_UART1 = 0,
50 } KUARTNum;
51 
52 typedef enum {
56 } KWordLen;
57 
58 typedef enum {
62 } KStopBits;
63 
64 typedef enum {
68 } KParity;
69 
70 typedef struct {
71  const char *dev_path;
72  uint32_t baud_rate;
76 
77  uint8_t rx_queue_len;
78  uint8_t tx_queue_len;
79 } KUARTConf;
80 
81 typedef struct {
82  int dev;
84  QueueHandle_t rx_queue;
85  QueueHandle_t tx_queue;
86 } KUART;
87 
89 void k_uart_init(KUARTNum uart, KUARTConf *conf);
90 void k_uart_console_init(void);
91 
92 int k_uart_read(KUARTNum uart, char *ptr, int len);
93 int k_uart_write(KUARTNum uart, char *ptr, int len);
94 void k_uart_write_immediate(KUARTNum uart, char c);
95 
97 void k_uart_rx_queue_push(KUARTNum uart, char c, void *task_woken);
98 
99 inline int k_uart_rx_pin(KUARTNum uart) {
100  switch (uart) {
101 #ifdef YOTTA_CFG_HARDWARE_PINS_UART1_RX
102  case K_UART1: return YOTTA_CFG_HARDWARE_PINS_UART1_RX;
103 #endif
104 #ifdef YOTTA_CFG_HARDWARE_PINS_UART2_RX
105  case K_UART2: return YOTTA_CFG_HARDWARE_PINS_UART2_RX;
106 #endif
107 #ifdef YOTTA_CFG_HARDWARE_PINS_UART3_RX
108  case K_UART3: return YOTTA_CFG_HARDWARE_PINS_UART3_RX;
109 #endif
110 #ifdef YOTTA_CFG_HARDWARE_PINS_UART4_RX
111  case K_UART4: return YOTTA_CFG_HARDWARE_PINS_UART4_RX;
112 #endif
113 #ifdef YOTTA_CFG_HARDWARE_PINS_UART5_RX
114  case K_UART5: return YOTTA_CFG_HARDWARE_PINS_UART5_RX;
115 #endif
116 #ifdef YOTTA_CFG_HARDWARE_PINS_UART6_RX
117  case K_UART6: return YOTTA_CFG_HARDWARE_PINS_UART6_RX;
118 #endif
119  }
120  return -1;
121 }
122 
123 inline int k_uart_tx_pin(KUARTNum uart) {
124  switch (uart) {
125 #ifdef YOTTA_CFG_HARDWARE_PINS_UART1_TX
126  case K_UART1: return YOTTA_CFG_HARDWARE_PINS_UART1_TX;
127 #endif
128 #ifdef YOTTA_CFG_HARDWARE_PINS_UART2_TX
129  case K_UART2: return YOTTA_CFG_HARDWARE_PINS_UART2_TX;
130 #endif
131 #ifdef YOTTA_CFG_HARDWARE_PINS_UART3_TX
132  case K_UART3: return YOTTA_CFG_HARDWARE_PINS_UART3_TX;
133 #endif
134 #ifdef YOTTA_CFG_HARDWARE_PINS_UART4_TX
135  case K_UART4: return YOTTA_CFG_HARDWARE_PINS_UART4_TX;
136 #endif
137 #ifdef YOTTA_CFG_HARDWARE_PINS_UART5_TX
138  case K_UART5: return YOTTA_CFG_HARDWARE_PINS_UART5_TX;
139 #endif
140 #ifdef YOTTA_CFG_HARDWARE_PINS_UART6_TX
141  case K_UART6: return YOTTA_CFG_HARDWARE_PINS_UART6_TX;
142 #endif
143  }
144  return -1;
145 }
146 
147 // private APIs
149 void kprv_uart_dev_init(KUARTNum uart);
151 #endif
152 
153 /* @} */
KStopBits
Definition: uart.h:58
int dev
Definition: uart.h:82
KUART * kprv_uart_get(KUARTNum uart)
KStopBits stop_bits
Definition: uart.h:74
Definition: uart.h:53
void kprv_uart_enable_tx_int(KUARTNum uart)
KParity
Definition: uart.h:64
Definition: uart.h:70
Definition: uart.h:46
int k_uart_write(KUARTNum uart, char *ptr, int len)
Definition: uart.h:60
Definition: uart.h:55
void k_uart_console_init(void)
Definition: uart.h:45
void kprv_uart_dev_init(KUARTNum uart)
Definition: uart.h:47
Definition: uart.h:44
Definition: uart.h:59
Definition: uart.h:66
KUARTNum
Definition: uart.h:43
Definition: uart.h:65
KUARTConf conf
Definition: uart.h:83
Definition: uart.h:49
uint8_t tx_queue_len
Definition: uart.h:78
QueueHandle_t rx_queue
Definition: uart.h:84
Definition: uart.h:54
KWordLen
Definition: uart.h:52
Definition: uart.h:48
Definition: uart.h:67
Definition: uart.h:61
uint8_t rx_queue_len
Definition: uart.h:77
int k_uart_read(KUARTNum uart, char *ptr, int len)
int k_uart_rx_queue_len(KUARTNum uart)
int k_uart_rx_pin(KUARTNum uart)
Definition: uart.h:99
QueueHandle_t tx_queue
Definition: uart.h:85
void k_uart_init(KUARTNum uart, KUARTConf *conf)
KParity parity
Definition: uart.h:75
uint32_t baud_rate
Definition: uart.h:72
KWordLen word_len
Definition: uart.h:73
KUARTConf k_uart_conf_defaults(void)
const char * dev_path
Definition: uart.h:71
void k_uart_write_immediate(KUARTNum uart, char c)
Definition: uart.h:81
void k_uart_rx_queue_push(KUARTNum uart, char c, void *task_woken)
int k_uart_tx_pin(KUARTNum uart)
Definition: uart.h:123