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(®info.devinfo, info, sizeof(*info)); + } + else + { + memset(®info.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 *
