XCORE SDK
XCORE Software Development Kit
rtos_uart_rx.h
1 // Copyright 2022 XMOS LIMITED.
2 // This Software is subject to the terms of the XMOS Public Licence: Version 1.
3 
4 #ifndef RTOS_UART_RX_H_
5 #define RTOS_UART_RX_H_
6 
14 #include <xcore/channel_streaming.h>
15 #include "uart.h"
16 
17 #include "rtos_osal.h"
18 #include "stream_buffer.h"
19 
23 #define UR_COMPLETE_CB_CODE 0
24 #define UR_STARTED_CB_CODE 1
25 #define UR_START_BIT_ERR_CB_CODE 2
26 #define UR_PARITY_ERR_CB_CODE 3
27 #define UR_FRAMING_ERR_CB_CODE 4
28 #define UR_OVERRUN_ERR_CB_CODE 5
29 
33 #define UR_COMPLETE_CB_FLAG (1 << UR_COMPLETE_CB_CODE)
34 #define UR_STARTED_CB_FLAG (1 << UR_STARTED_CB_CODE)
35 #define UR_START_BIT_ERR_CB_FLAG (1 << UR_START_BIT_ERR_CB_CODE)
36 #define UR_PARITY_ERR_CB_FLAG (1 << UR_PARITY_ERR_CB_CODE)
37 #define UR_FRAMING_ERR_CB_FLAG (1 << UR_FRAMING_ERR_CB_CODE)
38 #define UR_OVERRUN_ERR_CB_FLAG (1 << UR_OVERRUN_ERR_CB_CODE)
39 
40 #if (UR_START_BIT_ERR_CB_CODE != UART_START_BIT_ERROR_VAL)
41 #error Please align the HIL uart_callback_code_t with CB codes in rtos_uart_rx.c
42 #endif /* We use this alignment as an optimisation */
43 
44 #define RX_ERROR_FLAGS (UR_START_BIT_ERR_CB_FLAG | UR_PARITY_ERR_CB_FLAG | UR_FRAMING_ERR_CB_FLAG)
45 #define RX_ALL_FLAGS (UR_COMPLETE_CB_FLAG | UR_STARTED_CB_FLAG | RX_ERROR_FLAGS)
46 
47 
56 #ifndef RTOS_UART_RX_BUF_LEN
57 #define RTOS_UART_RX_BUF_LEN (64 + 1)
58 #endif
59 
64 #define RTOS_UART_RX_CALLBACK_ATTR __attribute__((fptrgroup("rtos_uart_rx_callback_fptr_grp")))
65 
70 #define RTOS_UART_RX_CALL_ATTR __attribute__((fptrgroup("rtos_uart_rx_call_fptr_grp")))
71 
75 typedef struct rtos_uart_rx_struct rtos_uart_rx_t;
76 
88 
98 
99 
112 typedef void (*rtos_uart_rx_error_t)(rtos_uart_rx_t *ctx, uint8_t err_flags);
113 
120  uart_rx_t dev;
121 
122  RTOS_UART_RX_CALL_ATTR void (*read)(rtos_uart_rx_t *, uint8_t buf[], size_t *num_bytes);
123 
124  void *app_data;
125 
129 
130  streaming_channel_t c;
131 
132  uart_buffer_t isr_to_app_fifo;
133  uint8_t isr_to_app_fifo_storage[RTOS_UART_RX_BUF_LEN];
134  uint8_t cb_flags;
135  StreamBufferHandle_t app_byte_buffer;
136 
137  rtos_osal_thread_t hil_thread;
138  rtos_osal_thread_t app_thread;
139 };
140 
141 
153 size_t rtos_uart_rx_read(rtos_uart_rx_t *uart_rx_ctx, uint8_t *buf, size_t n, rtos_osal_tick_t timeout);
154 
155 
161 void rtos_uart_rx_reset_buffer(rtos_uart_rx_t *uart_rx_ctx);
162 
163 
182 void rtos_uart_rx_init(
183  rtos_uart_rx_t *uart_rx_ctx,
184  uint32_t io_core_mask,
185  port_t rx_port,
186  uint32_t baud_rate,
187  uint8_t data_bits,
188  uart_parity_t parity,
189  uint8_t stop_bits,
190  hwtimer_t tmr
191  );
192 
213  rtos_uart_rx_t *uart_rx_ctx,
214  void *app_data,
216  rtos_uart_rx_complete_cb_t rx_complete,
217  rtos_uart_rx_error_t error,
218  unsigned interrupt_core_id,
219  unsigned priority,
220  size_t app_rx_buff_size);
221 
222 
225 #endif /* RTOS_UART_RX */
uart_parity_t
Definition: uart.h:29
#define RTOS_UART_RX_BUF_LEN
Definition: rtos_uart_rx.h:57
void rtos_uart_rx_init(rtos_uart_rx_t *uart_rx_ctx, uint32_t io_core_mask, port_t rx_port, uint32_t baud_rate, uint8_t data_bits, uart_parity_t parity, uint8_t stop_bits, hwtimer_t tmr)
Definition: rtos_uart_rx.c:124
void(* rtos_uart_rx_error_t)(rtos_uart_rx_t *ctx, uint8_t err_flags)
Definition: rtos_uart_rx.h:112
void(* rtos_uart_rx_started_cb_t)(rtos_uart_rx_t *ctx)
Definition: rtos_uart_rx.h:87
#define RTOS_UART_RX_CALLBACK_ATTR
Definition: rtos_uart_rx.h:64
size_t rtos_uart_rx_read(rtos_uart_rx_t *uart_rx_ctx, uint8_t *buf, size_t n, rtos_osal_tick_t timeout)
Definition: rtos_uart_rx.c:104
void rtos_uart_rx_start(rtos_uart_rx_t *uart_rx_ctx, void *app_data, rtos_uart_rx_started_cb_t start, rtos_uart_rx_complete_cb_t rx_complete, rtos_uart_rx_error_t error, unsigned interrupt_core_id, unsigned priority, size_t app_rx_buff_size)
void rtos_uart_rx_reset_buffer(rtos_uart_rx_t *uart_rx_ctx)
Definition: rtos_uart_rx.c:119
void(* rtos_uart_rx_complete_cb_t)(rtos_uart_rx_t *ctx)
Definition: rtos_uart_rx.h:97
#define RTOS_UART_RX_CALL_ATTR
Definition: rtos_uart_rx.h:70
Definition: rtos_uart_rx.h:119
Definition: uart.h:208
API for UART I/O.