From d3801c39375ac10ab68b5b8725f6867015f2bc40 Mon Sep 17 00:00:00 2001
From: Adrian Suciu <adrian.suciu@analog.com>
Date: Thu, 15 Nov 2018 17:26:22 +0200
Subject: analog: sig_source: Add phase parameter

Note: This does not include GRC bindings.

Signed-off-by: Adrian Suciu <adrian.suciu@analog.com>
Signed-off-by: Martin Braun <martin.braun@ettus.com>
---
 gr-analog/lib/sig_source_impl.cc | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

(limited to 'gr-analog/lib/sig_source_impl.cc')

diff --git a/gr-analog/lib/sig_source_impl.cc b/gr-analog/lib/sig_source_impl.cc
index 0f7ced0eb2..1b3aa82e44 100644
--- a/gr-analog/lib/sig_source_impl.cc
+++ b/gr-analog/lib/sig_source_impl.cc
@@ -38,19 +38,19 @@ namespace analog {
 
 template <class T>
 typename sig_source<T>::sptr sig_source<T>::make(
-    double sampling_freq, gr_waveform_t waveform, double frequency, double ampl, T offset) {
+    double sampling_freq, gr_waveform_t waveform, double frequency, double ampl, T offset, float phase) {
     return gnuradio::get_initial_sptr(
-        new sig_source_impl<T>(sampling_freq, waveform, frequency, ampl, offset));
+        new sig_source_impl<T>(sampling_freq, waveform, frequency, ampl, offset, phase));
 }
 
 template <class T>
 sig_source_impl<T>::sig_source_impl(
-    double sampling_freq, gr_waveform_t waveform, double frequency, double ampl, T offset)
+    double sampling_freq, gr_waveform_t waveform, double frequency, double ampl, T offset, float phase)
     : sync_block("sig_source", io_signature::make(0, 0, 0), io_signature::make(1, 1, sizeof(T))),
       d_sampling_freq(sampling_freq), d_waveform(waveform), d_frequency(frequency), d_ampl(ampl),
       d_offset(offset) {
     this->set_frequency(frequency);
-
+    this->set_phase(phase);
     this->message_port_register_in(pmt::mp("freq"));
     this->set_msg_handler(pmt::mp("freq"), boost::bind(&sig_source_impl<T>::set_frequency_msg, this, _1));
 }
@@ -92,6 +92,7 @@ int sig_source_impl<T>::work(int noutput_items,
                              gr_vector_void_star& output_items) {
     T* optr = (T*)output_items[0];
     T t;
+    gr::thread::scoped_lock l(this->d_setlock);
 
     switch (d_waveform) {
     case GR_CONST_WAVE:
@@ -165,6 +166,7 @@ int sig_source_impl<gr_complex>::work(int noutput_items,
                                       gr_vector_void_star& output_items) {
     gr_complex* optr = (gr_complex*)output_items[0];
     gr_complex t;
+    gr::thread::scoped_lock l(this->d_setlock);
 
     switch (d_waveform) {
     case GR_CONST_WAVE:
@@ -279,6 +281,13 @@ void sig_source_impl<T>::set_offset(T offset) {
     d_offset = offset;
 }
 
+template <class T>
+void sig_source_impl<T>::set_phase(float phase) {
+    gr::thread::scoped_lock l(this->d_setlock);
+    d_nco.set_phase(phase);
+}
+
+
 template class sig_source<std::int16_t>;
 template class sig_source<std::int32_t>;
 template class sig_source<float>;
-- 
cgit v1.2.3