Line data Source code
1 1 : /*
2 : * Copyright (c) 2023 Fabian Blatz
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : /**
8 : * @file
9 : * @brief Backend API for emulated UART
10 : */
11 :
12 : #ifndef ZEPHYR_INCLUDE_DRIVERS_SERIAL_UART_EMUL_H_
13 : #define ZEPHYR_INCLUDE_DRIVERS_SERIAL_UART_EMUL_H_
14 :
15 : #include <zephyr/device.h>
16 : #include <zephyr/types.h>
17 :
18 : #ifdef __cplusplus
19 : extern "C" {
20 : #endif
21 :
22 : /**
23 : * @brief Define the application callback function signature for
24 : * uart_emul_callback_tx_data_ready_set() function.
25 : *
26 : * @param dev UART device instance
27 : * @param size Number of available bytes in TX buffer
28 : * @param user_data Arbitrary user data
29 : */
30 1 : typedef void (*uart_emul_callback_tx_data_ready_t)(const struct device *dev, size_t size,
31 : void *user_data);
32 :
33 : /**
34 : * @brief Set the TX data ready callback
35 : *
36 : * This sets up the callback that is called every time data
37 : * was appended to the TX buffer.
38 : *
39 : * @param dev The emulated UART device instance
40 : * @param cb Pointer to the callback function
41 : * @param user_data Data to pass to callback function
42 : */
43 1 : void uart_emul_callback_tx_data_ready_set(const struct device *dev,
44 : uart_emul_callback_tx_data_ready_t cb, void *user_data);
45 :
46 : /**
47 : * @brief Write (copy) data to RX buffer
48 : *
49 : * @param dev The emulated UART device instance
50 : * @param data The data to append
51 : * @param size Number of bytes to append
52 : *
53 : * @return Number of bytes appended
54 : */
55 1 : uint32_t uart_emul_put_rx_data(const struct device *dev, const uint8_t *data, size_t size);
56 :
57 : /**
58 : * @brief Read data from TX buffer
59 : *
60 : * @param dev The emulated UART device instance
61 : * @param data The address of the output buffer
62 : * @param size Number of bytes to read
63 : *
64 : * @return Number of bytes written to the output buffer
65 : */
66 1 : uint32_t uart_emul_get_tx_data(const struct device *dev, uint8_t *data, size_t size);
67 :
68 : /**
69 : * @brief Clear RX buffer content
70 : *
71 : * @param dev The emulated UART device instance
72 : *
73 : * @return Number of cleared bytes
74 : */
75 1 : uint32_t uart_emul_flush_rx_data(const struct device *dev);
76 :
77 : /**
78 : * @brief Clear TX buffer content
79 : *
80 : * @param dev The emulated UART device instance
81 : *
82 : * @return Number of cleared bytes
83 : */
84 1 : uint32_t uart_emul_flush_tx_data(const struct device *dev);
85 :
86 : /**
87 : * @brief Sets one or more driver errors
88 : *
89 : * @param dev The emulated UART device instance
90 : * @param errors The @ref uart_rx_stop_reason errors to set
91 : */
92 1 : void uart_emul_set_errors(const struct device *dev, int errors);
93 :
94 : /**
95 : * @brief Configures if rx buffer should be released on timeout, even when only partially filled.
96 : *
97 : * @param dev The emulated UART device instance
98 : * @param release_on_timeout When true, buffer will be released on timeout
99 : */
100 1 : void uart_emul_set_release_buffer_on_timeout(const struct device *dev, bool release_on_timeout);
101 :
102 : #ifdef __cplusplus
103 : }
104 : #endif
105 :
106 : #endif /* ZEPHYR_INCLUDE_DRIVERS_SERIAL_UART_EMUL_H_ */
|