This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 906d5a820460d31aa202f7c39aa33ede9568d318 Author: Yongrong Wang <[email protected]> AuthorDate: Thu Oct 31 10:35:54 2024 +0800 rpmsg: Add rpmsg_get_signals API and rpmsg transport ops support provide get_signals ops to the transport layer implementation. add rpmsg_get_signals API for rpmsg service to get remote core's status. Signed-off-by: Yongrong Wang <[email protected]> Signed-off-by: cuiziwei <[email protected]> Signed-off-by: Bowen Wang <[email protected]> --- drivers/rpmsg/rpmsg.c | 17 +++++++++++++++++ include/nuttx/rpmsg/rpmsg.h | 9 +++++++++ 2 files changed, 26 insertions(+) diff --git a/drivers/rpmsg/rpmsg.c b/drivers/rpmsg/rpmsg.c index 70ae9e273ca..b09532efd31 100644 --- a/drivers/rpmsg/rpmsg.c +++ b/drivers/rpmsg/rpmsg.c @@ -209,6 +209,23 @@ FAR const char *rpmsg_get_cpuname(FAR struct rpmsg_device *rdev) return rpmsg ? rpmsg->ops->get_cpuname(rpmsg) : NULL; } +int rpmsg_get_signals(FAR struct rpmsg_device *rdev) +{ + FAR struct rpmsg_s *rpmsg = rpmsg_get_by_rdev(rdev); + + if (rpmsg == NULL) + { + return -EINVAL; + } + + if (rpmsg->ops->get_signals != NULL) + { + return rpmsg->ops->get_signals(rpmsg); + } + + return 0; +} + int rpmsg_register_callback(FAR void *priv, rpmsg_dev_cb_t device_created, rpmsg_dev_cb_t device_destroy, diff --git a/include/nuttx/rpmsg/rpmsg.h b/include/nuttx/rpmsg/rpmsg.h index b41a439bad3..c6c124efb76 100644 --- a/include/nuttx/rpmsg/rpmsg.h +++ b/include/nuttx/rpmsg/rpmsg.h @@ -43,6 +43,8 @@ #define RPMSGIOC_DUMP _RPMSGIOC(2) #define RPMSGIOC_PING _RPMSGIOC(3) +#define RPMSG_SIGNAL_RUNNING TIOCM_CD + /**************************************************************************** * Public Types ****************************************************************************/ @@ -76,6 +78,7 @@ struct rpmsg_ops_s CODE void (*dump)(FAR struct rpmsg_s *rpmsg); CODE FAR const char *(*get_local_cpuname)(FAR struct rpmsg_s *rpmsg); CODE FAR const char *(*get_cpuname)(FAR struct rpmsg_s *rpmsg); + CODE int (*get_signals)(FAR struct rpmsg_s *rpmsg); }; CODE typedef void (*rpmsg_dev_cb_t)(FAR struct rpmsg_device *rdev, @@ -104,6 +107,12 @@ int rpmsg_post(FAR struct rpmsg_endpoint *ept, FAR sem_t *sem); FAR const char *rpmsg_get_local_cpuname(FAR struct rpmsg_device *rdev); FAR const char *rpmsg_get_cpuname(FAR struct rpmsg_device *rdev); +int rpmsg_get_signals(FAR struct rpmsg_device *rdev); + +static inline_function bool rpmsg_is_running(FAR struct rpmsg_device *rdev) +{ + return rpmsg_get_signals(rdev) & RPMSG_SIGNAL_RUNNING; +} int rpmsg_register_callback(FAR void *priv, rpmsg_dev_cb_t device_created,
