From 43b460a2aef636e3b066822ec349342c07e1cfb0 Mon Sep 17 00:00:00 2001 From: Bastian Bloessl Date: Tue, 26 Aug 2014 11:07:22 +0200 Subject: [PATCH] pms: no eof port, quit variable --- grc/foo_periodic_msg_source.xml | 23 +++++++++++++++-------- include/foo/periodic_msg_source.h | 3 ++- lib/periodic_msg_source_impl.cc | 24 +++++------------------- lib/periodic_msg_source_impl.h | 5 +++-- 4 files changed, 25 insertions(+), 30 deletions(-) diff --git a/grc/foo_periodic_msg_source.xml b/grc/foo_periodic_msg_source.xml index 48b07ed..47ca67f 100644 --- a/grc/foo_periodic_msg_source.xml +++ b/grc/foo_periodic_msg_source.xml @@ -6,7 +6,7 @@ Foo import foo import pmt - foo.periodic_msg_source($msg, $interval, $num, $debug) + foo.periodic_msg_source($msg, $interval, $num, $quit, $debug) Message PMT msg @@ -19,6 +19,20 @@ 1000 real + + Quit + quit + True + bool + + + Debug debug @@ -39,13 +53,6 @@ -1 int - - - eof in - message - 1 - - out message diff --git a/include/foo/periodic_msg_source.h b/include/foo/periodic_msg_source.h index df56616..9f281b3 100644 --- a/include/foo/periodic_msg_source.h +++ b/include/foo/periodic_msg_source.h @@ -28,7 +28,8 @@ class FOO_API periodic_msg_source : virtual public gr::block public: typedef boost::shared_ptr sptr; - static sptr make(pmt::pmt_t msg, float interval, int num_msg = -1, bool debug = false); + static sptr make(pmt::pmt_t msg, float interval, int num_msg = -1, + bool quit = true, bool debug = false); virtual void set_nmsg(int nmsg) = 0; virtual int get_nmsg() = 0; diff --git a/lib/periodic_msg_source_impl.cc b/lib/periodic_msg_source_impl.cc index 6aeac07..0b2a06c 100644 --- a/lib/periodic_msg_source_impl.cc +++ b/lib/periodic_msg_source_impl.cc @@ -25,7 +25,7 @@ using namespace gr::foo; #define dout d_debug && std::cout periodic_msg_source_impl::periodic_msg_source_impl(pmt::pmt_t msg, - float interval, int num_msg, bool debug) : + float interval, int num_msg, bool quit, bool debug) : block("periodic_msg_source", gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0)), @@ -38,9 +38,6 @@ periodic_msg_source_impl::periodic_msg_source_impl(pmt::pmt_t msg, message_port_register_out(pmt::mp("out")); - message_port_register_in(pmt::mp("eof in")); - set_msg_handler(pmt::mp("eof in"), boost::bind(&periodic_msg_source_impl::eof_in, this, _1)); - d_thread = new boost::thread(boost::bind(&periodic_msg_source_impl::run, this, this)); } @@ -53,19 +50,6 @@ periodic_msg_source_impl::~periodic_msg_source_impl() { delete d_thread; } -void -periodic_msg_source_impl::eof_in (pmt::pmt_t msg) { - - if(pmt::is_eof_object(msg)) { - detail().get()->set_done(true); - dout << "PMS: stopping msg source" << std::endl; - message_port_pub(pmt::mp("out"), pmt::PMT_EOF); - return; - } else { - dout << "PMS: non EOF message at eof port!" << std::endl; - } -} - void periodic_msg_source_impl::run(periodic_msg_source_impl *instance) { @@ -80,6 +64,7 @@ periodic_msg_source_impl::run(periodic_msg_source_impl *instance) { gr::thread::scoped_lock(d_mutex); if(d_finished || !d_nmsg_left) { d_finished = true; + if(d_quit) post(pmt::mp("system"), pmt::cons(pmt::mp("done"), pmt::from_long(1))); break; } @@ -100,6 +85,7 @@ periodic_msg_source_impl::run(periodic_msg_source_impl *instance) { gr::thread::scoped_lock(d_mutex); dout << "PMS: thread interrupted" << std::endl; d_finished = true; + if(d_quit) post(pmt::mp("system"), pmt::cons(pmt::mp("done"), pmt::from_long(1))); } } @@ -153,7 +139,7 @@ periodic_msg_source_impl::is_running() { } periodic_msg_source::sptr -periodic_msg_source::make(pmt::pmt_t msg, float interval, int num_msg, bool debug) { - return gnuradio::get_initial_sptr(new periodic_msg_source_impl(msg, interval, num_msg, debug)); +periodic_msg_source::make(pmt::pmt_t msg, float interval, int num_msg, bool quit, bool debug) { + return gnuradio::get_initial_sptr(new periodic_msg_source_impl(msg, interval, num_msg, quit, debug)); } diff --git a/lib/periodic_msg_source_impl.h b/lib/periodic_msg_source_impl.h index 3c09243..7018dc3 100644 --- a/lib/periodic_msg_source_impl.h +++ b/lib/periodic_msg_source_impl.h @@ -25,11 +25,11 @@ namespace foo { class periodic_msg_source_impl : public periodic_msg_source { private: void run(periodic_msg_source_impl *instance); - void eof_in(pmt::pmt_t msg); int d_nmsg_total; int d_nmsg_left; bool d_debug; + bool d_quit; bool d_finished; float d_interval; pmt::pmt_t d_msg; @@ -38,7 +38,8 @@ namespace foo { public: periodic_msg_source_impl(pmt::pmt_t msg, - float interval, int num_msg, bool debug); + float interval, int num_msg, + bool quit, bool debug); virtual ~periodic_msg_source_impl(); void set_nmsg(int nmsg);