From a343cc208bad72810bcab542ed1454d07381b406 Mon Sep 17 00:00:00 2001 From: Ryan Tucker Date: Tue, 27 Jun 2017 14:38:32 -0400 Subject: [PATCH] source/sink_impl: query hardware for gains on init Instead of guessing, query the device to populate _gain_mode and _gain. --- lib/sink_impl.cc | 7 +++++++ lib/source_impl.cc | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/lib/sink_impl.cc b/lib/sink_impl.cc index 317855a..a7a0487 100644 --- a/lib/sink_impl.cc +++ b/lib/sink_impl.cc @@ -245,6 +245,13 @@ sink_impl::sink_impl( const std::string &args ) if (!_devs.size()) throw std::runtime_error("No devices specified via device arguments."); + + /* Populate the _gain and _gain_mode arrays with the hardware state */ + for ( sink_iface *dev : _devs ) + for (size_t dev_chan = 0; dev_chan < dev->get_num_channels(); dev_chan++) { + _gain_mode[dev_chan] = dev->get_gain_mode(dev_chan); + _gain[dev_chan] = dev->get_gain(dev_chan); + } } size_t sink_impl::get_num_channels() diff --git a/lib/source_impl.cc b/lib/source_impl.cc index 8f2028b..ff4d489 100644 --- a/lib/source_impl.cc +++ b/lib/source_impl.cc @@ -403,6 +403,13 @@ source_impl::source_impl( const std::string &args ) if (!_devs.size()) throw std::runtime_error("No devices specified via device arguments."); + + /* Populate the _gain and _gain_mode arrays with the hardware state */ + for ( source_iface *dev : _devs ) + for (size_t dev_chan = 0; dev_chan < dev->get_num_channels(); dev_chan++) { + _gain_mode[dev_chan] = dev->get_gain_mode(dev_chan); + _gain[dev_chan] = dev->get_gain(dev_chan); + } } size_t source_impl::get_num_channels()