LCOV - code coverage report
Current view: top level - zephyr/shell - shell_uart.h Hit Total Coverage
Test: new.info Lines: 3 36 8.3 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           0 : /*
       2             :  * Copyright (c) 2018 Nordic Semiconductor ASA
       3             :  *
       4             :  * SPDX-License-Identifier: Apache-2.0
       5             :  */
       6             : 
       7             : #ifndef ZEPHYR_INCLUDE_SHELL_UART_H_
       8             : #define ZEPHYR_INCLUDE_SHELL_UART_H_
       9             : 
      10             : #include <zephyr/drivers/serial/uart_async_rx.h>
      11             : #include <zephyr/mgmt/mcumgr/transport/smp_shell.h>
      12             : #include <zephyr/shell/shell.h>
      13             : 
      14             : #ifdef __cplusplus
      15             : extern "C" {
      16             : #endif
      17             : 
      18           0 : extern const struct shell_transport_api shell_uart_transport_api;
      19             : 
      20             : #ifndef CONFIG_SHELL_BACKEND_SERIAL_RX_RING_BUFFER_SIZE
      21           0 : #define CONFIG_SHELL_BACKEND_SERIAL_RX_RING_BUFFER_SIZE 0
      22             : #endif
      23             : 
      24             : #ifndef CONFIG_SHELL_BACKEND_SERIAL_TX_RING_BUFFER_SIZE
      25           0 : #define CONFIG_SHELL_BACKEND_SERIAL_TX_RING_BUFFER_SIZE 0
      26             : #endif
      27             : 
      28             : #ifndef CONFIG_SHELL_BACKEND_SERIAL_ASYNC_RX_BUFFER_COUNT
      29           0 : #define CONFIG_SHELL_BACKEND_SERIAL_ASYNC_RX_BUFFER_COUNT 0
      30             : #endif
      31             : 
      32             : #ifndef CONFIG_SHELL_BACKEND_SERIAL_ASYNC_RX_BUFFER_SIZE
      33           0 : #define CONFIG_SHELL_BACKEND_SERIAL_ASYNC_RX_BUFFER_SIZE 0
      34             : #endif
      35             : 
      36           0 : #define ASYNC_RX_BUF_SIZE (CONFIG_SHELL_BACKEND_SERIAL_ASYNC_RX_BUFFER_COUNT * \
      37             :                 (CONFIG_SHELL_BACKEND_SERIAL_ASYNC_RX_BUFFER_SIZE + \
      38             :                  UART_ASYNC_RX_BUF_OVERHEAD))
      39             : 
      40           0 : struct shell_uart_common {
      41           0 :         const struct device *dev;
      42           0 :         shell_transport_handler_t handler;
      43           0 :         void *context;
      44           0 :         bool blocking_tx;
      45             : #ifdef CONFIG_MCUMGR_TRANSPORT_SHELL
      46             :         struct smp_shell_data smp;
      47             : #endif /* CONFIG_MCUMGR_TRANSPORT_SHELL */
      48             : };
      49             : 
      50           0 : struct shell_uart_int_driven {
      51           0 :         struct shell_uart_common common;
      52           0 :         struct ring_buf tx_ringbuf;
      53           0 :         struct ring_buf rx_ringbuf;
      54           0 :         uint8_t tx_buf[CONFIG_SHELL_BACKEND_SERIAL_TX_RING_BUFFER_SIZE];
      55           0 :         uint8_t rx_buf[CONFIG_SHELL_BACKEND_SERIAL_RX_RING_BUFFER_SIZE];
      56           0 :         struct k_timer dtr_timer;
      57           0 :         atomic_t tx_busy;
      58             : };
      59             : 
      60           0 : struct shell_uart_async {
      61           0 :         struct shell_uart_common common;
      62           0 :         struct k_sem tx_sem;
      63           0 :         struct uart_async_rx async_rx;
      64           0 :         struct uart_async_rx_config async_rx_config;
      65           0 :         atomic_t pending_rx_req;
      66           0 :         uint8_t rx_data[ASYNC_RX_BUF_SIZE];
      67             : };
      68             : 
      69           0 : struct shell_uart_polling {
      70           0 :         struct shell_uart_common common;
      71           0 :         struct ring_buf rx_ringbuf;
      72           0 :         uint8_t rx_buf[CONFIG_SHELL_BACKEND_SERIAL_RX_RING_BUFFER_SIZE];
      73           0 :         struct k_timer rx_timer;
      74             : };
      75             : 
      76             : #ifdef CONFIG_SHELL_BACKEND_SERIAL_API_POLLING
      77             : #define SHELL_UART_STRUCT struct shell_uart_polling
      78             : #elif defined(CONFIG_SHELL_BACKEND_SERIAL_API_ASYNC)
      79             : #define SHELL_UART_STRUCT struct shell_uart_async
      80             : #else
      81           0 : #define SHELL_UART_STRUCT struct shell_uart_int_driven
      82             : #endif
      83             : 
      84             : /**
      85             :  * @brief Macro for creating shell UART transport instance named @p _name
      86             :  *
      87             :  * @note Additional arguments are accepted (but ignored) for compatibility with
      88             :  * previous Zephyr version, it will be removed in future release.
      89             :  */
      90           1 : #define SHELL_UART_DEFINE(_name, ...)                                                              \
      91             :         static SHELL_UART_STRUCT _name##_shell_uart;                                               \
      92             :         struct shell_transport _name = {                                                           \
      93             :                 .api = &shell_uart_transport_api,                                                  \
      94             :                 .ctx = (struct shell_telnet *)&_name##_shell_uart,                                 \
      95             :         }
      96             : 
      97             : /**
      98             :  * @brief This function provides pointer to the shell UART backend instance.
      99             :  *
     100             :  * Function returns pointer to the shell UART instance. This instance can be
     101             :  * next used with shell_execute_cmd function in order to test commands behavior.
     102             :  *
     103             :  * @returns Pointer to the shell instance.
     104             :  */
     105           1 : const struct shell *shell_backend_uart_get_ptr(void);
     106             : 
     107             : /**
     108             :  * @brief This function provides pointer to the smp shell data of the UART shell transport.
     109             :  *
     110             :  * @returns Pointer to the smp shell data.
     111             :  */
     112           1 : struct smp_shell_data *shell_uart_smp_shell_data_get_ptr(void);
     113             : 
     114             : #ifdef __cplusplus
     115             : }
     116             : #endif
     117             : 
     118             : #endif /* ZEPHYR_INCLUDE_SHELL_UART_H_ */

Generated by: LCOV version 1.14