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,

Reply via email to