aboutsummaryrefslogtreecommitdiffstats
path: root/mpm/lib/mykonos/config/ad937x_fir.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mpm/lib/mykonos/config/ad937x_fir.cpp')
-rw-r--r--mpm/lib/mykonos/config/ad937x_fir.cpp62
1 files changed, 38 insertions, 24 deletions
diff --git a/mpm/lib/mykonos/config/ad937x_fir.cpp b/mpm/lib/mykonos/config/ad937x_fir.cpp
index a9ede3318..b62227163 100644
--- a/mpm/lib/mykonos/config/ad937x_fir.cpp
+++ b/mpm/lib/mykonos/config/ad937x_fir.cpp
@@ -1,37 +1,51 @@
-#include "ad937x_fir.h"
-#include <limits>
+//
+// Copyright 2017 Ettus Research (National Instruments)
+//
+// This program 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 of the License, or
+// (at your option) any later version.
+//
+// This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+//
-ad937x_fir::ad937x_fir(int8_t gain, const std::vector<int16_t>& coefficients)
-{
-
- _set_gain(gain);
-}
+#include "ad937x_fir.hpp"
-ad937x_fir::ad937x_fir(int8_t gain, std::vector<int16_t>&& coefficients)
+ad937x_fir::ad937x_fir() :
+ ad937x_fir(0, { 1, 0 })
{
- set_coefficients(std::move(coefficients));
- _set_gain(gain);
-}
-mykonosFir_t* ad937x_fir::getFir()
-{
- return &(_fir);
}
-void ad937x_fir::set_coefficients(std::vector<int16_t>&& coefficients)
+ad937x_fir::ad937x_fir(int8_t gain, const std::vector<int16_t>& coefficients) :
+ // These two constructors will be run in the order they are declared in the class definition
+ // see C++ standard 12.6.2 section 13.3
+ _fir_coefficients(coefficients),
+ _fir({gain,
+ static_cast<uint8_t>(_fir_coefficients.size()),
+ _fir_coefficients.data()})
{
- if (coefficients.size() < std::numeric_limits<decltype(mykonosFir_t().numFirCoefs)>::max() ||
- coefficients.size() > 0)
- {
- // TODO: exception
- }
- fir_coefficients = std::move(coefficients);
- _fir.numFirCoefs = static_cast<uint8_t>(fir_coefficients.size());
- _fir.coefs = &fir_coefficients[0];
+
}
-void ad937x_fir::_set_gain(int8_t gain)
+// ad937x_fir.fir should not be accessed during this operation
+void ad937x_fir::set_fir(int8_t gain, const std::vector<int16_t>& coefficients)
{
_fir.gain_dB = gain;
+
+ _fir_coefficients = coefficients;
+ _fir.coefs = _fir_coefficients.data();
+ _fir.numFirCoefs = static_cast<uint8_t>(_fir_coefficients.size());
}
+std::vector<int16_t> ad937x_fir::get_fir(int8_t &gain)
+{
+ gain = _fir.gain_dB;
+ return _fir_coefficients;
+}