diff options
author | Thomas Gubler <thomasgubler@gmail.com> | 2014-12-11 10:51:19 +0100 |
---|---|---|
committer | Thomas Gubler <thomasgubler@gmail.com> | 2014-12-11 10:51:19 +0100 |
commit | 173b1b2a8bcf2344be92b1f6e5acbc089a43fcab (patch) | |
tree | 63afb74e15312ecf8c60800962895e217c6e634c | |
parent | a1685ed6d093ec01214e6839ea66f9dd565e55ce (diff) | |
download | px4-firmware-173b1b2a8bcf2344be92b1f6e5acbc089a43fcab.tar.gz px4-firmware-173b1b2a8bcf2344be92b1f6e5acbc089a43fcab.tar.bz2 px4-firmware-173b1b2a8bcf2344be92b1f6e5acbc089a43fcab.zip |
WIP, make class based and extended subscriber/publisher example compile for ros
-rw-r--r-- | CMakeLists.txt | 24 | ||||
-rw-r--r-- | src/examples/publisher/publisher_example.cpp | 2 | ||||
-rw-r--r-- | src/examples/publisher/publisher_example.h | 1 | ||||
-rw-r--r-- | src/examples/publisher/publisher_main.cpp | 6 | ||||
-rw-r--r-- | src/examples/subscriber/subscriber_example.cpp | 7 | ||||
-rw-r--r-- | src/examples/subscriber/subscriber_example.h | 3 | ||||
-rw-r--r-- | src/examples/subscriber/subscriber_main.cpp | 6 | ||||
-rw-r--r-- | src/platforms/px4_defines.h | 7 | ||||
-rw-r--r-- | src/platforms/px4_nodehandle.h | 13 |
9 files changed, 50 insertions, 19 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index e91f2cc37..f206a5aa2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -111,7 +111,9 @@ target_link_libraries(px4 ) ## Declare a test publisher -add_executable(publisher src/examples/publisher/publisher.cpp) +add_executable(publisher + src/examples/publisher/publisher_main.cpp + src/examples/publisher/publisher_example.cpp) ## Add cmake target dependencies of the executable/library ## as an example, message headers may need to be generated before nodes @@ -124,7 +126,9 @@ target_link_libraries(publisher ) ## Declare a test subscriber -add_executable(subscriber src/examples/subscriber/subscriber.cpp) +add_executable(subscriber + src/examples/subscriber/subscriber_main.cpp + src/examples/subscriber/subscriber_example.cpp) ## Add cmake target dependencies of the executable/library ## as an example, message headers may need to be generated before nodes @@ -136,14 +140,14 @@ target_link_libraries(subscriber px4 ) -add_executable(mc_att_control - src/modules/mc_att_control/mc_att_control_main.cpp - src/moudles/mc_att_control/mc_att_control_base.cpp) -add_dependencies(mc_att_control px4_generate_messages_cpp) -target_link_libraries(mc_att_control - ${catkin_LIBRARIES} - px4 -) +# add_executable(mc_att_control + # src/modules/mc_att_control/mc_att_control_main.cpp + # src/moudles/mc_att_control/mc_att_control_base.cpp) +# add_dependencies(mc_att_control px4_generate_messages_cpp) +# target_link_libraries(mc_att_control + # ${catkin_LIBRARIES} + # px4 +# ) ############# diff --git a/src/examples/publisher/publisher_example.cpp b/src/examples/publisher/publisher_example.cpp index 3c716291b..2e5779ebe 100644 --- a/src/examples/publisher/publisher_example.cpp +++ b/src/examples/publisher/publisher_example.cpp @@ -41,6 +41,8 @@ #include "publisher_example.h" +using namespace px4; + PublisherExample::PublisherExample() : _n(), _rc_channels_pub(PX4_ADVERTISE(_n, rc_channels)) diff --git a/src/examples/publisher/publisher_example.h b/src/examples/publisher/publisher_example.h index 78c1ffc89..304ecef47 100644 --- a/src/examples/publisher/publisher_example.h +++ b/src/examples/publisher/publisher_example.h @@ -38,6 +38,7 @@ * @author Thomas Gubler <thomasgubler@gmail.com> */ #include <px4.h> + class PublisherExample { public: PublisherExample(); diff --git a/src/examples/publisher/publisher_main.cpp b/src/examples/publisher/publisher_main.cpp index c4e79aaa6..8b692d963 100644 --- a/src/examples/publisher/publisher_main.cpp +++ b/src/examples/publisher/publisher_main.cpp @@ -51,6 +51,7 @@ using namespace px4; PX4_MAIN_FUNCTION(publisher); +#if !defined(__linux) && !(defined(__APPLE__) && defined(__MACH__)) extern "C" __EXPORT int publisher_main(int argc, char *argv[]) { px4::init(argc, argv, "publisher"); @@ -98,15 +99,16 @@ extern "C" __EXPORT int publisher_main(int argc, char *argv[]) warnx("unrecognized command"); return 1; } +#endif PX4_MAIN_FUNCTION(publisher) { - warnx("starting"); + PX4_INFO("starting"); PublisherExample p; thread_running = true; p.main(); - warnx("exiting."); + PX4_INFO("exiting."); thread_running = false; return 0; } diff --git a/src/examples/subscriber/subscriber_example.cpp b/src/examples/subscriber/subscriber_example.cpp index 4e0350ff0..39d090752 100644 --- a/src/examples/subscriber/subscriber_example.cpp +++ b/src/examples/subscriber/subscriber_example.cpp @@ -76,7 +76,8 @@ SubscriberExample::SubscriberExample() : * Also the current value of the _sub_rc_chan subscription is printed */ void SubscriberExample::rc_channels_callback(const PX4_TOPIC_T(rc_channels) &msg) { - PX4_INFO("Subscriber callback: [%llu], value of _sub_rc_chan: [%llu]", - msg.timestamp_last_valid, - ((SubscriberPX4<PX4_TOPIC_T(rc_channels)> *)_sub_rc_chan)->timestamp_last_valid); + //XXX + // PX4_INFO("Subscriber callback: [%llu], value of _sub_rc_chan: [%llu]", + // msg.timestamp_last_valid, + // ((SubscriberPX4<PX4_TOPIC_T(rc_channels)> *)_sub_rc_chan)->timestamp_last_valid); } diff --git a/src/examples/subscriber/subscriber_example.h b/src/examples/subscriber/subscriber_example.h index 848d43f76..73c739035 100644 --- a/src/examples/subscriber/subscriber_example.h +++ b/src/examples/subscriber/subscriber_example.h @@ -38,6 +38,9 @@ * @author Thomas Gubler <thomasgubler@gmail.com> */ #include <px4.h> + +using namespace px4; + class SubscriberExample { public: SubscriberExample(); diff --git a/src/examples/subscriber/subscriber_main.cpp b/src/examples/subscriber/subscriber_main.cpp index 0436dc9f2..716233739 100644 --- a/src/examples/subscriber/subscriber_main.cpp +++ b/src/examples/subscriber/subscriber_main.cpp @@ -51,6 +51,7 @@ using namespace px4; PX4_MAIN_FUNCTION(subscriber); +#if !defined(__linux) && !(defined(__APPLE__) && defined(__MACH__)) extern "C" __EXPORT int subscriber_main(int argc, char *argv[]) { if (argc < 1) { @@ -96,17 +97,18 @@ extern "C" __EXPORT int subscriber_main(int argc, char *argv[]) warnx("unrecognized command"); return 1; } +#endif PX4_MAIN_FUNCTION(subscriber) { px4::init(argc, argv, "subscriber"); - warnx("starting"); + PX4_INFO("starting"); SubscriberExample s; thread_running = true; s.spin(); - warnx("exiting."); + PX4_INFO("exiting."); thread_running = false; return 0; } diff --git a/src/platforms/px4_defines.h b/src/platforms/px4_defines.h index 440f1b6fc..819954d0e 100644 --- a/src/platforms/px4_defines.h +++ b/src/platforms/px4_defines.h @@ -66,9 +66,11 @@ #define PX4_TOPIC_T(_name) _name /* Subscribe and providing a class method as callback (do not use directly, use PX4_SUBSCRIBE instead) */ -#define PX4_SUBSCRIBE_CBMETH(_nodehandle, _name, _cbf, _obj, _interval) _nodehandle.subscribe(PX4_TOPIC(_name), &_cbf, &_obj); +#define PX4_SUBSCRIBE_CBMETH(_nodehandle, _name, _cbf, _objptr, _interval) _nodehandle.subscribe(PX4_TOPIC(_name), &_cbf, _objptr); /* Subscribe and providing a function as callback (do not use directly, use PX4_SUBSCRIBE instead) */ #define PX4_SUBSCRIBE_CBFUNC(_nodehandle, _name, _cbf, _interval) _nodehandle.subscribe(PX4_TOPIC(_name), _cbf); +/* Subscribe without a callback (do not use directly, use PX4_SUBSCRIBE instead) */ +#define PX4_SUBSCRIBE_NOCB(_nodehandle, _name, _interval) _nodehandle.subscribe<const PX4_TOPIC_T(_name)&>(PX4_TOPIC(_name)); /* Parameter handle datatype */ typedef const char *px4_param_t; @@ -113,9 +115,10 @@ static inline px4_param_t PX4_ROS_PARAM_SET(const char *name, float value) #define PX4_TOPIC_T(_name) _name##_s /* Subscribe and providing a class method as callback (do not use directly, use PX4_SUBSCRIBE instead) */ -#define PX4_SUBSCRIBE_CBMETH(_nodehandle, _name, _cbf, _obj, _interval) _nodehandle.subscribe<PX4_TOPIC_T(_name)>(PX4_TOPIC(_name), std::bind(&_cbf, _obj, std::placeholders::_1), _interval) +#define PX4_SUBSCRIBE_CBMETH(_nodehandle, _name, _cbf, _objptr, _interval) _nodehandle.subscribe<PX4_TOPIC_T(_name)>(PX4_TOPIC(_name), std::bind(&_cbf, _objptr, std::placeholders::_1), _interval) /* Subscribe and providing a function as callback (do not use directly, use PX4_SUBSCRIBE instead) */ #define PX4_SUBSCRIBE_CBFUNC(_nodehandle, _name, _cbf, _interval) _nodehandle.subscribe<PX4_TOPIC_T(_name)>(PX4_TOPIC(_name), std::bind(&_cbf, std::placeholders::_1), _interval) +/* Subscribe without a callback (do not use directly, use PX4_SUBSCRIBE instead) */ #define PX4_SUBSCRIBE_NOCB(_nodehandle, _name, _interval) _nodehandle.subscribe<PX4_TOPIC_T(_name)>(PX4_TOPIC(_name), nullptr, _interval) /* Parameter handle datatype */ diff --git a/src/platforms/px4_nodehandle.h b/src/platforms/px4_nodehandle.h index 5b7247b20..25b8e037d 100644 --- a/src/platforms/px4_nodehandle.h +++ b/src/platforms/px4_nodehandle.h @@ -100,6 +100,19 @@ public: } /** + * Subscribe with no callback, just the latest value is stored on updates + * @param topic Name of the topic + */ + template<typename M> + Subscriber *subscribe(const char *topic) + { + //XXX missing implementation + // Subscriber *sub = new Subscriber(ros_sub); + // _subs.push_back(sub); + return (Subscriber *)NULL; + } + + /** * Advertise topic * @param topic Name of the topic */ |