diff options
Diffstat (limited to 'mpm/lib/mykonos/config/ad937x_fir.cpp')
-rw-r--r-- | mpm/lib/mykonos/config/ad937x_fir.cpp | 62 |
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; +} |