mirror of
https://github.com/apache/nuttx-apps.git
synced 2026-09-10 10:46:32 +00:00
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:
parent
3d97bf02e4
commit
7ba3638507
2 changed files with 54 additions and 38 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue