This is an automated email from the ASF dual-hosted git repository.

jiuzhudong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git

commit 7ba36385073ea0e5a79eb3ee428778c97814054f
Author: dongjiuzhu1 <[email protected]>
AuthorDate: Wed Nov 13 13:22:11 2024 +0800

    system/uorb: merge set_info to orb_advertise_multi_queue_info.
    
    support new api: orb_advertise_multi_queue_info to advertise topic
    with info
    
    Signed-off-by: dongjiuzhu1 <[email protected]>
---
 system/uorb/uORB/uORB.c | 46 +++++++++++++++++++++++++++-------------------
 system/uorb/uORB/uORB.h | 46 +++++++++++++++++++++++++++-------------------
 2 files changed, 54 insertions(+), 38 deletions(-)

diff --git a/system/uorb/uORB/uORB.c b/system/uorb/uORB/uORB.c
index fd3f704af..63adb4b64 100644
--- a/system/uorb/uORB/uORB.c
+++ b/system/uorb/uORB/uORB.c
@@ -57,7 +57,8 @@
  ****************************************************************************/
 
 static int orb_advsub_open(FAR const struct orb_metadata *meta, int flags,
-                           int instance, unsigned int queue_size)
+                           int instance, unsigned int queue_size,
+                           FAR orb_info_t *info)
 {
   char path[ORB_PATH_MAX];
   int fd;
@@ -78,6 +79,14 @@ static int orb_advsub_open(FAR const struct orb_metadata 
*meta, int flags,
       reginfo.esize   = meta->o_size;
       reginfo.nbuffer = queue_size;
       reginfo.persist = !!(flags & SENSOR_PERSIST);
+      if (info != NULL)
+        {
+          memcpy(&reginfo.devinfo, info, sizeof(*info));
+        }
+      else
+        {
+          memset(&reginfo.devinfo, 0, sizeof(*info));
+        }
 
       fd = open(ORB_USENSOR_PATH, O_WRONLY | O_CLOEXEC);
       if (fd < 0)
@@ -120,7 +129,8 @@ static int orb_advsub_open(FAR const struct orb_metadata 
*meta, int flags,
 static int
 orb_advertise_multi_queue_flags(FAR const struct orb_metadata *meta,
                                 FAR const void *data, FAR int *instance,
-                                unsigned int queue_size, int flags)
+                                unsigned int queue_size, int flags,
+                                FAR orb_info_t *info)
 {
   int inst;
   int fd;
@@ -129,7 +139,7 @@ orb_advertise_multi_queue_flags(FAR const struct 
orb_metadata *meta,
 
   inst = instance ? *instance : orb_group_count(meta);
 
-  fd = orb_advsub_open(meta, flags, inst, queue_size);
+  fd = orb_advsub_open(meta, flags, inst, queue_size, info);
   if (fd < 0)
     {
       uorberr("%s advertise failed (%i)", meta->o_name, fd);
@@ -172,24 +182,27 @@ int orb_close(int fd)
   return close(fd);
 }
 
-int orb_advertise_multi_queue(FAR const struct orb_metadata *meta,
-                              FAR const void *data, FAR int *instance,
-                              unsigned int queue_size)
+int orb_advertise_multi_queue_info(FAR const struct orb_metadata *meta,
+                                   FAR const void *data, FAR int *instance,
+                                   unsigned int queue_size,
+                                   FAR orb_info_t *info)
 {
   return orb_advertise_multi_queue_flags(meta, data, instance,
-                                         queue_size, O_WRONLY);
+                                         queue_size, O_WRONLY, info);
 }
 
-int orb_advertise_multi_queue_persist(FAR const struct orb_metadata *meta,
-                                      FAR const void *data,
-                                      FAR int *instance,
-                                      unsigned int queue_size)
+int
+orb_advertise_multi_queue_persist_info(FAR const struct orb_metadata *meta,
+                                       FAR const void *data,
+                                       FAR int *instance,
+                                       unsigned int queue_size,
+                                       FAR orb_info_t *info)
 {
   return orb_advertise_multi_queue_flags(meta, data, instance, queue_size,
-                                         O_WRONLY | SENSOR_PERSIST);
+                                         O_WRONLY | SENSOR_PERSIST, info);
 }
 
-ssize_t orb_publish_multi(int fd, const void *data, size_t len)
+ssize_t orb_publish_multi(int fd, FAR const void *data, size_t len)
 {
   return write(fd, data, len);
 }
@@ -197,7 +210,7 @@ ssize_t orb_publish_multi(int fd, const void *data, size_t 
len)
 int orb_subscribe_multi(FAR const struct orb_metadata *meta,
                         unsigned instance)
 {
-  return orb_advsub_open(meta, O_RDONLY, instance, 0);
+  return orb_advsub_open(meta, O_RDONLY, instance, 0, NULL);
 }
 
 ssize_t orb_copy_multi(int fd, FAR void *buffer, size_t len)
@@ -276,11 +289,6 @@ int orb_get_interval(int fd, FAR unsigned *interval)
   return ret;
 }
 
-int orb_set_info(int fd, FAR const orb_info_t *info)
-{
-  return ioctl(fd, SNIOC_SET_INFO, (unsigned long)(uintptr_t)info);
-}
-
 int orb_get_info(int fd, FAR orb_info_t *info)
 {
   return ioctl(fd, SNIOC_GET_INFO, (unsigned long)(uintptr_t)info);
diff --git a/system/uorb/uORB/uORB.h b/system/uorb/uORB/uORB.h
index 5e0bc6c67..f1b9c27b0 100644
--- a/system/uorb/uORB/uORB.h
+++ b/system/uorb/uORB/uORB.h
@@ -266,7 +266,7 @@ int orb_open(FAR const char *name, int instance, int flags);
 int orb_close(int fd);
 
 /****************************************************************************
- * Name: orb_advertise_multi_queue
+ * Name: orb_advertise_multi_queue_info
  *
  * Description:
  *   This performs the initial advertisement of a topic; it creates the topic
@@ -278,6 +278,7 @@ int orb_close(int fd);
  *   instance     Pointer to an integer which yield the instance ID,
  *                (has default 0 if pointer is NULL).
  *   queue_size   Maximum number of buffered elements.
+ *   info         A pointer to the orb_info_t.
  *
  * Returned Value:
  *   -1 on error, otherwise returns an file descriptor
@@ -287,10 +288,21 @@ int orb_close(int fd);
  *   this function will return -1 and set errno to ENOENT.
  ****************************************************************************/
 
+int orb_advertise_multi_queue_info(FAR const struct orb_metadata *meta,
+                                   FAR const void *data,
+                                   FAR int *instance,
+                                   unsigned int queue_size,
+                                   FAR orb_info_t *info);
+
+static inline
 int orb_advertise_multi_queue(FAR const struct orb_metadata *meta,
                               FAR const void *data,
                               FAR int *instance,
-                              unsigned int queue_size);
+                              unsigned int queue_size)
+{
+  return orb_advertise_multi_queue_info(meta, data, instance,
+                                        queue_size, NULL);
+}
 
 static inline int orb_advertise(FAR const struct orb_metadata *meta,
                                 FAR const void *data)
@@ -338,10 +350,22 @@ static inline int orb_advertise_multi(FAR const struct 
orb_metadata *meta,
  *   this function will return -1 and set errno to ENOENT.
  ****************************************************************************/
 
+int
+orb_advertise_multi_queue_persist_info(FAR const struct orb_metadata *meta,
+                                       FAR const void *data,
+                                       FAR int *instance,
+                                       unsigned int queue_size,
+                                       FAR orb_info_t *info);
+
+static inline
 int orb_advertise_multi_queue_persist(FAR const struct orb_metadata *meta,
                                       FAR const void *data,
                                       FAR int *instance,
-                                      unsigned int queue_size);
+                                      unsigned int queue_size)
+{
+  return orb_advertise_multi_queue_persist_info(meta, data, instance,
+                                                queue_size, NULL);
+}
 
 /****************************************************************************
  * Name: orb_unadvertise
@@ -691,22 +715,6 @@ int orb_set_interval(int fd, unsigned interval);
 
 int orb_get_interval(int fd, FAR unsigned *interval);
 
-/****************************************************************************
- * Name: orb_set_info
- *
- * Description:
- *   Set topic information.
- *
- * Input Parameters:
- *   fd     A fd returned from orb_subscribe.
- *   info   Data to be transmitted.
- *
- * Returned Value:
- *   0 on success, -1 otherwise with ERRNO set accordingly.
- ****************************************************************************/
-
-int orb_set_info(int fd, FAR const orb_info_t *info);
-
 /****************************************************************************
  * Name: orb_get_info
  *

Reply via email to