From c364378824a61c0d2d69ff4ec8753b0d4c5a2e7a Mon Sep 17 00:00:00 2001 From: John Greb Date: Tue, 2 Dec 2014 14:23:21 +0000 Subject: [PATCH] Bias T. --- plugins/samplesource/fcd/fcdgui.cpp | 40 ++++--- plugins/samplesource/fcd/fcdgui.h | 6 +- plugins/samplesource/fcd/fcdgui.ui | 152 ++++--------------------- plugins/samplesource/fcd/fcdinput.cpp | 29 ++++- plugins/samplesource/fcd/fcdinput.h | 3 + plugins/samplesource/fcd/fcdplugin.cpp | 4 +- plugins/samplesource/fcd/fcdsource.cpp | 20 +++- plugins/samplesource/fcd/fcdthread.h | 2 + 8 files changed, 101 insertions(+), 155 deletions(-) diff --git a/plugins/samplesource/fcd/fcdgui.cpp b/plugins/samplesource/fcd/fcdgui.cpp index 01249cb83..e5ec71d76 100644 --- a/plugins/samplesource/fcd/fcdgui.cpp +++ b/plugins/samplesource/fcd/fcdgui.cpp @@ -88,6 +88,9 @@ bool FCDGui::handleMessage(Message* message) void FCDGui::displaySettings() { ui->centerFrequency->setValue(m_generalSettings.m_centerFrequency / 1000); + ui->checkBoxR->setChecked(m_settings.range); + ui->checkBoxG->setChecked(m_settings.gain); + ui->checkBoxB->setChecked(m_settings.bias); } void FCDGui::sendSettings() @@ -102,18 +105,6 @@ void FCDGui::on_centerFrequency_changed(quint64 value) sendSettings(); } -#if 0 -void FCDGui::on_gain_valueChanged(int value) -{ - if(value > (int)m_gains.size()) - return; - int gain = m_gains[value]; - ui->gainText->setText(tr("%1.%2").arg(gain / 10).arg(abs(gain % 10))); - m_settings.m_gain = gain; - sendSettings(); -} -#endif - void FCDGui::updateHardware() { FCDInput::MsgConfigureFCD* message = FCDInput::MsgConfigureFCD::create(m_generalSettings, m_settings); @@ -121,17 +112,38 @@ void FCDGui::updateHardware() m_updateTimer.stop(); } -void FCDGui::on_checkBox_stateChanged(int state) { - if (state == Qt::Checked){ +void FCDGui::on_checkBoxR_stateChanged(int state) +{ + if (state == Qt::Checked) { ui->centerFrequency->setValueRange(7, 150U, 240000U); ui->centerFrequency->setValue(7000); m_generalSettings.m_centerFrequency = 7000 * 1000; + m_settings.range = 1; } else { ui->centerFrequency->setValueRange(7, 420000U, 1900000U); ui->centerFrequency->setValue(434450); m_generalSettings.m_centerFrequency = 434450 * 1000; + m_settings.range = 0; } sendSettings(); } +void FCDGui::on_checkBoxG_stateChanged(int state) +{ + if (state == Qt::Checked) { + m_settings.gain = 1; + } else { + m_settings.gain = 0; + } + sendSettings(); +} +void FCDGui::on_checkBoxB_stateChanged(int state) +{ + if (state == Qt::Checked) { + m_settings.bias = 1; + } else { + m_settings.bias = 0; + } + sendSettings(); +} diff --git a/plugins/samplesource/fcd/fcdgui.h b/plugins/samplesource/fcd/fcdgui.h index 880e164f6..72b37593a 100644 --- a/plugins/samplesource/fcd/fcdgui.h +++ b/plugins/samplesource/fcd/fcdgui.h @@ -44,9 +44,9 @@ private: private slots: void on_centerFrequency_changed(quint64 value); - //void on_gain_valueChanged(int value); - //void on_samplerate_valueChanged(int value); - void on_checkBox_stateChanged(int state); + void on_checkBoxR_stateChanged(int state); + void on_checkBoxG_stateChanged(int state); + void on_checkBoxB_stateChanged(int state); void updateHardware(); }; diff --git a/plugins/samplesource/fcd/fcdgui.ui b/plugins/samplesource/fcd/fcdgui.ui index 99fc0190d..d460fe9b2 100644 --- a/plugins/samplesource/fcd/fcdgui.ui +++ b/plugins/samplesource/fcd/fcdgui.ui @@ -100,148 +100,36 @@ - - - + - + Low Range + + + + - - - Qt::Horizontal + + + LNA Gain - - - 40 - 20 - + + + + + + + + + + Bias T - + diff --git a/plugins/samplesource/fcd/fcdinput.cpp b/plugins/samplesource/fcd/fcdinput.cpp index 2555233b5..0c896187b 100644 --- a/plugins/samplesource/fcd/fcdinput.cpp +++ b/plugins/samplesource/fcd/fcdinput.cpp @@ -25,22 +25,38 @@ MESSAGE_CLASS_DEFINITION(FCDInput::MsgConfigureFCD, Message) //MESSAGE_CLASS_DEFINITION(FCDInput::MsgReportFCD, Message) -FCDInput::Settings::Settings() +FCDInput::Settings::Settings() : + range(0), + gain(0), + bias(0) { } void FCDInput::Settings::resetToDefaults() { + range = 0; + gain = 0; + bias = 0; } QByteArray FCDInput::Settings::serialize() const { SimpleSerializer s(1); + s.writeS32(1, range); + s.writeS32(2, gain); + s.writeS32(3, bias); return s.final(); } bool FCDInput::Settings::deserialize(const QByteArray& data) { + SimpleDeserializer d(data); + if(d.isValid() && d.getVersion() == 1) { + d.readS32(1, &range, 0); + d.readS32(2, &gain, 0); + d.readS32(3, &bias, 0); + return true; + } resetToDefaults(); return true; } @@ -126,10 +142,17 @@ bool FCDInput::applySettings(const GeneralSettings& generalSettings, const Setti { QMutexLocker mutexLocker(&m_mutex); + if(!m_FCDThread) + return false; + + // TODO: Only call when changed + m_FCDThread->set_lna_gain(settings.gain); + m_FCDThread->set_bias_t(settings.bias); + if((m_generalSettings.m_centerFrequency != generalSettings.m_centerFrequency) || force) { m_generalSettings.m_centerFrequency = generalSettings.m_centerFrequency; - if(m_FCDThread) - m_FCDThread->set_center_freq( (double)(generalSettings.m_centerFrequency) ); + m_FCDThread->set_center_freq( (double)(generalSettings.m_centerFrequency) ); } return true; } + diff --git a/plugins/samplesource/fcd/fcdinput.h b/plugins/samplesource/fcd/fcdinput.h index 02610649d..6e0a85849 100644 --- a/plugins/samplesource/fcd/fcdinput.h +++ b/plugins/samplesource/fcd/fcdinput.h @@ -32,6 +32,9 @@ class FCDInput : public SampleSource { public: struct Settings { Settings(); + qint32 range; + qint32 gain; + qint32 bias; void resetToDefaults(); QByteArray serialize() const; bool deserialize(const QByteArray& data); diff --git a/plugins/samplesource/fcd/fcdplugin.cpp b/plugins/samplesource/fcd/fcdplugin.cpp index a9b45db58..6f45ad6bf 100644 --- a/plugins/samplesource/fcd/fcdplugin.cpp +++ b/plugins/samplesource/fcd/fcdplugin.cpp @@ -7,11 +7,11 @@ const PluginDescriptor FCDPlugin::m_pluginDescriptor = { QString("FunCube Input"), - QString("---"), + QString("V20"), QString("(c) John Greb"), QString("http://funcubedongle.com"), true, - QString("___________") + QString("http://www.oz9aec.net/index.php/funcube-dongle") }; FCDPlugin::FCDPlugin(QObject* parent) : diff --git a/plugins/samplesource/fcd/fcdsource.cpp b/plugins/samplesource/fcd/fcdsource.cpp index 2a715a9c4..72937163c 100644 --- a/plugins/samplesource/fcd/fcdsource.cpp +++ b/plugins/samplesource/fcd/fcdsource.cpp @@ -49,7 +49,21 @@ void FCDThread::CloseSource() void FCDThread::set_center_freq(double freq) { if (fcdAppSetFreq(freq) == FCD_MODE_NONE) - qCritical("No FCD HID found for frquency change"); + qDebug("No FCD HID found for frquency change"); +} + +void FCDThread::set_bias_t(bool on) +{ + quint8 cmd = on ? 1 : 0; + + fcdAppSetParam(FCD_CMD_APP_SET_BIAS_TEE, &cmd, 1); +} + +void FCDThread::set_lna_gain(bool on) +{ + quint8 cmd = on ? 1 : 0; + + fcdAppSetParam(FCD_CMD_APP_SET_LNA_GAIN, &cmd, 1); } int FCDThread::work(int n_items) @@ -63,6 +77,10 @@ int FCDThread::work(int n_items) l = snd_pcm_mmap_readi(fcd_handle, out, (snd_pcm_uframes_t)n_items); if (l > 0) m_sampleFifo->write(it, it + l); + if (l == -EPIPE) { + qDebug("FCD: Overrun detected"); + return 0; + } return l; } diff --git a/plugins/samplesource/fcd/fcdthread.h b/plugins/samplesource/fcd/fcdthread.h index 54aabb77a..743ffb127 100644 --- a/plugins/samplesource/fcd/fcdthread.h +++ b/plugins/samplesource/fcd/fcdthread.h @@ -39,6 +39,8 @@ public: bool OpenSource(const char *filename); void CloseSource(); void set_center_freq(double freq); + void set_bias_t(bool on); + void set_lna_gain(bool on); int work(int n_items); private: snd_pcm_format_t fcd_format;