Line data Source code
1 0 : /* 2 : * Copyright (c) 2024 Basalte bv 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : #ifndef ZEPHYR_INCLUDE_SHELL_RPMSG_H_ 8 : #define ZEPHYR_INCLUDE_SHELL_RPMSG_H_ 9 : 10 : #include <zephyr/kernel.h> 11 : #include <zephyr/shell/shell.h> 12 : #include <openamp/rpmsg.h> 13 : 14 : #ifdef __cplusplus 15 : extern "C" { 16 : #endif 17 : 18 0 : extern const struct shell_transport_api shell_rpmsg_transport_api; 19 : 20 : /** RPMsg received message placeholder */ 21 1 : struct shell_rpmsg_rx { 22 : /** Pointer to the data held by RPMsg endpoint */ 23 1 : void *data; 24 : /** The length of the data */ 25 1 : size_t len; 26 : }; 27 : 28 : /** RPMsg-based shell transport. */ 29 1 : struct shell_rpmsg { 30 : /** Handler function registered by shell. */ 31 1 : shell_transport_handler_t shell_handler; 32 : 33 : /** Context registered by shell. */ 34 1 : void *shell_context; 35 : 36 : /** Indicator if we are ready to read/write */ 37 1 : bool ready; 38 : 39 : /** Setting for blocking mode */ 40 1 : bool blocking; 41 : 42 : /** RPMsg endpoint */ 43 1 : struct rpmsg_endpoint ept; 44 : 45 : /** Queue for received data. */ 46 1 : struct k_msgq rx_q; 47 : 48 : /** Buffer for received messages */ 49 1 : struct shell_rpmsg_rx rx_buf[CONFIG_SHELL_RPMSG_MAX_RX]; 50 : 51 : /** The current rx message */ 52 1 : struct shell_rpmsg_rx rx_cur; 53 : 54 : /** The number of bytes consumed from rx_cur */ 55 1 : size_t rx_consumed; 56 : }; 57 : 58 0 : #define SHELL_RPMSG_DEFINE(_name) \ 59 : static struct shell_rpmsg _name##_shell_rpmsg; \ 60 : struct shell_transport _name = { \ 61 : .api = &shell_rpmsg_transport_api, \ 62 : .ctx = (struct shell_rpmsg *)&_name##_shell_rpmsg, \ 63 : } 64 : 65 : /** 66 : * @brief Initialize the Shell backend using the provided @p rpmsg_dev device. 67 : * 68 : * @param rpmsg_dev A pointer to an RPMsg device 69 : * @return 0 on success or a negative value on error 70 : */ 71 1 : int shell_backend_rpmsg_init_transport(struct rpmsg_device *rpmsg_dev); 72 : 73 : /** 74 : * @brief This function provides pointer to shell RPMsg backend instance. 75 : * 76 : * Function returns pointer to the shell RPMsg instance. This instance can be 77 : * next used with shell_execute_cmd function in order to test commands behavior. 78 : * 79 : * @returns Pointer to the shell instance. 80 : */ 81 1 : const struct shell *shell_backend_rpmsg_get_ptr(void); 82 : 83 : #ifdef __cplusplus 84 : } 85 : #endif 86 : 87 : #endif /* ZEPHYR_INCLUDE_SHELL_RPMSG_H_ */