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 198a8fe10898af6ce6eeb92d55741976efe5748d
Author: liaoao <[email protected]>
AuthorDate: Tue Feb 25 15:15:43 2025 +0800

    drivers/rpmsg: add rpmsg_get_timestamp to retrieve buffer timestamps
    
    Add rpmsg_get_timestamp() API to get the TX/RX timestamps of an rpmsg
    buffer. This is useful for latency measurement and debugging purposes.
    
    The new rpmsg_timestamp_s structure contains:
      - tx_nsec: timestamp when the buffer was transmitted
      - rx_nsec: timestamp when the buffer was received
    
    Signed-off-by: liaoao <[email protected]>
    Signed-off-by: Bowen Wang <[email protected]>
---
 drivers/rpmsg/rpmsg.c       | 13 +++++++++++++
 include/nuttx/rpmsg/rpmsg.h | 10 ++++++++++
 2 files changed, 23 insertions(+)

diff --git a/drivers/rpmsg/rpmsg.c b/drivers/rpmsg/rpmsg.c
index 58bc6744e84..c25e29c8712 100644
--- a/drivers/rpmsg/rpmsg.c
+++ b/drivers/rpmsg/rpmsg.c
@@ -219,6 +219,19 @@ int rpmsg_get_signals(FAR struct rpmsg_device *rdev)
   return atomic_read(&rpmsg->signals);
 }
 
+int rpmsg_get_timestamp(FAR struct rpmsg_device *rdev, FAR const void *data,
+                        FAR struct rpmsg_timestamp_s *ts)
+{
+  FAR struct rpmsg_s *rpmsg = rpmsg_get_by_rdev(rdev);
+
+  if (!rpmsg || !data || !ts || !rpmsg->ops->get_timestamp)
+    {
+      return -EINVAL;
+    }
+
+  return rpmsg->ops->get_timestamp(rpmsg, data, ts);
+}
+
 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 08ef10da8c6..e4f19cc88dd 100644
--- a/include/nuttx/rpmsg/rpmsg.h
+++ b/include/nuttx/rpmsg/rpmsg.h
@@ -70,6 +70,12 @@ struct rpmsg_s
   atomic_int                   signals;
 };
 
+struct rpmsg_timestamp_s
+{
+  uint64_t tx_nsec;
+  uint64_t rx_nsec;
+};
+
 /**
  * struct rpmsg_ops_s - Rpmsg device operations
  * wait: wait sem.
@@ -84,6 +90,8 @@ struct rpmsg_ops_s
   CODE int (*ioctl)(FAR struct rpmsg_s *rpmsg, int cmd, unsigned long arg);
   CODE void (*panic)(FAR struct rpmsg_s *rpmsg);
   CODE void (*dump)(FAR struct rpmsg_s *rpmsg);
+  CODE int (*get_timestamp)(FAR struct rpmsg_s *rpmsg, FAR const void *data,
+                            FAR struct rpmsg_timestamp_s *ts);
 };
 
 CODE typedef void (*rpmsg_dev_cb_t)(FAR struct rpmsg_device *rdev,
@@ -113,6 +121,8 @@ 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);
+int rpmsg_get_timestamp(FAR struct rpmsg_device *rdev, FAR const void *data,
+                        FAR struct rpmsg_timestamp_s *ts);
 
 static inline_function bool rpmsg_is_running(FAR struct rpmsg_device *rdev)
 {

Reply via email to