aboutsummaryrefslogtreecommitdiffstats
path: root/tools/gr-usrptest/lib
diff options
context:
space:
mode:
Diffstat (limited to 'tools/gr-usrptest/lib')
-rw-r--r--tools/gr-usrptest/lib/CMakeLists.txt1
-rw-r--r--tools/gr-usrptest/lib/measurement_sink_f_impl.cc124
-rw-r--r--tools/gr-usrptest/lib/measurement_sink_f_impl.h62
-rw-r--r--tools/gr-usrptest/lib/qa_usrptest.cc36
-rw-r--r--tools/gr-usrptest/lib/qa_usrptest.h38
-rw-r--r--tools/gr-usrptest/lib/test_usrptest.cc48
6 files changed, 309 insertions, 0 deletions
diff --git a/tools/gr-usrptest/lib/CMakeLists.txt b/tools/gr-usrptest/lib/CMakeLists.txt
index dd44b7f26..2d8f0fe16 100644
--- a/tools/gr-usrptest/lib/CMakeLists.txt
+++ b/tools/gr-usrptest/lib/CMakeLists.txt
@@ -26,6 +26,7 @@ include_directories(${Boost_INCLUDE_DIR})
link_directories(${Boost_LIBRARY_DIRS})
list(APPEND usrptest_sources
+ measurement_sink_f_impl.cc
)
set(usrptest_sources "${usrptest_sources}" PARENT_SCOPE)
diff --git a/tools/gr-usrptest/lib/measurement_sink_f_impl.cc b/tools/gr-usrptest/lib/measurement_sink_f_impl.cc
new file mode 100644
index 000000000..58faccb9a
--- /dev/null
+++ b/tools/gr-usrptest/lib/measurement_sink_f_impl.cc
@@ -0,0 +1,124 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2016 Ettus Research LLC.
+ *
+ * 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 <gnuradio/io_signature.h>
+#include "measurement_sink_f_impl.h"
+
+namespace gr {
+ namespace usrptest {
+
+ measurement_sink_f::sptr
+ measurement_sink_f::make(int num_samples, int runs)
+ {
+ return gnuradio::get_initial_sptr
+ (new measurement_sink_f_impl(num_samples, runs));
+
+ }
+
+ /*
+ * The private constructor
+ */
+ measurement_sink_f_impl::measurement_sink_f_impl(int num_samples, int runs)
+ : gr::sync_block("measurement_sink_f",
+ gr::io_signature::make(1, 1, sizeof(float)),
+ gr::io_signature::make(0, 0, 0)),
+ d_runs(runs),
+ d_nsamples(num_samples)
+ {
+ d_curr_run = 0; // number of completed measurement runs
+ d_curr_avg = 0.0f; // accumulated average
+ d_curr_M2 = 0.0f; // accumulated M2
+ d_run = false; // true if a measurement is currently recorded
+ d_curr_sample = 0; // current sample count
+ }
+
+ /*
+ * Our virtual destructor.
+ */
+ measurement_sink_f_impl::~measurement_sink_f_impl()
+ {
+ }
+
+ int
+ measurement_sink_f_impl::work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+ {
+ const float *in = (const float *) input_items[0];
+ if ((d_curr_run < d_runs)&&d_run){ //check if we need to record data
+ const int max_items = std::min(noutput_items, d_nsamples-d_curr_sample); // calculate number of samples we have to take into account
+ for (int item=0; item < max_items;++item){
+ ++d_curr_sample;
+ inc_both(in[item]);
+ }
+ if (d_curr_sample == d_nsamples) {
+ d_avg.push_back(d_curr_avg);
+ d_stddev.push_back(std::sqrt(d_curr_M2/(float)(d_curr_sample - 1)));
+ ++d_curr_run;
+ d_run = false;
+ d_curr_sample = 0;
+ d_curr_avg = 0.0f;
+ d_curr_M2 = 0.0f;
+ }
+ }
+ return noutput_items;
+ }
+
+
+ void
+ measurement_sink_f_impl::inc_both(const float new_val)
+ {
+ float delta = new_val - d_curr_avg;
+ d_curr_avg = d_curr_avg + delta/(float)(d_curr_sample);
+ d_curr_M2 = d_curr_M2 + delta*(new_val - d_curr_avg);
+ }
+
+
+ void
+ measurement_sink_f_impl::start_run()
+ {
+ d_run = true;
+ }
+
+ std::vector<float>
+ measurement_sink_f_impl::get_avg() const
+ {
+ return d_avg;
+ }
+
+ std::vector<float>
+ measurement_sink_f_impl::get_stddev() const
+ {
+ return d_stddev;
+ }
+
+ int
+ measurement_sink_f_impl::get_run() const
+ {
+ return d_curr_run;
+ }
+
+ } /* namespace usrptest */
+} /* namespace gr */
+
diff --git a/tools/gr-usrptest/lib/measurement_sink_f_impl.h b/tools/gr-usrptest/lib/measurement_sink_f_impl.h
new file mode 100644
index 000000000..4d63adfa2
--- /dev/null
+++ b/tools/gr-usrptest/lib/measurement_sink_f_impl.h
@@ -0,0 +1,62 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2016 Ettus Research LLC.
+ *
+ * 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_USRPTEST_MEASUREMENT_SINK_F_IMPL_H
+#define INCLUDED_USRPTEST_MEASUREMENT_SINK_F_IMPL_H
+
+#include <usrptest/measurement_sink_f.h>
+
+namespace gr {
+ namespace usrptest {
+
+ class measurement_sink_f_impl : public measurement_sink_f
+ {
+ private:
+ std::vector< float > d_avg;
+ std::vector< float > d_stddev;
+ bool d_run;
+ int d_runs;
+ int d_nsamples;
+ int d_curr_sample;
+ int d_curr_run;
+ float d_curr_avg;
+ float d_curr_M2;
+ void inc_both(const float new_val);
+
+
+ public:
+ measurement_sink_f_impl(int num_samples, int runs);
+ ~measurement_sink_f_impl();
+ std::vector<float> get_avg() const;
+ std::vector<float> get_stddev() const;
+ int get_run() const;
+ void start_run();
+
+ // Where all the action really happens
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+ };
+
+ } // namespace usrptest
+} // namespace gr
+
+#endif /* INCLUDED_USRPTEST_MEASUREMENT_SINK_F_IMPL_H */
+
diff --git a/tools/gr-usrptest/lib/qa_usrptest.cc b/tools/gr-usrptest/lib/qa_usrptest.cc
new file mode 100644
index 000000000..c8e6495ae
--- /dev/null
+++ b/tools/gr-usrptest/lib/qa_usrptest.cc
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2012 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio 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.
+ *
+ * GNU Radio 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 GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/*
+ * This class gathers together all the test cases for the gr-filter
+ * directory into a single test suite. As you create new test cases,
+ * add them here.
+ */
+
+#include "qa_usrptest.h"
+
+CppUnit::TestSuite *
+qa_usrptest::suite()
+{
+ CppUnit::TestSuite *s = new CppUnit::TestSuite("usrptest");
+
+ return s;
+}
diff --git a/tools/gr-usrptest/lib/qa_usrptest.h b/tools/gr-usrptest/lib/qa_usrptest.h
new file mode 100644
index 000000000..94ce3f33b
--- /dev/null
+++ b/tools/gr-usrptest/lib/qa_usrptest.h
@@ -0,0 +1,38 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2012 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio 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.
+ *
+ * GNU Radio 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 GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _QA_USRPTEST_H_
+#define _QA_USRPTEST_H_
+
+#include <gnuradio/attributes.h>
+#include <cppunit/TestSuite.h>
+
+//! collect all the tests for the gr-filter directory
+
+class __GR_ATTR_EXPORT qa_usrptest
+{
+ public:
+ //! return suite of tests for all of gr-filter directory
+ static CppUnit::TestSuite *suite();
+};
+
+#endif /* _QA_USRPTEST_H_ */
diff --git a/tools/gr-usrptest/lib/test_usrptest.cc b/tools/gr-usrptest/lib/test_usrptest.cc
new file mode 100644
index 000000000..808638cdf
--- /dev/null
+++ b/tools/gr-usrptest/lib/test_usrptest.cc
@@ -0,0 +1,48 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2012 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio 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.
+ *
+ * GNU Radio 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 GNU Radio; 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 <cppunit/TextTestRunner.h>
+#include <cppunit/XmlOutputter.h>
+
+#include <gnuradio/unittests.h>
+#include "qa_usrptest.h"
+#include <iostream>
+#include <fstream>
+
+int
+main (int argc, char **argv)
+{
+ CppUnit::TextTestRunner runner;
+ std::ofstream xmlfile(get_unittest_path("usrptest.xml").c_str());
+ CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
+
+ runner.addTest(qa_usrptest::suite());
+ runner.setOutputter(xmlout);
+
+ bool was_successful = runner.run("", false);
+
+ return was_successful ? 0 : 1;
+}