aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Gubler <thomasgubler@gmail.com>2014-12-17 08:22:38 +0100
committerThomas Gubler <thomasgubler@gmail.com>2014-12-17 08:22:38 +0100
commit9bad23e41852eba6657898d4ea46b0b303de4ae3 (patch)
tree66b456c21764057ade7b290fd9185189e606df6a /src
parentbe269520382adbd4bea59c439599897a53109ad7 (diff)
downloadpx4-firmware-9bad23e41852eba6657898d4ea46b0b303de4ae3.tar.gz
px4-firmware-9bad23e41852eba6657898d4ea46b0b303de4ae3.tar.bz2
px4-firmware-9bad23e41852eba6657898d4ea46b0b303de4ae3.zip
add explicit non-callback contructor for nuttx/uorb subscriber to work around linker issues
Diffstat (limited to 'src')
-rw-r--r--src/platforms/px4_defines.h2
-rw-r--r--src/platforms/px4_nodehandle.h20
-rw-r--r--src/platforms/px4_subscriber.h15
3 files changed, 36 insertions, 1 deletions
diff --git a/src/platforms/px4_defines.h b/src/platforms/px4_defines.h
index 712e0dd63..c76548381 100644
--- a/src/platforms/px4_defines.h
+++ b/src/platforms/px4_defines.h
@@ -154,7 +154,7 @@ static inline px4_param_t PX4_ROS_PARAM_SET(const char *name, float value)
/* Subscribe and providing a function as callback (do not use directly, use PX4_SUBSCRIBE instead) */
#define PX4_SUBSCRIBE_CBFUNC(_nodehandle, _name, _cbf, _interval) _nodehandle.subscribe<PX4_TOPIC_T(_name)>(PX4_TOPIC(_name), std::bind(&_cbf, std::placeholders::_1), _interval)
/* Subscribe without a callback (do not use directly, use PX4_SUBSCRIBE instead) */
-#define PX4_SUBSCRIBE_NOCB(_nodehandle, _name, _interval) _nodehandle.subscribe<PX4_TOPIC_T(_name)>(PX4_TOPIC(_name), nullptr, _interval)
+#define PX4_SUBSCRIBE_NOCB(_nodehandle, _name, _interval) _nodehandle.subscribe<PX4_TOPIC_T(_name)>(PX4_TOPIC(_name), _interval)
/* Parameter handle datatype */
#include <systemlib/param/param.h>
diff --git a/src/platforms/px4_nodehandle.h b/src/platforms/px4_nodehandle.h
index 8879148a3..160886810 100644
--- a/src/platforms/px4_nodehandle.h
+++ b/src/platforms/px4_nodehandle.h
@@ -179,6 +179,26 @@ public:
}
/**
+ * Subscribe without callback to function
+ * @param meta Describes the topic which nodehande should subscribe to
+ * @param interval Minimal interval between data fetches from orb
+ */
+
+ template<typename M>
+ Subscriber<M> *subscribe(const struct orb_metadata *meta,
+ unsigned interval)
+ {
+ SubscriberUORB<M> *sub_px4 = new SubscriberUORB<M>(meta, interval, &_subs);
+
+ /* Check if this is the smallest interval so far and update _sub_min_interval */
+ if (_sub_min_interval == nullptr || _sub_min_interval->getInterval() > sub_px4->getInterval()) {
+ _sub_min_interval = sub_px4;
+ }
+
+ return (Subscriber<M> *)sub_px4;
+ }
+
+ /**
* Advertise topic
* @param meta Describes the topic which is advertised
*/
diff --git a/src/platforms/px4_subscriber.h b/src/platforms/px4_subscriber.h
index 7d8463cb5..5d4e67ad0 100644
--- a/src/platforms/px4_subscriber.h
+++ b/src/platforms/px4_subscriber.h
@@ -178,6 +178,21 @@ public:
//XXX store callback
{}
+ /**
+ * Construct SubscriberUORB by providing orb meta data without callback
+ * @param meta orb metadata for the topic which is used
+ * @param interval Minimal interval between calls to callback
+ * @param list subscriber is added to this list
+ */
+ SubscriberUORB(const struct orb_metadata *meta,
+ unsigned interval,
+ List<uORB::SubscriptionNode *> *list) :
+ Subscriber<M>(),
+ uORB::Subscription<M>(meta, interval, list),
+ _callback(nullptr)
+ //XXX store callback
+ {}
+
~SubscriberUORB() {};
/**