add explicit non-callback contructor for nuttx/uorb subscriber to work around linker issues

This commit is contained in:
Thomas Gubler 2014-12-17 08:22:38 +01:00
parent be26952038
commit 9bad23e418
3 changed files with 36 additions and 1 deletions

View File

@ -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>

View File

@ -178,6 +178,26 @@ public:
return (Subscriber<M> *)sub_px4;
}
/**
* 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

View File

@ -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() {};
/**