| /** @file |
| * @brief Modem interface for UART header file. |
| * |
| * Modem interface UART handling for modem context driver. |
| */ |
| |
| /* |
| * Copyright (c) 2019 Foundries.io |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef ZEPHYR_INCLUDE_DRIVERS_MODEM_MODEM_IFACE_UART_H_ |
| #define ZEPHYR_INCLUDE_DRIVERS_MODEM_MODEM_IFACE_UART_H_ |
| |
| #include <zephyr/kernel.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| struct modem_iface_uart_data { |
| /* HW flow control */ |
| bool hw_flow_control; |
| |
| /* ring buffer */ |
| struct ring_buf rx_rb; |
| |
| /* rx semaphore */ |
| struct k_sem rx_sem; |
| |
| #ifdef CONFIG_MODEM_IFACE_UART_ASYNC |
| |
| /* tx semaphore */ |
| struct k_sem tx_sem; |
| |
| #endif /* CONFIG_MODEM_IFACE_UART_ASYNC */ |
| }; |
| |
| /** |
| * @brief Init modem interface device for UART |
| * |
| * @details This can be called after the init if the UART is changed. |
| * |
| * @param *iface: modem interface to initialize. |
| * @param *dev_name: name of the UART device to use |
| * |
| * @retval 0 if ok, < 0 if error. |
| */ |
| int modem_iface_uart_init_dev(struct modem_iface *iface, |
| const struct device *dev); |
| |
| /** |
| * @brief Modem uart interface configuration |
| * |
| * @param rx_rb_buf Buffer used for internal ring buffer |
| * @param rx_rb_buf_len Size of buffer used for internal ring buffer |
| * @param dev UART device used for interface |
| * @param hw_flow_control Set if hardware flow control is used |
| */ |
| struct modem_iface_uart_config { |
| char *rx_rb_buf; |
| size_t rx_rb_buf_len; |
| const struct device *dev; |
| bool hw_flow_control; |
| }; |
| |
| /** |
| * @brief Initialize modem interface for UART |
| * |
| * @param iface Interface structure to initialize |
| * @param data UART data structure used by the modem interface |
| * @param config UART configuration structure used to configure UART data structure |
| * |
| * @return -EINVAL if any argument is invalid |
| * @return 0 if successful |
| */ |
| int modem_iface_uart_init(struct modem_iface *iface, struct modem_iface_uart_data *data, |
| const struct modem_iface_uart_config *config); |
| |
| /** |
| * @brief Wait for rx data ready from uart interface |
| * |
| * @param iface Interface to wait on |
| * |
| * @return 0 if data is ready |
| * @return -EBUSY if returned without waiting |
| * @return -EAGAIN if timeout occurred |
| */ |
| static inline int modem_iface_uart_rx_wait(struct modem_iface *iface, k_timeout_t timeout) |
| { |
| struct modem_iface_uart_data *data = (struct modem_iface_uart_data *)iface->iface_data; |
| |
| return k_sem_take(&data->rx_sem, timeout); |
| } |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* ZEPHYR_INCLUDE_DRIVERS_MODEM_MODEM_IFACE_UART_H_ */ |