diff --git a/plugins/channel/demoddsd/dsddecoder.cpp b/plugins/channel/demoddsd/dsddecoder.cpp index 3a3e82b4e..cafee0e5f 100644 --- a/plugins/channel/demoddsd/dsddecoder.cpp +++ b/plugins/channel/demoddsd/dsddecoder.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2015 F4EXB // +// Copyright (C) 2016 F4EXB // // written by Edouard Griffiths // // // // This program is free software; you can redistribute it and/or modify // diff --git a/plugins/channel/demoddsd/dsddecoder.h b/plugins/channel/demoddsd/dsddecoder.h index 1a2f4f955..02bdb2409 100644 --- a/plugins/channel/demoddsd/dsddecoder.h +++ b/plugins/channel/demoddsd/dsddecoder.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2015 F4EXB // +// Copyright (C) 2016 F4EXB // // written by Edouard Griffiths // // // // This program is free software; you can redistribute it and/or modify // @@ -32,6 +32,12 @@ public: short *getAudio(int& nbSamples) { return m_decoder.getAudio(nbSamples); } void resetAudio() { m_decoder.resetAudio(); } + int getInLevel() const { return m_decoder.getInLevel(); } + const char *getFrameTypeText() const { return m_decoder.getFrameTypeText(); } + const char *getModulationText() const { return m_decoder.getModulationText(); } + + void setAudioGain(float gain) { m_decoder.setAudioGain(gain); } + private: DSDcc::DSDDecoder m_decoder; }; diff --git a/plugins/channel/demoddsd/dsddemod.cpp b/plugins/channel/demoddsd/dsddemod.cpp index 233cbd5f7..6df2f1fd5 100644 --- a/plugins/channel/demoddsd/dsddemod.cpp +++ b/plugins/channel/demoddsd/dsddemod.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2015 F4EXB // +// Copyright (C) 2016 F4EXB // // written by Edouard Griffiths // // // // This program is free software; you can redistribute it and/or modify // @@ -157,64 +157,21 @@ void DSDDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto m_scopeSampleBuffer.push_back(s); m_dsdDecoder.pushSample(sample); -// if (m_running.m_audioMute) -// { -// m_audioBuffer[m_audioBufferFill].l = 0; -// m_audioBuffer[m_audioBufferFill].r = 0; -// } -// else -// { -// m_audioBuffer[m_audioBufferFill].l = (sample * m_running.m_volume) / 100; -// m_audioBuffer[m_audioBufferFill].r = (sample * m_running.m_volume) / 100; -// } -// -// ++m_audioBufferFill; -// -// if (m_audioBufferFill >= m_audioBuffer.size()) -// { -// uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill, 10); -// -// if (res != m_audioBufferFill) -// { -// qDebug("DSDDemod::feed: %u/%u audio samples written", res, m_audioBufferFill); -// } -// -// m_audioBufferFill = 0; -// } - m_interpolatorDistanceRemain += m_interpolatorDistance; } } -// if (m_audioBufferFill > 0) -// { -// uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill, 10); -// -// if (res != m_audioBufferFill) -// { -// qDebug("NFMDemod::feed: %u/%u tail samples written", res, m_audioBufferFill); -// } -// -// m_audioBufferFill = 0; -// } - int nbAudioSamples; short *dsdAudio = m_dsdDecoder.getAudio(nbAudioSamples); if (nbAudioSamples > 0) { - uint res = m_audioFifo.write((const quint8*) dsdAudio, nbAudioSamples, 10); - qDebug("DSDDemod::feed: written %d audio samples (%d)", res, nbAudioSamples); - m_dsdDecoder.resetAudio(); -// qDebug("\nDSDDemod::feed: got %d audio samples (%lu)", nbAudioSamples, m_audioBuffer.size()); - } + if (!m_running.m_audioMute) { + uint res = m_audioFifo.write((const quint8*) dsdAudio, nbAudioSamples, 10); + } -// if (nbAudioSamples >= m_audioBuffer.size()) -// { -// uint res = m_audioFifo.write((const quint8*) dsdAudio, nbAudioSamples, 10); -// qDebug("DSDDemod::feed: written %d audio samples (%d)", res, nbAudioSamples); -// m_dsdDecoder.resetAudio(); -// } + m_dsdDecoder.resetAudio(); + } if ((m_scope != 0) && (m_scopeEnabled)) { @@ -318,6 +275,11 @@ void DSDDemod::apply() //m_squelchLevel *= m_squelchLevel; } + if (m_config.m_volume != m_running.m_volume) + { + m_dsdDecoder.setAudioGain(m_config.m_volume / 10.0f); + } + m_running.m_inputSampleRate = m_config.m_inputSampleRate; m_running.m_inputFrequencyOffset = m_config.m_inputFrequencyOffset; m_running.m_rfBandwidth = m_config.m_rfBandwidth; diff --git a/plugins/channel/demoddsd/dsddemod.h b/plugins/channel/demoddsd/dsddemod.h index b0733c02f..c4c38fea8 100644 --- a/plugins/channel/demoddsd/dsddemod.h +++ b/plugins/channel/demoddsd/dsddemod.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2015 F4EXB // +// Copyright (C) 2016 F4EXB // // written by Edouard Griffiths // // // // This program is free software; you can redistribute it and/or modify // @@ -61,6 +61,8 @@ public: Real getMagSq() { return m_magsq; } bool getSquelchOpen() const { return m_squelchOpen; } + const DSDDecoder& getDecoder() const { return m_dsdDecoder; } + private: class MsgConfigureDSDDemod : public Message { MESSAGE_CLASS_DECLARATION diff --git a/plugins/channel/demoddsd/dsddemodgui.cpp b/plugins/channel/demoddsd/dsddemodgui.cpp index fa39a20fe..56a1aff06 100644 --- a/plugins/channel/demoddsd/dsddemodgui.cpp +++ b/plugins/channel/demoddsd/dsddemodgui.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2015 F4EXB // +// Copyright (C) 2016 F4EXB // // written by Edouard Griffiths // // // // This program is free software; you can redistribute it and/or modify // @@ -251,7 +251,8 @@ DSDDemodGUI::DSDDemodGUI(PluginAPI* pluginAPI, QWidget* parent) : m_basicSettingsShown(false), m_doApplySettings(true), m_squelchOpen(false), - m_channelPowerDbAvg(20,0) + m_channelPowerDbAvg(20,0), + m_tickCount(0) { ui->setupUi(this); setAttribute(Qt::WA_DeleteOnClose, true); @@ -369,4 +370,18 @@ void DSDDemodGUI::tick() ui->audioMute->setStyleSheet("QToolButton { background:rgb(79,79,79); }"); } } + + // "slow" updates + + if (m_tickCount < 10) + { + m_tickCount++; + } + else + { + ui->inLevelText->setText(QString::number(m_dsdDemod->getDecoder().getInLevel())); + ui->syncText->setText(QString(m_dsdDemod->getDecoder().getFrameTypeText())); + ui->modulationText->setText(QString(m_dsdDemod->getDecoder().getModulationText())); + m_tickCount = 0; + } } diff --git a/plugins/channel/demoddsd/dsddemodgui.h b/plugins/channel/demoddsd/dsddemodgui.h index bec2471ac..bfcb065a6 100644 --- a/plugins/channel/demoddsd/dsddemodgui.h +++ b/plugins/channel/demoddsd/dsddemodgui.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2015 F4EXB // +// Copyright (C) 2016 F4EXB // // written by Edouard Griffiths // // // // This program is free software; you can redistribute it and/or modify // @@ -83,6 +83,7 @@ private: bool m_audioMute; bool m_squelchOpen; MovingAverage m_channelPowerDbAvg; + int m_tickCount; explicit DSDDemodGUI(PluginAPI* pluginAPI, QWidget* parent = NULL); virtual ~DSDDemodGUI(); diff --git a/plugins/channel/demoddsd/dsddemodgui.ui b/plugins/channel/demoddsd/dsddemodgui.ui index b9e9db829..6ac0a0048 100644 --- a/plugins/channel/demoddsd/dsddemodgui.ui +++ b/plugins/channel/demoddsd/dsddemodgui.ui @@ -6,7 +6,7 @@ 0 0 - 503 + 520 898 @@ -16,6 +16,12 @@ 0 + + + 520 + 0 + + Sans Serif @@ -129,6 +135,54 @@ + + + + + 30 + 0 + + + + Modulation type detected + + + ____ + + + + + + + + 80 + 0 + + + + Synchronized on this frame type + + + No Sync______ + + + + + + + + 20 + 0 + + + + Input level (%) valid when synchronized + + + 00 + + + diff --git a/plugins/channel/demoddsd/dsddemodplugin.cpp b/plugins/channel/demoddsd/dsddemodplugin.cpp index e2d4983ab..856f4172f 100644 --- a/plugins/channel/demoddsd/dsddemodplugin.cpp +++ b/plugins/channel/demoddsd/dsddemodplugin.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2015 F4EXB // +// Copyright (C) 2016 F4EXB // // written by Edouard Griffiths // // // // This program is free software; you can redistribute it and/or modify // diff --git a/plugins/channel/demoddsd/dsddemodplugin.h b/plugins/channel/demoddsd/dsddemodplugin.h index 3ecc9ad71..1b8ef3103 100644 --- a/plugins/channel/demoddsd/dsddemodplugin.h +++ b/plugins/channel/demoddsd/dsddemodplugin.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2015 F4EXB // +// Copyright (C) 2016 F4EXB // // written by Edouard Griffiths // // // // This program is free software; you can redistribute it and/or modify //