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_ */
|