summaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorDimitri Stolnikov <horiz0n@gmx.net>2013-04-15 23:41:31 +0200
committerDimitri Stolnikov <horiz0n@gmx.net>2013-04-15 23:41:31 +0200
commitb91228c19ae45b1fd704c010ae514d61c3c6295f (patch)
tree874c3955366bba4c38f207aef043365268ff2060 /plugins
parent3b9a7c8cc671757e3b09cbfb08dccebf3ba7e9f1 (diff)
gnuradioinput: implement BB bandwidth control
Diffstat (limited to 'plugins')
-rw-r--r--plugins/samplesource/gnuradio/gnuradiogui.cpp34
-rw-r--r--plugins/samplesource/gnuradio/gnuradiogui.h2
-rw-r--r--plugins/samplesource/gnuradio/gnuradiogui.ui16
-rw-r--r--plugins/samplesource/gnuradio/gnuradioinput.cpp52
-rw-r--r--plugins/samplesource/gnuradio/gnuradioinput.h14
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)
{ }
};