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 
30 #define UR_COMPLETE_CB_FLAG (1 << UR_COMPLETE_CB_CODE)
31 #define UR_STARTED_CB_FLAG (1 << UR_STARTED_CB_CODE)
32 #define UR_START_BIT_ERR_CB_FLAG (1 << UR_START_BIT_ERR_CB_CODE)
33 #define UR_PARITY_ERR_CB_FLAG (1 << UR_PARITY_ERR_CB_CODE)
34 #define UR_FRAMING_ERR_CB_FLAG (1 << UR_FRAMING_ERR_CB_CODE)
35 #define UR_OVERRUN_ERR_CB_FLAG (1 << UR_OVERRUN_ERR_CB_CODE)
36 
37 #if (UR_START_BIT_ERR_CB_CODE != UART_START_BIT_ERROR_VAL)
38 #error Please align the HIL uart_callback_code_t with CB codes in rtos_uart_rx.c
39 #endif /* We use this alignment as an optimisation */
40 
41 #define RX_ERROR_FLAGS (UR_START_BIT_ERR_CB_FLAG | UR_PARITY_ERR_CB_FLAG | UR_FRAMING_ERR_CB_FLAG)
42 #define RX_ALL_FLAGS (UR_COMPLETE_CB_FLAG | UR_STARTED_CB_FLAG | RX_ERROR_FLAGS)
43 
44 
53 #ifndef RTOS_UART_RX_BUF_LEN
54 #define RTOS_UART_RX_BUF_LEN (64 + 1)
55 #endif
56 
61 #define RTOS_UART_RX_CALLBACK_ATTR __attribute__((fptrgroup("rtos_uart_rx_callback_fptr_grp")))
62 
67 #define RTOS_UART_RX_CALL_ATTR __attribute__((fptrgroup("rtos_uart_rx_call_fptr_grp")))
68 
72 typedef struct rtos_uart_rx_struct rtos_uart_rx_t;
73 
85 
95 
96 
109 typedef void (*rtos_uart_rx_error_t)(rtos_uart_rx_t *ctx, uint8_t err_flags);
110 
117  uart_rx_t dev;
118 
119  /* TODO Not currently used. Either incorporate or stick with streambuffer usages */
120  RTOS_UART_RX_CALL_ATTR void (*read)(rtos_uart_rx_t *, uint8_t buf[], size_t *num_bytes);
121 
122  void *app_data;
123 
127 
128  streaming_channel_t c;
129 
130  uart_buffer_t isr_to_app_fifo;
131  uint8_t isr_to_app_fifo_storage[RTOS_UART_RX_BUF_LEN];
132  uint8_t cb_flags;
133  StreamBufferHandle_t app_byte_buffer;
134 
135  rtos_osal_thread_t hil_thread;
136  rtos_osal_thread_t app_thread;
137 };
138 
139 
151 size_t rtos_uart_rx_read(rtos_uart_rx_t *uart_rx_ctx, uint8_t *buf, size_t n, rtos_osal_tick_t timeout);
152 
153 
159 void rtos_uart_rx_reset_buffer(rtos_uart_rx_t *uart_rx_ctx);
160 
161 
178 void rtos_uart_rx_init(
179  rtos_uart_rx_t *uart_rx_ctx,
180  uint32_t io_core_mask,
181  port_t rx_port,
182  uint32_t baud_rate,
183  uint8_t data_bits,
184  uart_parity_t parity,
185  uint8_t stop_bits,
186  hwtimer_t tmr
187  );
188 
209  rtos_uart_rx_t *uart_rx_ctx,
210  void *app_data,
212  rtos_uart_rx_complete_cb_t rx_complete,
213  rtos_uart_rx_error_t error,
214  unsigned interrupt_core_id,
215  unsigned priority,
216  size_t app_rx_buff_size);
217 
218 
221 #endif /* RTOS_UART_RX */
uart_parity_t
Definition: uart.h:29
#define RTOS_UART_RX_BUF_LEN
Definition: rtos_uart_rx.h:54
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:109
void(* rtos_uart_rx_started_cb_t)(rtos_uart_rx_t *ctx)
Definition: rtos_uart_rx.h:84
#define RTOS_UART_RX_CALLBACK_ATTR
Definition: rtos_uart_rx.h:61
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:94
#define RTOS_UART_RX_CALL_ATTR
Definition: rtos_uart_rx.h:67
Definition: rtos_uart_rx.h:116
Definition: uart.h:101
API for UART I/O.