diff options
Diffstat (limited to 'gr-blocks/lib/rotator_cc_impl.h')
-rw-r--r-- | gr-blocks/lib/rotator_cc_impl.h | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/gr-blocks/lib/rotator_cc_impl.h b/gr-blocks/lib/rotator_cc_impl.h index c1001d11b3..dbdb13a679 100644 --- a/gr-blocks/lib/rotator_cc_impl.h +++ b/gr-blocks/lib/rotator_cc_impl.h @@ -13,10 +13,26 @@ #include <gnuradio/blocks/rotator.h> #include <gnuradio/blocks/rotator_cc.h> +#include <queue> namespace gr { namespace blocks { +struct phase_inc_update_t { + uint64_t offset; + double phase_inc; +}; + +bool cmp_phase_inc_update_offset(phase_inc_update_t lhs, phase_inc_update_t rhs) +{ + return lhs.offset > rhs.offset; +}; + +typedef std::priority_queue<phase_inc_update_t, + std::vector<phase_inc_update_t>, + decltype(&cmp_phase_inc_update_offset)> + phase_inc_queue_t; + /*! * \brief Complex rotator * \ingroup math_blk @@ -25,9 +41,14 @@ class rotator_cc_impl : public rotator_cc { private: rotator d_r; + bool d_tag_inc_updates; + phase_inc_queue_t d_inc_update_queue; + gr::thread::mutex d_mutex; + + void handle_cmd_msg(pmt::pmt_t msg); public: - rotator_cc_impl(double phase_inc = 0.0); + rotator_cc_impl(double phase_inc = 0.0, bool tag_inc_updates = false); ~rotator_cc_impl() override; void set_phase_inc(double phase_inc) override; |