aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2015-04-25 01:32:34 +0200
committerLorenz Meier <lm@inf.ethz.ch>2015-04-26 14:33:56 +0200
commit28dfb8983a92848ae52472702fd91e2275b991dc (patch)
tree61f1070b6e9a46fd9dbf34f2967f82058a2aeeb3
parentf7f949f4552fd0ecfaea7247dae0a87f800647f5 (diff)
downloadpx4-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.cpp20
-rw-r--r--src/modules/uORB/uORB.h9
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.