Contiki-NG
sl_uartdrv_init.c
1#include "uartdrv.h"
2#include "sl_uartdrv_instances.h"
3#include <stddef.h>
4
5#include "sl_uartdrv_usart_vcom_config.h"
6
7UARTDRV_HandleData_t sl_uartdrv_usart_vcom_handle_data;
8UARTDRV_Handle_t sl_uartdrv_usart_vcom_handle = &sl_uartdrv_usart_vcom_handle_data;
9
10static UARTDRV_Handle_t sli_uartdrv_default_handle = NULL;
11
12/* If CTS and RTS not defined, define a default value to avoid errors */
13#ifndef SL_UARTDRV_USART_VCOM_CTS_PORT
14#define SL_UARTDRV_USART_VCOM_CTS_PORT gpioPortA
15#define SL_UARTDRV_USART_VCOM_CTS_PIN 0
16#if defined(_USART_ROUTELOC1_MASK)
17#define SL_UARTDRV_USART_VCOM_CTS_LOC 0
18#endif
19#endif
20
21#ifndef SL_UARTDRV_USART_VCOM_RTS_PORT
22#define SL_UARTDRV_USART_VCOM_RTS_PORT gpioPortA
23#define SL_UARTDRV_USART_VCOM_RTS_PIN 0
24#if defined(_USART_ROUTELOC1_MASK)
25#define SL_UARTDRV_USART_VCOM_RTS_LOC 0
26#endif
27#endif
28
29
30/* Define RX and TX buffer queues */
31DEFINE_BUF_QUEUE(SL_UARTDRV_USART_VCOM_RX_BUFFER_SIZE, sl_uartdrv_usart_vcom_rx_buffer);
32DEFINE_BUF_QUEUE(SL_UARTDRV_USART_VCOM_TX_BUFFER_SIZE, sl_uartdrv_usart_vcom_tx_buffer);
33
34
35/* Create uartdrv initialization structs */
36UARTDRV_InitUart_t sl_uartdrv_usart_init_vcom = {
37 .port = SL_UARTDRV_USART_VCOM_PERIPHERAL,
38 .baudRate = SL_UARTDRV_USART_VCOM_BAUDRATE,
39#if defined(_USART_ROUTELOC0_MASK)
40 .portLocationTx = SL_UARTDRV_USART_VCOM_TX_LOC,
41 .portLocationRx = SL_UARTDRV_USART_VCOM_RX_LOC,
42#elif defined(_USART_ROUTE_MASK)
43 .portLocation = SL_UARTDRV_USART_VCOM_ROUTE_LOC,
44#elif defined(_GPIO_USART_ROUTEEN_MASK)
45 .txPort = SL_UARTDRV_USART_VCOM_TX_PORT,
46 .rxPort = SL_UARTDRV_USART_VCOM_RX_PORT,
47 .txPin = SL_UARTDRV_USART_VCOM_TX_PIN,
48 .rxPin = SL_UARTDRV_USART_VCOM_RX_PIN,
49 .uartNum = SL_UARTDRV_USART_VCOM_PERIPHERAL_NO,
50#endif
51 .stopBits = SL_UARTDRV_USART_VCOM_STOP_BITS,
52 .parity = SL_UARTDRV_USART_VCOM_PARITY,
53 .oversampling = SL_UARTDRV_USART_VCOM_OVERSAMPLING,
54#if defined(USART_CTRL_MVDIS)
55 .mvdis = SL_UARTDRV_USART_VCOM_MVDIS,
56#endif
57 .fcType = SL_UARTDRV_USART_VCOM_FLOW_CONTROL_TYPE,
58 .ctsPort = SL_UARTDRV_USART_VCOM_CTS_PORT,
59 .rtsPort = SL_UARTDRV_USART_VCOM_RTS_PORT,
60 .ctsPin = SL_UARTDRV_USART_VCOM_CTS_PIN,
61 .rtsPin = SL_UARTDRV_USART_VCOM_RTS_PIN,
62 .rxQueue = (UARTDRV_Buffer_FifoQueue_t *)&sl_uartdrv_usart_vcom_rx_buffer,
63 .txQueue = (UARTDRV_Buffer_FifoQueue_t *)&sl_uartdrv_usart_vcom_tx_buffer,
64#if defined(_USART_ROUTELOC1_MASK)
65 .portLocationCts = SL_UARTDRV_USART_VCOM_CTS_LOC,
66 .portLocationRts = SL_UARTDRV_USART_VCOM_RTS_LOC,
67#endif
68};
69
70
71void sl_uartdrv_init_instances(void){
72 UARTDRV_InitUart(sl_uartdrv_usart_vcom_handle, &sl_uartdrv_usart_init_vcom);
73 sl_uartdrv_set_default(sl_uartdrv_usart_vcom_handle);
74}
75
76sl_status_t sl_uartdrv_set_default(UARTDRV_Handle_t handle)
77{
78 sl_status_t status = SL_STATUS_INVALID_HANDLE;
79
80 if (handle != NULL) {
81 sli_uartdrv_default_handle = handle;
82 status = SL_STATUS_OK;
83 }
84
85 return status;
86}
87
88UARTDRV_Handle_t sl_uartdrv_get_default(void)
89{
90 return sli_uartdrv_default_handle;
91}