aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Gubler <thomasgubler@gmail.com>2014-11-28 16:30:12 +0100
committerThomas Gubler <thomasgubler@gmail.com>2014-11-28 16:30:12 +0100
commit9abc8e26b789af0ef132c5c38e3d8ada821c3657 (patch)
treeadc3791edcc01a9c79d37cb7ec20ce050a483852 /src
parenta9c1e4ad6145485805366fad5c08ae7351886ff3 (diff)
downloadpx4-firmware-9abc8e26b789af0ef132c5c38e3d8ada821c3657.tar.gz
px4-firmware-9abc8e26b789af0ef132c5c38e3d8ada821c3657.tar.bz2
px4-firmware-9abc8e26b789af0ef132c5c38e3d8ada821c3657.zip
correctly handle interval, call callback only when topic updated, add example for 2 topics
Diffstat (limited to 'src')
-rw-r--r--src/examples/subscriber/subscriber.cpp11
-rw-r--r--src/platforms/px4_nodehandle.h2
-rw-r--r--src/platforms/px4_subscriber.h5
3 files changed, 12 insertions, 6 deletions
diff --git a/src/examples/subscriber/subscriber.cpp b/src/examples/subscriber/subscriber.cpp
index ed0635f18..a186ba94a 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 eb90590e4..45ef225fa 100644
--- a/src/platforms/px4_nodehandle.h
+++ b/src/platforms/px4_nodehandle.h
@@ -114,7 +114,7 @@ public:
SubscriberPX4<M> *sub_px4 = new SubscriberPX4<M>(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 efec8f2a3..6e0ef8aed 100644
--- a/src/platforms/px4_subscriber.h
+++ b/src/platforms/px4_subscriber.h
@@ -89,6 +89,11 @@ public:
~SubscriberPX4() {};
void update() {
+ if (!uORB::Subscription<M>::updated()) {
+ /* Topic not updated, do not call callback */
+ return;
+ }
+
/* get latest data */
uORB::Subscription<M>::update();