mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-07-06 04:30:35 +08:00
uORB: Add API to check if a topic exists yet
This commit is contained in:
@@ -41,6 +41,7 @@
|
||||
#include <drivers/device/device.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
@@ -1196,6 +1197,25 @@ node_open(Flavor f, const struct orb_metadata *meta, const void *data, bool adve
|
||||
|
||||
} // namespace
|
||||
|
||||
int
|
||||
orb_exists(const struct orb_metadata *meta, int instance)
|
||||
{
|
||||
/*
|
||||
* Generate the path to the node and try to open it.
|
||||
*/
|
||||
char path[orb_maxpath];
|
||||
int inst = instance;
|
||||
int ret = node_mkpath(path, PUBSUB, meta, &inst);
|
||||
|
||||
if (ret != OK) {
|
||||
errno = -ret;
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
struct stat buffer;
|
||||
return stat(path, &buffer);
|
||||
}
|
||||
|
||||
orb_advert_t
|
||||
orb_advertise(const struct orb_metadata *meta, const void *data)
|
||||
{
|
||||
|
||||
@@ -318,6 +318,15 @@ extern int orb_check(int handle, bool *updated) __EXPORT;
|
||||
*/
|
||||
extern int orb_stat(int handle, uint64_t *time) __EXPORT;
|
||||
|
||||
/**
|
||||
* Check if a topic has already been created.
|
||||
*
|
||||
* @param meta ORB topic metadata.
|
||||
* @param instance ORB instance
|
||||
* @return OK if the topic exists, ERROR otherwise with errno set accordingly.
|
||||
*/
|
||||
extern int orb_exists(const struct orb_metadata *meta, int instance) __EXPORT;
|
||||
|
||||
/**
|
||||
* Return the priority of the topic
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user