From 3fd247b26b204f99bd89a8a0412791bd16ce424f Mon Sep 17 00:00:00 2001 From: stevie Date: Mon, 17 Jan 2011 08:47:36 +0000 Subject: [PATCH] Make snapshot msgq an optional attribute. git-svn-id: http://op25.osmocom.org/svn/trunk@242 65a5c917-d112-43f1-993d-58c26a4786be --- decoder/src/lib/op25.i | 8 +++--- decoder/src/lib/op25_decoder_ff.cc | 22 +++++++++++++--- decoder/src/lib/op25_decoder_ff.h | 35 ++++++++++++++++++-------- decoder/src/lib/snapshot_du_handler.cc | 17 ++++++++++--- decoder/src/lib/snapshot_du_handler.h | 20 ++++++++++++++- decoder/src/lib/sniffer_du_handler.h | 6 ++--- 6 files changed, 84 insertions(+), 24 deletions(-) diff --git a/decoder/src/lib/op25.i b/decoder/src/lib/op25.i index 9d9886f..78be766 100644 --- a/decoder/src/lib/op25.i +++ b/decoder/src/lib/op25.i @@ -21,9 +21,9 @@ GR_SWIG_BLOCK_MAGIC(op25, decoder_ff); /* - * Publicly-accesible constuctor function for op25_decoder_ff. + * Publicly-accesible default constuctor function for op25_decoder_ff. */ -op25_decoder_ff_sptr op25_make_decoder_ff(gr_msg_queue_sptr msgq); +op25_decoder_ff_sptr op25_make_decoder_ff(); /* * The op25_decoder block. @@ -31,7 +31,9 @@ op25_decoder_ff_sptr op25_make_decoder_ff(gr_msg_queue_sptr msgq); class op25_decoder_ff : public gr_block { private: - op25_decoder_ff(gr_msg_queue_sptr msgq); + op25_decoder_ff(); public: const char *device_name() const; + gr_msg_queue_sptr get_msgq() const; + void set_msgq(gr_msg_queue_sptr msgq); }; diff --git a/decoder/src/lib/op25_decoder_ff.cc b/decoder/src/lib/op25_decoder_ff.cc index f31eeb7..3329c42 100644 --- a/decoder/src/lib/op25_decoder_ff.cc +++ b/decoder/src/lib/op25_decoder_ff.cc @@ -33,21 +33,34 @@ #include #include #include +#include #include #include using namespace std; op25_decoder_ff_sptr -op25_make_decoder_ff(gr_msg_queue_sptr msgq) +op25_make_decoder_ff() { - return op25_decoder_ff_sptr(new op25_decoder_ff(msgq)); + return op25_decoder_ff_sptr(new op25_decoder_ff); } op25_decoder_ff::~op25_decoder_ff() { } +gr_msg_queue_sptr +op25_decoder_ff::get_msgq() const +{ + return d_snapshot_du_handler->get_msgq(); +} + +void +op25_decoder_ff::set_msgq(gr_msg_queue_sptr msgq) +{ + d_snapshot_du_handler->set_msgq(msgq); +} + void op25_decoder_ff::forecast(int nof_output_items, gr_vector_int &nof_input_items_reqd) { @@ -109,7 +122,7 @@ op25_decoder_ff::device_name() const return d_sniffer_du_handler->device_name(); } -op25_decoder_ff::op25_decoder_ff(gr_msg_queue_sptr msgq) : +op25_decoder_ff::op25_decoder_ff() : gr_block("decoder_ff", gr_make_io_signature(1, 1, sizeof(float)), gr_make_io_signature(0, 1, sizeof(float))), d_data_unit(), d_data_unit_handler(), @@ -120,7 +133,8 @@ op25_decoder_ff::op25_decoder_ff(gr_msg_queue_sptr msgq) : { d_sniffer_du_handler = new sniffer_du_handler(d_data_unit_handler); d_data_unit_handler = data_unit_handler_sptr(d_sniffer_du_handler); - d_data_unit_handler = data_unit_handler_sptr(new snapshot_du_handler(d_data_unit_handler, msgq)); + d_snapshot_du_handler = new snapshot_du_handler(d_data_unit_handler); + d_data_unit_handler = data_unit_handler_sptr(d_snapshot_du_handler); d_data_unit_handler = data_unit_handler_sptr(new voice_du_handler(d_data_unit_handler, d_imbe)); } diff --git a/decoder/src/lib/op25_decoder_ff.h b/decoder/src/lib/op25_decoder_ff.h index 4bac426..40c64d6 100644 --- a/decoder/src/lib/op25_decoder_ff.h +++ b/decoder/src/lib/op25_decoder_ff.h @@ -30,11 +30,10 @@ #include #include #include -#include typedef boost::shared_ptr op25_decoder_ff_sptr; -op25_decoder_ff_sptr op25_make_decoder_ff(gr_msg_queue_sptr msgq); +op25_decoder_ff_sptr op25_make_decoder_ff(); /** * op25_decoder_ff is a GNU Radio block for decoding APCO P25 @@ -69,6 +68,22 @@ public: */ const char *device_name() const; + /** + * Accessor for the msgq attribute. Returns a pointer to the msgq + * if it exists. + * + * \return A (possibly NULL) gr_msg_queue_sptr pointing to the message queue. + */ + gr_msg_queue_sptr get_msgq() const; + + /** + * Accessor for the msgq attribute. Sets the msgq to point to the + * provided message queue object. + * + * \return A (possibly NULL) gr_msg_queue_sptr pointing to the message queue. + */ + void set_msgq(gr_msg_queue_sptr msgq); + private: /** @@ -76,12 +91,12 @@ private: * op25_decoder_ff and wrap it in a shared_ptr. This is effectively * the public constructor. */ - friend op25_decoder_ff_sptr op25_make_decoder_ff(gr_msg_queue_sptr msgq); + friend op25_decoder_ff_sptr op25_make_decoder_ff(); /** * op25_decoder_ff protected constructor. */ - op25_decoder_ff(gr_msg_queue_sptr msgq); + op25_decoder_ff(); /** * Tests whether d_frame_header correlates with the APCO P25 frame @@ -134,11 +149,6 @@ private: */ imbe_decoder_sptr d_imbe; - /** - * The message queue used to send snapshots to the UI. - */ - gr_msg_queue_sptr d_msgq; - /** * Valid states for the decoder state model. */ @@ -147,7 +157,12 @@ private: /** * The sniffer (TUN/TAP) data unit handler. */ - sniffer_du_handler *d_sniffer_du_handler; + class sniffer_du_handler *d_sniffer_du_handler; + + /** + * The snapshot data unit handler. + */ + class snapshot_du_handler *d_snapshot_du_handler; }; diff --git a/decoder/src/lib/snapshot_du_handler.cc b/decoder/src/lib/snapshot_du_handler.cc index a2e1399..222f5ed 100644 --- a/decoder/src/lib/snapshot_du_handler.cc +++ b/decoder/src/lib/snapshot_du_handler.cc @@ -27,10 +27,9 @@ using std::string; -snapshot_du_handler::snapshot_du_handler(data_unit_handler_sptr next, gr_msg_queue_sptr msgq) : +snapshot_du_handler::snapshot_du_handler(data_unit_handler_sptr next) : data_unit_handler(next), - d_data_units(0), - d_msgq(msgq) + d_data_units(0) { } @@ -53,3 +52,15 @@ snapshot_du_handler::handle(data_unit_sptr du) } data_unit_handler::handle(du); } + +gr_msg_queue_sptr +snapshot_du_handler::get_msgq() const +{ + return d_msgq; +} + +void +snapshot_du_handler::set_msgq(gr_msg_queue_sptr msgq) +{ + d_msgq = msgq; +} diff --git a/decoder/src/lib/snapshot_du_handler.h b/decoder/src/lib/snapshot_du_handler.h index d117ac8..3f92120 100644 --- a/decoder/src/lib/snapshot_du_handler.h +++ b/decoder/src/lib/snapshot_du_handler.h @@ -45,7 +45,7 @@ public: * \param next The next data_unit_handler in the chain. * \param msgq A non-null msg_queue_sptr to the msg_queue to use. */ - snapshot_du_handler(data_unit_handler_sptr next, gr_msg_queue_sptr msgq); + snapshot_du_handler(data_unit_handler_sptr next); /** * snapshot_du_handler virtual destructor. @@ -59,6 +59,22 @@ public: */ virtual void handle(data_unit_sptr du); + /** + * Accessor for the msgq attribute. Returns a pointer to the msgq + * if it exists. + * + * \return A (possibly NULL) gr_msg_queue_sptr pointing to the message queue. + */ + gr_msg_queue_sptr get_msgq() const; + + /** + * Accessor for the msgq attribute. Sets the msgq to point to the + * provided message queue object. + * + * \return A (possibly NULL) gr_msg_queue_sptr pointing to the message queue. + */ + void set_msgq(gr_msg_queue_sptr msgq); + private: /** @@ -73,4 +89,6 @@ private: }; + + #endif /* INCLUDED_SNAPSHOT_DU_HANDLER_H */ diff --git a/decoder/src/lib/sniffer_du_handler.h b/decoder/src/lib/sniffer_du_handler.h index 54d3c6e..520b850 100644 --- a/decoder/src/lib/sniffer_du_handler.h +++ b/decoder/src/lib/sniffer_du_handler.h @@ -55,11 +55,11 @@ public: virtual void handle(data_unit_sptr du); /** - * Return a pointer to a string naming the TUN/TAP device. + * Returns the name of the sniffer TUN/TAP device. * - * \return A pointer to a NUL-terminated character string. + * \return A pointer to a NUL-terminated string. */ - const char *device_name() const; + virtual const char *device_name() const; private: