Browse Source

uORB: Add API to check if a topic exists yet

sbg
Lorenz Meier 10 years ago
parent
commit
28dfb8983a
  1. 20
      src/modules/uORB/uORB.cpp
  2. 9
      src/modules/uORB/uORB.h

20
src/modules/uORB/uORB.cpp

@ -41,6 +41,7 @@ @@ -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 @@ -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)
{

9
src/modules/uORB/uORB.h

@ -318,6 +318,15 @@ extern int orb_check(int handle, bool *updated) __EXPORT; @@ -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
*

Loading…
Cancel
Save