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 <dongjiuzhu1@xiaomi.com>
This commit is contained in:
dongjiuzhu1 2024-11-13 13:22:11 +08:00 committed by Donny(董九柱)
parent 3d97bf02e4
commit 7ba3638507
2 changed files with 54 additions and 38 deletions

View file

@ -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);

View file

@ -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
*