diff options
author | Dimitri Stolnikov <horiz0n@gmx.net> | 2013-04-15 23:41:31 +0200 |
---|---|---|
committer | Dimitri Stolnikov <horiz0n@gmx.net> | 2013-04-15 23:41:31 +0200 |
commit | b91228c19ae45b1fd704c010ae514d61c3c6295f (patch) | |
tree | 874c3955366bba4c38f207aef043365268ff2060 /plugins | |
parent | 3b9a7c8cc671757e3b09cbfb08dccebf3ba7e9f1 (diff) |
gnuradioinput: implement BB bandwidth control
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/samplesource/gnuradio/gnuradiogui.cpp | 34 | ||||
-rw-r--r-- | plugins/samplesource/gnuradio/gnuradiogui.h | 2 | ||||
-rw-r--r-- | plugins/samplesource/gnuradio/gnuradiogui.ui | 16 | ||||
-rw-r--r-- | plugins/samplesource/gnuradio/gnuradioinput.cpp | 52 | ||||
-rw-r--r-- | plugins/samplesource/gnuradio/gnuradioinput.h | 14 |
5 files changed, 100 insertions, 18 deletions
diff --git a/plugins/samplesource/gnuradio/gnuradiogui.cpp b/plugins/samplesource/gnuradio/gnuradiogui.cpp index f464efd..b393186 100644 --- a/plugins/samplesource/gnuradio/gnuradiogui.cpp +++ b/plugins/samplesource/gnuradio/gnuradiogui.cpp @@ -110,6 +110,9 @@ bool GNURadioGui::handleMessage(Message* message) m_sampRates = rep->getSampRates(); m_antennas = rep->getAntennas(); m_iqbals = rep->getIQBals(); + m_bandwidths = rep->getBandwidths(); + /* insert 0 which will become "Auto" in the combo box */ + m_bandwidths.insert(m_bandwidths.begin(), 0); displaySettings(); return true; } else { @@ -274,6 +277,27 @@ void GNURadioGui::displaySettings() } else { ui->cboIQBalance->setEnabled(false); } + + oldIndex = ui->cboBandwidth->currentIndex(); + ui->cboBandwidth->clear(); + + for ( int i = 0; i < m_bandwidths.size(); i++ ) + if ( 0.0 == m_bandwidths[i] ) + ui->cboBandwidth->addItem( "Auto" ); + else + ui->cboBandwidth->addItem( QString::number(m_bandwidths[i] / 1e3, '.', 3) ); + + if ( oldIndex > ui->cboBandwidth->count() - 1 ) + oldIndex = 0; + + if ( ui->cboBandwidth->count() && oldIndex >= 0 ) + ui->cboBandwidth->setCurrentIndex(oldIndex); + + if ( ui->cboBandwidth->count() ) { + ui->cboBandwidth->setEnabled(true); + } else { + ui->cboBandwidth->setEnabled(false); + } } void GNURadioGui::sendSettings() @@ -346,6 +370,7 @@ void GNURadioGui::on_cboSampleRate_currentIndexChanged(int index) return; m_settings.m_sampRate = m_sampRates[index]; + sendSettings(); } @@ -360,3 +385,12 @@ void GNURadioGui::on_cboIQBalance_currentIndexChanged(const QString &arg1) m_settings.m_iqbal = arg1; sendSettings(); } + +void GNURadioGui::on_cboBandwidth_currentIndexChanged(int index) +{ + if ( index < 0 || index >= m_bandwidths.size() ) + return; + + m_settings.m_bandwidth = m_bandwidths[index]; + sendSettings(); +} diff --git a/plugins/samplesource/gnuradio/gnuradiogui.h b/plugins/samplesource/gnuradio/gnuradiogui.h index d31af56..64c4388 100644 --- a/plugins/samplesource/gnuradio/gnuradiogui.h +++ b/plugins/samplesource/gnuradio/gnuradiogui.h @@ -62,6 +62,7 @@ private: std::vector<double> m_sampRates; std::vector<QString> m_antennas; std::vector<QString> m_iqbals; + std::vector<double> m_bandwidths; std::vector< QSlider* > m_gainSliders; std::vector< QLabel* > m_gainLabels; @@ -88,6 +89,7 @@ private slots: void on_cboSampleRate_currentIndexChanged(int index); void on_cboAntennas_currentIndexChanged(const QString &arg1); void on_cboIQBalance_currentIndexChanged(const QString &arg1); + void on_cboBandwidth_currentIndexChanged(int index); }; #endif // INCLUDE_GNURADIOGUI_H diff --git a/plugins/samplesource/gnuradio/gnuradiogui.ui b/plugins/samplesource/gnuradio/gnuradiogui.ui index 7b05152..ec077c2 100644 --- a/plugins/samplesource/gnuradio/gnuradiogui.ui +++ b/plugins/samplesource/gnuradio/gnuradiogui.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>186</width> - <height>203</height> + <height>232</height> </rect> </property> <property name="sizePolicy"> @@ -254,6 +254,20 @@ </item> </layout> </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLabel" name="label_5"> + <property name="text"> + <string>Bandwidth (kHz)</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="cboBandwidth"/> + </item> + </layout> + </item> </layout> </widget> <customwidgets> diff --git a/plugins/samplesource/gnuradio/gnuradioinput.cpp b/plugins/samplesource/gnuradio/gnuradioinput.cpp index b20d6ef..7219660 100644 --- a/plugins/samplesource/gnuradio/gnuradioinput.cpp +++ b/plugins/samplesource/gnuradio/gnuradioinput.cpp @@ -31,7 +31,8 @@ GNURadioInput::Settings::Settings() : m_freqCorr(0), m_sampRate(0), m_antenna(""), - m_iqbal("") + m_iqbal(""), + m_bandwidth(0) { } @@ -42,6 +43,7 @@ void GNURadioInput::Settings::resetToDefaults() m_freqCorr = 0; m_antenna = ""; m_iqbal = ""; + m_bandwidth = 0; } QByteArray GNURadioInput::Settings::serialize() const @@ -96,6 +98,7 @@ bool GNURadioInput::startInput(int device) std::vector< std::pair< QString, std::vector<double> > > namedGains; std::vector< double > sampRates; std::vector< QString > antennas; + std::vector< double > bandwidths; QMutexLocker mutexLocker(&m_mutex); @@ -123,9 +126,13 @@ bool GNURadioInput::startInput(int device) if(m_GnuradioThread != NULL) { osmosdr_source_c_sptr radio = m_GnuradioThread->radio(); - osmosdr::freq_range_t freq_rage = radio->get_freq_range(); - freqMin = freq_rage.start(); - freqMax = freq_rage.stop(); + try { + osmosdr::freq_range_t freq_rage = radio->get_freq_range(); + freqMin = freq_rage.start(); + freqMax = freq_rage.stop(); + } catch ( std::exception &ex ) { + qDebug(ex.what()); + } freqCorr = radio->get_freq_corr(); @@ -136,20 +143,28 @@ bool GNURadioInput::startInput(int device) { std::string gain_name = gain_names[i]; - std::vector< double > gain_values = \ - radio->get_gain_range( gain_name ).values(); + try { + std::vector< double > gain_values = \ + radio->get_gain_range( gain_name ).values(); - std::pair< QString, std::vector<double> > pair( gain_name.c_str(), - gain_values ); + std::pair< QString, std::vector<double> > pair( gain_name.c_str(), + gain_values ); - namedGains.push_back( pair ); + namedGains.push_back( pair ); - QPair< QString, double > pair2( gain_name.c_str(), 0 ); + QPair< QString, double > pair2( gain_name.c_str(), 0 ); - m_settings.m_namedGains.push_back( pair2 ); + m_settings.m_namedGains.push_back( pair2 ); + } catch ( std::exception &ex ) { + qDebug(ex.what()); + } } - sampRates = radio->get_sample_rates().values(); + try { + sampRates = radio->get_sample_rates().values(); + } catch ( std::exception &ex ) { + qDebug(ex.what()); + } antennas.clear(); std::vector< std::string > ant = radio->get_antennas(); @@ -160,11 +175,17 @@ bool GNURadioInput::startInput(int device) m_iqbals.push_back( "Off" ); m_iqbals.push_back( "Keep" ); m_iqbals.push_back( "Auto" ); + + try { + bandwidths = radio->get_bandwidth_range().values(); + } catch ( std::exception &ex ) { + qDebug(ex.what()); + } } qDebug("GnuradioInput: start"); MsgReportGNURadio::create(freqMin, freqMax, freqCorr, namedGains, - sampRates, antennas, m_iqbals) + sampRates, antennas, m_iqbals, bandwidths) ->submit(m_guiMessageQueue); return true; @@ -271,6 +292,11 @@ bool GNURadioInput::applySettings(const GeneralSettings& generalSettings, } } + if((m_settings.m_bandwidth != settings.m_bandwidth) || force) { + m_settings.m_bandwidth = settings.m_bandwidth; + radio->set_bandwidth( m_settings.m_bandwidth ); + } + } catch ( std::exception &ex ) { qDebug(ex.what()); return false; diff --git a/plugins/samplesource/gnuradio/gnuradioinput.h b/plugins/samplesource/gnuradio/gnuradioinput.h index 1a7e531..d6f2d2a 100644 --- a/plugins/samplesource/gnuradio/gnuradioinput.h +++ b/plugins/samplesource/gnuradio/gnuradioinput.h @@ -36,6 +36,7 @@ public: double m_sampRate; QString m_antenna; QString m_iqbal; + double m_bandwidth; Settings(); void resetToDefaults(); @@ -77,6 +78,7 @@ public: const std::vector<double>& getSampRates() const { return m_sampRates; } const std::vector<QString>& getAntennas() const { return m_antennas; } const std::vector<QString>& getIQBals() const { return m_iqbals; } + const std::vector<double>& getBandwidths() const { return m_bandwidths; } static MsgReportGNURadio* create(const double freqMin, const double freqMax, @@ -84,9 +86,10 @@ public: const std::vector< std::pair< QString, std::vector<double> > >& namedGains, const std::vector<double>& sampRates, const std::vector<QString>& antennas, - const std::vector<QString>& iqbals) + const std::vector<QString>& iqbals, + const std::vector<double>& bandwidths) { - return new MsgReportGNURadio(freqMin, freqMax, freqCorr, namedGains, sampRates, antennas, iqbals); + return new MsgReportGNURadio(freqMin, freqMax, freqCorr, namedGains, sampRates, antennas, iqbals, bandwidths); } protected: @@ -97,6 +100,7 @@ public: std::vector<double> m_sampRates; std::vector<QString> m_antennas; std::vector<QString> m_iqbals; + std::vector<double> m_bandwidths; MsgReportGNURadio(const double freqMin, const double freqMax, @@ -104,7 +108,8 @@ public: const std::vector< std::pair< QString, std::vector<double> > >& namedGains, const std::vector<double>& sampRates, const std::vector<QString>& antennas, - const std::vector<QString>& iqbals) : + const std::vector<QString>& iqbals, + const std::vector<double>& bandwidths) : Message(ID()), m_freqMin(freqMin), m_freqMax(freqMax), @@ -112,7 +117,8 @@ public: m_namedGains(namedGains), m_sampRates(sampRates), m_antennas(antennas), - m_iqbals(iqbals) + m_iqbals(iqbals), + m_bandwidths(bandwidths) { } }; |