diff --git a/gr-jay/grc/jay_frequency_tuner.xml b/gr-jay/grc/jay_frequency_tuner.xml new file mode 100644 index 0000000..8fe2e15 --- /dev/null +++ b/gr-jay/grc/jay_frequency_tuner.xml @@ -0,0 +1,34 @@ + + + frequency_tuner + jay_frequency_tuner + [jay] + import jay + jay.frequency_tuner($freq_min, $freq_max, $freq_step) + + Frequency Min + freq_min + 0 + float + + + Frequency Max + freq_max + 0 + float + + + Frequency Step + freq_step + 0 + float + + + in + complex + + + out + complex + + diff --git a/gr-jay/include/jay/frequency_tuner.h b/gr-jay/include/jay/frequency_tuner.h new file mode 100644 index 0000000..f5a3e15 --- /dev/null +++ b/gr-jay/include/jay/frequency_tuner.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2019 Jay Arrowfield. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + + +#ifndef INCLUDED_JAY_FREQUENCY_TUNER_H +#define INCLUDED_JAY_FREQUENCY_TUNER_H + +#include +#include + +namespace gr { + namespace jay { + + /*! + * \brief <+description of block+> + * \ingroup jay + * + */ + class JAY_API frequency_tuner : virtual public gr::block + { + public: + typedef boost::shared_ptr sptr; + + /*! + * \brief Return a shared_ptr to a new instance of jay::frequency_tuner. + * + * To avoid accidental use of raw pointers, jay::frequency_tuner's + * constructor is in a private implementation + * class. jay::frequency_tuner::make is the public interface for + * creating new instances. + */ + static sptr make(float freq_min, float freq_max, float freq_step); + }; + + } // namespace jay +} // namespace gr + +#endif /* INCLUDED_JAY_FREQUENCY_TUNER_H */ + diff --git a/gr-jay/lib/frequency_tuner_impl.cc b/gr-jay/lib/frequency_tuner_impl.cc new file mode 100644 index 0000000..6c41806 --- /dev/null +++ b/gr-jay/lib/frequency_tuner_impl.cc @@ -0,0 +1,81 @@ +/* -*- c++ -*- */ +/* + * Copyright 2019 Jay Arrowfield. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include "frequency_tuner_impl.h" + +namespace gr { + namespace jay { + + frequency_tuner::sptr + frequency_tuner::make(float freq_min, float freq_max, float freq_step) + { + return gnuradio::get_initial_sptr + (new frequency_tuner_impl(freq_min, freq_max, freq_step)); + } + + /* + * The private constructor + */ + frequency_tuner_impl::frequency_tuner_impl(float freq_min, float freq_max, float freq_step) + : gr::block("frequency_tuner", gr::io_signature::make(1, 1, sizeof(gr_complex)), gr::io_signature::make(1, 1, sizeof(gr_complex))) + , m_freq_min(freq_min) + , m_freq_max(freq_max) + , m_freq_step(freq_step) + {} + + /* + * Our virtual destructor. + */ + frequency_tuner_impl::~frequency_tuner_impl() + { + } + + void + frequency_tuner_impl::forecast (int noutput_items, gr_vector_int &ninput_items_required) + { + ninput_items_required[0] = noutput_items; + } + + int + frequency_tuner_impl::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) + { + const gr_complex *in = (const gr_complex *) input_items[0]; + gr_complex *out = (gr_complex *) output_items[0]; + + // Do <+signal processing+> + // Tell runtime system how many input items we consumed on + // each input stream. + consume_each (noutput_items); + + // Tell runtime system how many output items we produced. + return noutput_items; + } + + } /* namespace jay */ +} /* namespace gr */ + diff --git a/gr-jay/lib/frequency_tuner_impl.h b/gr-jay/lib/frequency_tuner_impl.h new file mode 100644 index 0000000..55ce273 --- /dev/null +++ b/gr-jay/lib/frequency_tuner_impl.h @@ -0,0 +1,53 @@ +/* -*- c++ -*- */ +/* + * Copyright 2019 Jay Arrowfield. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef INCLUDED_JAY_FREQUENCY_TUNER_IMPL_H +#define INCLUDED_JAY_FREQUENCY_TUNER_IMPL_H + +#include + +namespace gr { + namespace jay { + + class frequency_tuner_impl : public frequency_tuner + { + private: + // Nothing to declare in this block. + float m_freq_min; + float m_freq_max; + float m_freq_step; + public: + frequency_tuner_impl(float freq_min, float freq_max, float freq_step); + ~frequency_tuner_impl(); + + // Where all the action really happens + void forecast (int noutput_items, gr_vector_int &ninput_items_required); + + int general_work(int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + }; + + } // namespace jay +} // namespace gr + +#endif /* INCLUDED_JAY_FREQUENCY_TUNER_IMPL_H */ +