mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-07-21 23:00:34 +08:00
add update_sub_min_interval function
This commit is contained in:
@@ -132,7 +132,7 @@ public:
|
|||||||
void spin() { ros::spin(); }
|
void spin() { ros::spin(); }
|
||||||
|
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
std::list<SubscriberBase *> _subs; /**< Subcriptions of node */
|
std::list<SubscriberBase *> _subs; /**< Subcriptions of node */
|
||||||
std::list<PublisherBase *> _pubs; /**< Publications of node */
|
std::list<PublisherBase *> _pubs; /**< Publications of node */
|
||||||
};
|
};
|
||||||
@@ -189,13 +189,8 @@ public:
|
|||||||
Subscriber<T> *subscribe(void(*fp)(const T &), unsigned interval=10) //XXX interval
|
Subscriber<T> *subscribe(void(*fp)(const T &), unsigned interval=10) //XXX interval
|
||||||
{
|
{
|
||||||
SubscriberUORBCallback<T> *sub_px4 = new SubscriberUORBCallback<T>(interval, std::bind(fp, std::placeholders::_1));
|
SubscriberUORBCallback<T> *sub_px4 = new SubscriberUORBCallback<T>(interval, std::bind(fp, std::placeholders::_1));
|
||||||
|
update_sub_min_interval(interval, sub_px4);
|
||||||
/* Check if this is the smallest interval so far and update _sub_min_interval */
|
|
||||||
if (_sub_min_interval == nullptr || _sub_min_interval->get_interval() > interval) {
|
|
||||||
_sub_min_interval = sub_px4;
|
|
||||||
}
|
|
||||||
_subs.add((SubscriberNode *)sub_px4);
|
_subs.add((SubscriberNode *)sub_px4);
|
||||||
|
|
||||||
return (Subscriber<T> *)sub_px4;
|
return (Subscriber<T> *)sub_px4;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,13 +203,8 @@ public:
|
|||||||
Subscriber<T> *subscribe(void(C::*fp)(const T &), C *obj, unsigned interval=10)
|
Subscriber<T> *subscribe(void(C::*fp)(const T &), C *obj, unsigned interval=10)
|
||||||
{
|
{
|
||||||
SubscriberUORBCallback<T> *sub_px4 = new SubscriberUORBCallback<T>(interval, std::bind(fp, obj, std::placeholders::_1));
|
SubscriberUORBCallback<T> *sub_px4 = new SubscriberUORBCallback<T>(interval, std::bind(fp, obj, std::placeholders::_1));
|
||||||
|
update_sub_min_interval(interval, sub_px4);
|
||||||
/* Check if this is the smallest interval so far and update _sub_min_interval */
|
|
||||||
if (_sub_min_interval == nullptr || _sub_min_interval->get_interval() > interval) {
|
|
||||||
_sub_min_interval = sub_px4;
|
|
||||||
}
|
|
||||||
_subs.add((SubscriberNode *)sub_px4);
|
_subs.add((SubscriberNode *)sub_px4);
|
||||||
|
|
||||||
return (Subscriber<T> *)sub_px4;
|
return (Subscriber<T> *)sub_px4;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -227,13 +217,8 @@ public:
|
|||||||
Subscriber<T> *subscribe(unsigned interval=10) //XXX interval
|
Subscriber<T> *subscribe(unsigned interval=10) //XXX interval
|
||||||
{
|
{
|
||||||
SubscriberUORB<T> *sub_px4 = new SubscriberUORB<T>(interval);
|
SubscriberUORB<T> *sub_px4 = new SubscriberUORB<T>(interval);
|
||||||
|
update_sub_min_interval(interval, sub_px4);
|
||||||
/* Check if this is the smallest interval so far and update _sub_min_interval */
|
|
||||||
if (_sub_min_interval == nullptr || _sub_min_interval->get_interval() > interval) {
|
|
||||||
_sub_min_interval = sub_px4;
|
|
||||||
}
|
|
||||||
_subs.add((SubscriberNode *)sub_px4);
|
_subs.add((SubscriberNode *)sub_px4);
|
||||||
|
|
||||||
return (Subscriber<T> *)sub_px4;
|
return (Subscriber<T> *)sub_px4;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -290,13 +275,24 @@ public:
|
|||||||
spinOnce();
|
spinOnce();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private:
|
protected:
|
||||||
static const uint16_t kMaxSubscriptions = 100;
|
static const uint16_t kMaxSubscriptions = 100;
|
||||||
static const uint16_t kMaxPublications = 100;
|
static const uint16_t kMaxPublications = 100;
|
||||||
List<SubscriberNode *> _subs; /**< Subcriptions of node */
|
List<SubscriberNode *> _subs; /**< Subcriptions of node */
|
||||||
List<PublisherNode *> _pubs; /**< Publications of node */
|
List<PublisherNode *> _pubs; /**< Publications of node */
|
||||||
SubscriberNode *_sub_min_interval; /**< Points to the sub wtih the smallest interval
|
SubscriberNode *_sub_min_interval; /**< Points to the sub wtih the smallest interval
|
||||||
of all Subscriptions in _subs*/
|
of all Subscriptions in _subs*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if this is the smallest interval so far and update _sub_min_interval
|
||||||
|
*/
|
||||||
|
template<typename T>
|
||||||
|
void update_sub_min_interval(unsigned interval, SubscriberUORB<T> *sub)
|
||||||
|
{
|
||||||
|
if (_sub_min_interval == nullptr || _sub_min_interval->get_interval() > interval) {
|
||||||
|
_sub_min_interval = sub;
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user