aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/modules/uORB/Publication.cpp27
-rw-r--r--src/modules/uORB/Publication.hpp12
-rw-r--r--src/modules/uORB/Subscription.cpp32
-rw-r--r--src/modules/uORB/Subscription.hpp14
4 files changed, 67 insertions, 18 deletions
diff --git a/src/modules/uORB/Publication.cpp b/src/modules/uORB/Publication.cpp
index ed67b485d..78a5cd204 100644
--- a/src/modules/uORB/Publication.cpp
+++ b/src/modules/uORB/Publication.cpp
@@ -37,3 +37,30 @@
*/
#include "Publication.hpp"
+#include "topics/vehicle_attitude.h"
+#include "topics/vehicle_local_position.h"
+#include "topics/vehicle_global_position.h"
+
+namespace uORB {
+
+template<class T>
+Publication<T>::Publication(
+ List<PublicationBase *> * list,
+ const struct orb_metadata *meta) :
+ T(), // initialize data structure to zero
+ PublicationBase(list, meta) {
+}
+
+template<class T>
+Publication<T>::~Publication() {}
+
+template<class T>
+void * Publication<T>::getDataVoidPtr() {
+ return (void *)(T *)(this);
+}
+
+template class __EXPORT Publication<vehicle_attitude_s>;
+template class __EXPORT Publication<vehicle_local_position_s>;
+template class __EXPORT Publication<vehicle_global_position_s>;
+
+}
diff --git a/src/modules/uORB/Publication.hpp b/src/modules/uORB/Publication.hpp
index 21840ed70..8650b3df8 100644
--- a/src/modules/uORB/Publication.hpp
+++ b/src/modules/uORB/Publication.hpp
@@ -95,13 +95,9 @@ public:
* @param meta The uORB metadata (usually from the ORB_ID() macro)
* for the topic.
*/
- Publication(
- List<PublicationBase *> * list,
- const struct orb_metadata *meta) :
- T(), // initialize data structure to zero
- PublicationBase(list, meta) {
- }
- virtual ~Publication() {}
+ Publication(List<PublicationBase *> * list,
+ const struct orb_metadata *meta);
+ virtual ~Publication();
/*
* XXX
* This function gets the T struct, assuming
@@ -109,7 +105,7 @@ public:
* should use dynamic cast, but doesn't
* seem to be available
*/
- void *getDataVoidPtr() { return (void *)(T *)(this); }
+ void *getDataVoidPtr();
};
} // namespace uORB
diff --git a/src/modules/uORB/Subscription.cpp b/src/modules/uORB/Subscription.cpp
index 6e8830708..16da3b66f 100644
--- a/src/modules/uORB/Subscription.cpp
+++ b/src/modules/uORB/Subscription.cpp
@@ -37,6 +37,10 @@
*/
#include "Subscription.hpp"
+#include "topics/parameter_update.h"
+#include "topics/actuator_controls.h"
+#include "topics/vehicle_gps_position.h"
+#include "topics/sensor_combined.h"
namespace uORB
{
@@ -48,4 +52,32 @@ bool __EXPORT SubscriptionBase::updated()
return isUpdated;
}
+template<class T>
+Subscription<T>::Subscription(
+ List<SubscriptionBase *> * list,
+ const struct orb_metadata *meta, unsigned interval) :
+ T(), // initialize data structure to zero
+ SubscriptionBase(list, meta) {
+ setHandle(orb_subscribe(getMeta()));
+ orb_set_interval(getHandle(), interval);
+}
+
+template<class T>
+Subscription<T>::~Subscription() {}
+
+template<class T>
+void * Subscription<T>::getDataVoidPtr() {
+ return (void *)(T *)(this);
+}
+
+template<class T>
+T Subscription<T>::getData() {
+ return T(*this);
+}
+
+template class __EXPORT Subscription<parameter_update_s>;
+template class __EXPORT Subscription<actuator_controls_s>;
+template class __EXPORT Subscription<vehicle_gps_position_s>;
+template class __EXPORT Subscription<sensor_combined_s>;
+
} // namespace uORB
diff --git a/src/modules/uORB/Subscription.hpp b/src/modules/uORB/Subscription.hpp
index d839f8023..34e9a83e0 100644
--- a/src/modules/uORB/Subscription.hpp
+++ b/src/modules/uORB/Subscription.hpp
@@ -108,17 +108,11 @@ public:
*/
Subscription(
List<SubscriptionBase *> * list,
- const struct orb_metadata *meta, unsigned interval) :
- T(), // initialize data structure to zero
- SubscriptionBase(list, meta) {
- setHandle(orb_subscribe(getMeta()));
- orb_set_interval(getHandle(), interval);
- }
-
+ const struct orb_metadata *meta, unsigned interval);
/**
* Deconstructor
*/
- virtual ~Subscription() {}
+ virtual ~Subscription();
/*
* XXX
@@ -127,8 +121,8 @@ public:
* should use dynamic cast, but doesn't
* seem to be available
*/
- void *getDataVoidPtr() { return (void *)(T *)(this); }
- T getData() { return T(*this); }
+ void *getDataVoidPtr();
+ T getData();
};
} // namespace uORB