summaryrefslogtreecommitdiff
path: root/gr-blocks/lib/rotator_cc_impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'gr-blocks/lib/rotator_cc_impl.h')
-rw-r--r--gr-blocks/lib/rotator_cc_impl.h23
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;