NFM demod: GUI and demod separation phase1 (3)

This commit is contained in:
f4exb 2017-10-08 23:36:47 +02:00
parent 7d484181cc
commit 49db1b2273
4 changed files with 62 additions and 13 deletions

View File

@ -33,6 +33,7 @@
MESSAGE_CLASS_DEFINITION(NFMDemod::MsgConfigureNFMDemod, Message)
MESSAGE_CLASS_DEFINITION(NFMDemod::MsgConfigureChannelizer, Message)
MESSAGE_CLASS_DEFINITION(NFMDemod::MsgReportCTCSSFreq, Message)
static const double afSqTones[2] = {1000.0, 6000.0}; // {1200.0, 8000.0};
const int NFMDemod::m_udpBlockSize = 512;
@ -240,7 +241,10 @@ void NFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
{
if (maxToneIndex+1 != m_ctcssIndex)
{
m_nfmDemodGUI->setCtcssFreq(m_ctcssDetector.getToneSet()[maxToneIndex]);
if (getMessageQueueToGUI()) {
MsgReportCTCSSFreq *msg = MsgReportCTCSSFreq::create(m_ctcssDetector.getToneSet()[maxToneIndex]);
getMessageQueueToGUI()->push(msg);
}
m_ctcssIndex = maxToneIndex+1;
}
}
@ -248,7 +252,10 @@ void NFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
{
if (m_ctcssIndex != 0)
{
m_nfmDemodGUI->setCtcssFreq(0);
if (getMessageQueueToGUI()) {
MsgReportCTCSSFreq *msg = MsgReportCTCSSFreq::create(0);
getMessageQueueToGUI()->push(msg);
}
m_ctcssIndex = 0;
}
}
@ -273,8 +280,12 @@ void NFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
{
if (m_ctcssIndex != 0)
{
m_nfmDemodGUI->setCtcssFreq(0);
m_ctcssIndex = 0;
if (getMessageQueueToGUI()) {
MsgReportCTCSSFreq *msg = MsgReportCTCSSFreq::create(0);
getMessageQueueToGUI()->push(msg);
}
m_ctcssIndex = 0;
}
sample = 0;

View File

@ -38,7 +38,6 @@
class DeviceSourceAPI;
class ThreadedBasebandSampleSink;
class DownChannelizer;
class NFMDemodGUI;
class NFMDemod : public BasebandSampleSink {
public:
@ -88,7 +87,27 @@ public:
{ }
};
NFMDemod(DeviceSourceAPI *deviceAPI);
class MsgReportCTCSSFreq : public Message {
MESSAGE_CLASS_DECLARATION
public:
Real getFrequency() const { return m_freq; }
static MsgReportCTCSSFreq* create(Real freq)
{
return new MsgReportCTCSSFreq(freq);
}
private:
Real m_freq;
MsgReportCTCSSFreq(Real freq) :
Message(),
m_freq(freq)
{ }
};
NFMDemod(DeviceSourceAPI *deviceAPI);
~NFMDemod();
virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po);
@ -96,10 +115,6 @@ public:
virtual void stop();
virtual bool handleMessage(const Message& cmd);
void registerGUI(NFMDemodGUI *nfmDemodGUI) {
m_nfmDemodGUI = nfmDemodGUI;
}
const Real *getCtcssToneSet(int& nbTones) const {
nbTones = m_ctcssDetector.getNTones();
return m_ctcssDetector.getToneSet();
@ -174,7 +189,6 @@ private:
AudioFifo m_audioFifo;
UDPSink<qint16> *m_udpBufferAudio;
NFMDemodGUI *m_nfmDemodGUI;
QMutex m_settingsMutex;
PhaseDiscriminators m_phaseDiscri;

View File

@ -160,7 +160,28 @@ bool NFMDemodGUI::deserialize(const QByteArray& data)
bool NFMDemodGUI::handleMessage(const Message& message __attribute__((unused)))
{
return false;
if (NFMDemod::MsgReportCTCSSFreq::match(message))
{
NFMDemod::MsgReportCTCSSFreq& report = (NFMDemod::MsgReportCTCSSFreq&) message;
setCtcssFreq(report.getFrequency());
//qDebug("NFMDemodGUI::handleMessage: MsgReportCTCSSFreq: %f", report.getFrequency());
return true;
}
return false;
}
void NFMDemodGUI::handleInputMessages()
{
Message* message;
while ((message = getInputMessageQueue()->pop()) != 0)
{
if (handleMessage(*message))
{
delete message;
}
}
}
void NFMDemodGUI::channelMarkerChanged()
@ -303,7 +324,7 @@ NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI, QWidg
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_nfmDemod = new NFMDemod(m_deviceAPI);
m_nfmDemod->registerGUI(this);
m_nfmDemod->setMessageQueueToGUI(getInputMessageQueue());
connect(&m_pluginAPI->getMainWindow()->getMasterTimer(), SIGNAL(timeout()), this, SLOT(tick()));
@ -354,6 +375,8 @@ NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI, QWidg
QChar delta = QChar(0x94, 0x03);
ui->deltaSquelch->setText(delta);
connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()));
applySettings(true);
}

View File

@ -55,6 +55,7 @@ private slots:
void on_copyAudioToUDP_toggled(bool checked);
void onWidgetRolled(QWidget* widget, bool rollDown);
void onMenuDialogCalled(const QPoint& p);
void handleInputMessages();
void tick();
private: