1 /* 2 * Copyright 2022 The ChromiumOS Authors. 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef ZEPHYR_INCLUDE_DRIVERS_UART_SERIAL_TEST_H_ 8 #define ZEPHYR_INCLUDE_DRIVERS_UART_SERIAL_TEST_H_ 9 10 #include <errno.h> 11 12 #include <zephyr/device.h> 13 14 #ifdef __cplusplus 15 extern "C" { 16 #endif /* __cplusplus */ 17 18 /** 19 * @brief Queues data to be read by the virtual serial port. 20 * 21 * @warning 22 * Use cases involving multiple writers virtual serial port must prevent 23 * concurrent write operations, either by preventing all writers from 24 * being preempted or by using a mutex to govern writes. 25 * 26 * @param dev Address of virtual serial port. 27 * @param data Address of data. 28 * @param size Data size (in bytes). 29 * 30 * @retval Number of bytes written. 31 */ 32 int serial_vnd_queue_in_data(const struct device *dev, const unsigned char *data, uint32_t size); 33 34 /** 35 * @brief Returns size of unread written data. 36 * 37 * @param dev Address of virtual serial port. 38 * 39 * @return Output data size (in bytes). 40 */ 41 uint32_t serial_vnd_out_data_size_get(const struct device *dev); 42 43 /** 44 * @brief Read data written to virtual serial port. 45 * 46 * Consumes the data, such that future calls to serial_vnd_read_out_data() will 47 * not include this data. Requires CONFIG_RING_BUFFER. 48 * 49 * @warning 50 * Use cases involving multiple reads of the data must prevent 51 * concurrent read operations, either by preventing all readers from 52 * being preempted or by using a mutex to govern reads. 53 * 54 * 55 * @param dev Address of virtual serial port. 56 * @param data Address of the output buffer. Can be NULL to discard data. 57 * @param size Data size (in bytes). 58 * 59 * @retval Number of bytes written to the output buffer. 60 */ 61 uint32_t serial_vnd_read_out_data(const struct device *dev, unsigned char *data, uint32_t size); 62 63 /** 64 * @brief Peek at data written to virtual serial port. 65 * 66 * Reads the data without consuming it. Future calls to serial_vnd_peek_out_data() or 67 * serial_vnd_read_out_data() will return this data again. Requires CONFIG_RING_BUFFER. 68 * 69 * @warning 70 * Use cases involving multiple reads of the data must prevent 71 * concurrent read operations, either by preventing all readers from 72 * being preempted or by using a mutex to govern reads. 73 * 74 * 75 * @param dev Address of virtual serial port. 76 * @param data Address of the output buffer. Cannot be NULL. 77 * @param size Data size (in bytes). 78 * 79 * @retval Number of bytes written to the output buffer. 80 */ 81 uint32_t serial_vnd_peek_out_data(const struct device *dev, unsigned char *data, uint32_t size); 82 83 /** 84 * @brief Callback called after bytes written to the virtual serial port. 85 * 86 * @param dev Address of virtual serial port. 87 * @param user_data User data. 88 */ 89 typedef void (*serial_vnd_write_cb_t)(const struct device *dev, void *user_data); 90 91 /** 92 * @brief Sets the write callback on a virtual serial port. 93 * 94 * @param dev Address of virtual serial port. 95 * @param callback Function to call after each write to the port. 96 * @param user_data Opaque data to pass to the callback. 97 * 98 */ 99 void serial_vnd_set_callback(const struct device *dev, serial_vnd_write_cb_t callback, 100 void *user_data); 101 102 #ifdef __cplusplus 103 } 104 #endif /* __cplusplus */ 105 106 #endif /* ZEPHYR_INCLUDE_DRIVERS_UART_SERIAL_TEST_H_ */ 107