Line data Source code
1 1 : /* 2 : * Copyright 2024 Basalte bv 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : #ifndef ZEPHYR_INCLUDE_DRIVERS_UART_EMUL_H_ 8 : #define ZEPHYR_INCLUDE_DRIVERS_UART_EMUL_H_ 9 : 10 : #include <zephyr/device.h> 11 : #include <zephyr/drivers/emul.h> 12 : #include <zephyr/drivers/uart.h> 13 : #include <zephyr/sys/slist.h> 14 : #include <zephyr/types.h> 15 : 16 : /** 17 : * @file 18 : * 19 : * @brief Public APIs for the UART device emulation drivers. 20 : */ 21 : 22 : /** 23 : * @brief UART Emulation Interface 24 : * @defgroup uart_emul_interface UART Emulation Interface 25 : * @ingroup io_emulators 26 : * @{ 27 : */ 28 : 29 : #ifdef __cplusplus 30 : extern "C" { 31 : #endif 32 : 33 : struct uart_emul_device_api; 34 : 35 : /** 36 : * @brief Define the emulation callback function signature 37 : * 38 : * @param dev UART device instance 39 : * @param size Number of available bytes in TX buffer 40 : * @param target pointer to emulation context 41 : */ 42 1 : typedef void (*uart_emul_device_tx_data_ready_t)(const struct device *dev, size_t size, 43 : const struct emul *target); 44 : 45 : /** Node in a linked list of emulators for UART devices */ 46 1 : struct uart_emul { 47 0 : sys_snode_t node; 48 : /** Target emulator - REQUIRED for all emulated bus nodes of any type */ 49 1 : const struct emul *target; 50 : /** API provided for this device */ 51 1 : const struct uart_emul_device_api *api; 52 : }; 53 : 54 : /** Definition of the emulator API */ 55 1 : struct uart_emul_device_api { 56 0 : uart_emul_device_tx_data_ready_t tx_data_ready; 57 : }; 58 : 59 : /** 60 : * Register an emulated device on the controller 61 : * 62 : * @param dev Device that will use the emulator 63 : * @param emul UART emulator to use 64 : * @return 0 indicating success 65 : */ 66 1 : int uart_emul_register(const struct device *dev, struct uart_emul *emul); 67 : 68 : #ifdef __cplusplus 69 : } 70 : #endif 71 : 72 : /** 73 : * @} 74 : */ 75 : 76 : #endif /* ZEPHYR_INCLUDE_DRIVERS_UART_EMUL_H_ */