diff options
author | Lorenz Meier <lm@inf.ethz.ch> | 2015-04-25 01:32:34 +0200 |
---|---|---|
committer | Lorenz Meier <lm@inf.ethz.ch> | 2015-04-26 14:33:56 +0200 |
commit | 28dfb8983a92848ae52472702fd91e2275b991dc (patch) | |
tree | 61f1070b6e9a46fd9dbf34f2967f82058a2aeeb3 | |
parent | f7f949f4552fd0ecfaea7247dae0a87f800647f5 (diff) | |
download | px4-firmware-28dfb8983a92848ae52472702fd91e2275b991dc.tar.gz px4-firmware-28dfb8983a92848ae52472702fd91e2275b991dc.tar.bz2 px4-firmware-28dfb8983a92848ae52472702fd91e2275b991dc.zip |
uORB: Add API to check if a topic exists yet
-rw-r--r-- | src/modules/uORB/uORB.cpp | 20 | ||||
-rw-r--r-- | src/modules/uORB/uORB.h | 9 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/modules/uORB/uORB.cpp b/src/modules/uORB/uORB.cpp index b4f81d429..d531c6b0b 100644 --- a/src/modules/uORB/uORB.cpp +++ b/src/modules/uORB/uORB.cpp @@ -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) { diff --git a/src/modules/uORB/uORB.h b/src/modules/uORB/uORB.h index 44dc6614f..a8b19d91f 100644 --- a/src/modules/uORB/uORB.h +++ b/src/modules/uORB/uORB.h @@ -319,6 +319,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 * * @param handle A handle returned from orb_subscribe. |