From 9abc8e26b789af0ef132c5c38e3d8ada821c3657 Mon Sep 17 00:00:00 2001 From: Thomas Gubler Date: Fri, 28 Nov 2014 16:30:12 +0100 Subject: [PATCH] correctly handle interval, call callback only when topic updated, add example for 2 topics --- src/examples/subscriber/subscriber.cpp | 11 ++++++----- src/platforms/px4_nodehandle.h | 2 +- src/platforms/px4_subscriber.h | 5 +++++ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/examples/subscriber/subscriber.cpp b/src/examples/subscriber/subscriber.cpp index ed0635f180..a186ba94a7 100644 --- a/src/examples/subscriber/subscriber.cpp +++ b/src/examples/subscriber/subscriber.cpp @@ -36,10 +36,10 @@ void rc_channels_callback(const PX4_TOPIC_T(rc_channels) &msg) { PX4_INFO("I heard: [%llu]", msg.timestamp_last_valid); } -// void rc_channels_callback(int i) -// { - // PX4_INFO("I heard: [%d]", i); -// } +void rc_channels_callback2(const PX4_TOPIC_T(rc_channels) &msg) +{ + PX4_INFO("I heard2: [%llu]", msg.timestamp_last_valid); +} namespace px4 { bool task_should_exit = false; @@ -81,7 +81,8 @@ PX4_MAIN_FUNCTION(subscriber) * is the number of messages that will be buffered up before beginning to throw * away the oldest ones. */ - PX4_SUBSCRIBE(n, rc_channels, rc_channels_callback, 1000); + PX4_SUBSCRIBE(n, rc_channels, rc_channels_callback, 100); + PX4_SUBSCRIBE(n, rc_channels, rc_channels_callback2, 1000); PX4_INFO("subscribed"); /** diff --git a/src/platforms/px4_nodehandle.h b/src/platforms/px4_nodehandle.h index eb90590e41..45ef225fa6 100644 --- a/src/platforms/px4_nodehandle.h +++ b/src/platforms/px4_nodehandle.h @@ -114,7 +114,7 @@ public: SubscriberPX4 *sub_px4 = new SubscriberPX4(meta, interval, callback, &_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()) { + if (_sub_min_interval == nullptr || _sub_min_interval->getInterval() > sub_px4->getInterval()) { _sub_min_interval = sub_px4; } return (Subscriber*)sub_px4; diff --git a/src/platforms/px4_subscriber.h b/src/platforms/px4_subscriber.h index efec8f2a39..6e0ef8aed6 100644 --- a/src/platforms/px4_subscriber.h +++ b/src/platforms/px4_subscriber.h @@ -89,6 +89,11 @@ public: ~SubscriberPX4() {}; void update() { + if (!uORB::Subscription::updated()) { + /* Topic not updated, do not call callback */ + return; + } + /* get latest data */ uORB::Subscription::update();