aboutsummaryrefslogtreecommitdiff
path: root/src/modules/mavlink/mavlink_orb_subscription.cpp
diff options
context:
space:
mode:
authorAnton Babushkin <anton.babushkin@me.com>2014-02-24 23:46:58 +0400
committerAnton Babushkin <anton.babushkin@me.com>2014-02-24 23:46:58 +0400
commitd8fdade6aba5e0bd2b56c206d09da4a92fda5fa0 (patch)
tree1ba840d46f4d805b0a6baabbad3450157762508a /src/modules/mavlink/mavlink_orb_subscription.cpp
parentb17cdb12b013a99a924b02ccef718c0ea0f776aa (diff)
downloadpx4-firmware-d8fdade6aba5e0bd2b56c206d09da4a92fda5fa0.tar.gz
px4-firmware-d8fdade6aba5e0bd2b56c206d09da4a92fda5fa0.tar.bz2
px4-firmware-d8fdade6aba5e0bd2b56c206d09da4a92fda5fa0.zip
mavlink: major rewrite, prepare for dynamic mavlink streams configuration, WIP
Diffstat (limited to 'src/modules/mavlink/mavlink_orb_subscription.cpp')
-rw-r--r--src/modules/mavlink/mavlink_orb_subscription.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/modules/mavlink/mavlink_orb_subscription.cpp b/src/modules/mavlink/mavlink_orb_subscription.cpp
new file mode 100644
index 000000000..182407a5e
--- /dev/null
+++ b/src/modules/mavlink/mavlink_orb_subscription.cpp
@@ -0,0 +1,47 @@
+/*
+ * mavlink_orb_subscription.cpp
+ *
+ * Created on: 23.02.2014
+ * Author: ton
+ */
+
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <uORB/uORB.h>
+
+#include "mavlink_orb_subscription.h"
+
+MavlinkOrbSubscription::MavlinkOrbSubscription(const struct orb_metadata *meta, size_t size)
+{
+ this->meta = meta;
+ this->data = malloc(size);
+ memset(this->data, 0, size);
+ this->fd = orb_subscribe(meta);
+ this->last_update = 0;
+ this->interval = 0;
+}
+
+MavlinkOrbSubscription::~MavlinkOrbSubscription()
+{
+ close(fd);
+ free(data);
+}
+
+int MavlinkOrbSubscription::set_interval(const unsigned int interval)
+{
+ this->interval = interval;
+ return orb_set_interval(fd, interval);
+}
+
+int MavlinkOrbSubscription::update(const hrt_abstime t)
+{
+ if (last_update != t) {
+ bool updated;
+ orb_check(fd, &updated);
+ if (updated)
+ return orb_copy(meta, fd, &data);
+ }
+ return OK;
+}