| 
									
										
										
										
											2017-10-31 08:24:05 +01:00
										 |  |  | #include "device/deviceuiset.h"
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | #include <QDockWidget>
 | 
					
						
							|  |  |  | #include <QMainWindow>
 | 
					
						
							| 
									
										
										
										
											2015-08-19 01:02:52 +02:00
										 |  |  | #include <QDebug>
 | 
					
						
							| 
									
										
										
										
											2016-10-03 15:55:16 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | #include "ui_nfmdemodgui.h"
 | 
					
						
							|  |  |  | #include "plugin/pluginapi.h"
 | 
					
						
							|  |  |  | #include "util/simpleserializer.h"
 | 
					
						
							| 
									
										
										
										
											2015-10-04 06:26:06 +02:00
										 |  |  | #include "util/db.h"
 | 
					
						
							| 
									
										
										
										
											2017-08-26 22:16:05 +02:00
										 |  |  | #include "gui/basicchannelsettingsdialog.h"
 | 
					
						
							| 
									
										
										
										
											2019-09-23 01:25:17 +02:00
										 |  |  | #include "gui/devicestreamselectiondialog.h"
 | 
					
						
							| 
									
										
										
										
											2018-03-27 13:18:00 +02:00
										 |  |  | #include "gui/crightclickenabler.h"
 | 
					
						
							|  |  |  | #include "gui/audioselectdialog.h"
 | 
					
						
							| 
									
										
										
										
											2015-08-17 08:29:34 +02:00
										 |  |  | #include "dsp/dspengine.h"
 | 
					
						
							| 
									
										
										
										
											2021-04-17 18:14:15 +02:00
										 |  |  | #include "dsp/dcscodes.h"
 | 
					
						
							| 
									
										
										
										
											2020-10-12 21:59:04 +02:00
										 |  |  | #include "maincore.h"
 | 
					
						
							| 
									
										
										
										
											2019-11-23 07:39:57 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include "nfmdemodreport.h"
 | 
					
						
							| 
									
										
										
										
											2017-05-17 23:05:47 +02:00
										 |  |  | #include "nfmdemod.h"
 | 
					
						
							| 
									
										
										
										
											2019-11-23 07:39:57 +01:00
										 |  |  | #include "nfmdemodgui.h"
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-09 01:03:05 +01:00
										 |  |  | NFMDemodGUI* NFMDemodGUI::create(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel) | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-11-09 01:03:05 +01:00
										 |  |  | 	NFMDemodGUI* gui = new NFMDemodGUI(pluginAPI, deviceUISet, rxChannel); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	return gui; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NFMDemodGUI::destroy() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	delete this; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NFMDemodGUI::resetToDefaults() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-12 01:21:30 +02:00
										 |  |  |     m_settings.resetToDefaults(); | 
					
						
							|  |  |  |     displaySettings(); | 
					
						
							|  |  |  |     applySettings(); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QByteArray NFMDemodGUI::serialize() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-12 01:21:30 +02:00
										 |  |  |     return m_settings.serialize(); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool NFMDemodGUI::deserialize(const QByteArray& data) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-12 01:21:30 +02:00
										 |  |  |     if(m_settings.deserialize(data)) { | 
					
						
							|  |  |  |         displaySettings(); | 
					
						
							|  |  |  |         applySettings(true); | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |         resetToDefaults(); | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-11 18:18:47 +01:00
										 |  |  | bool NFMDemodGUI::handleMessage(const Message& message) | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2019-11-23 07:39:57 +01:00
										 |  |  |     if (NFMDemodReport::MsgReportCTCSSFreq::match(message)) | 
					
						
							| 
									
										
										
										
											2017-10-08 23:36:47 +02:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-11-23 07:39:57 +01:00
										 |  |  |         NFMDemodReport::MsgReportCTCSSFreq& report = (NFMDemodReport::MsgReportCTCSSFreq&) message; | 
					
						
							| 
									
										
										
										
											2017-10-08 23:36:47 +02:00
										 |  |  |         setCtcssFreq(report.getFrequency()); | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-04-17 18:14:15 +02:00
										 |  |  |     else if (NFMDemodReport::MsgReportDCSCode::match(message)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         NFMDemodReport::MsgReportDCSCode& report = (NFMDemodReport::MsgReportDCSCode&) message; | 
					
						
							| 
									
										
										
										
											2021-04-18 10:45:49 +02:00
										 |  |  |         m_reportedDcsCode = report.getCode(); | 
					
						
							| 
									
										
										
										
											2021-04-17 18:14:15 +02:00
										 |  |  |         setDcsCode(report.getCode()); | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-12-11 18:18:47 +01:00
										 |  |  |     else if (NFMDemod::MsgConfigureNFMDemod::match(message)) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2017-12-12 15:58:04 +01:00
										 |  |  |         qDebug("NFMDemodGUI::handleMessage: NFMDemod::MsgConfigureNFMDemod"); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:18:47 +01:00
										 |  |  |         const NFMDemod::MsgConfigureNFMDemod& cfg = (NFMDemod::MsgConfigureNFMDemod&) message; | 
					
						
							|  |  |  |         m_settings = cfg.getSettings(); | 
					
						
							|  |  |  |         blockApplySettings(true); | 
					
						
							|  |  |  |         displaySettings(); | 
					
						
							|  |  |  |         blockApplySettings(false); | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-10-08 23:36:47 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     return false; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NFMDemodGUI::handleInputMessages() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Message* message; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     while ((message = getInputMessageQueue()->pop()) != 0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (handleMessage(*message)) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             delete message; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-14 01:45:13 +01:00
										 |  |  | void NFMDemodGUI::channelMarkerChangedByCursor() | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-11-14 01:45:13 +01:00
										 |  |  |     ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); | 
					
						
							| 
									
										
										
										
											2017-10-08 10:26:36 +02:00
										 |  |  |     m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); | 
					
						
							| 
									
										
										
										
											2017-08-26 22:16:05 +02:00
										 |  |  |     applySettings(); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-14 22:58:35 +01:00
										 |  |  | void NFMDemodGUI::channelMarkerHighlightedByCursor() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     setHighlighted(m_channelMarker.getHighlighted()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-17 23:05:47 +02:00
										 |  |  | void NFMDemodGUI::on_deltaFrequency_changed(qint64 value) | 
					
						
							| 
									
										
										
										
											2015-05-10 15:13:29 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-05-17 23:05:47 +02:00
										 |  |  |     m_channelMarker.setCenterFrequency(value); | 
					
						
							| 
									
										
										
										
											2017-10-08 10:26:36 +02:00
										 |  |  |     m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); | 
					
						
							|  |  |  |     applySettings(); | 
					
						
							| 
									
										
										
										
											2015-05-10 15:13:29 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-12 18:32:24 +01:00
										 |  |  | void NFMDemodGUI::on_channelSpacingApply_clicked() | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2020-11-12 18:32:24 +01:00
										 |  |  |     int index = ui->channelSpacing->currentIndex(); | 
					
						
							|  |  |  |     qDebug("NFMDemodGUI::on_channelSpacing_currentIndexChanged: %d", index); | 
					
						
							| 
									
										
										
										
											2017-10-08 10:26:36 +02:00
										 |  |  | 	m_settings.m_rfBandwidth = NFMDemodSettings::getRFBW(index); | 
					
						
							| 
									
										
										
										
											2020-11-08 02:04:17 +01:00
										 |  |  |     m_settings.m_afBandwidth = NFMDemodSettings::getAFBW(index); | 
					
						
							|  |  |  |     m_settings.m_fmDeviation = 2.0 * NFMDemodSettings::getFMDev(index); | 
					
						
							|  |  |  |     m_channelMarker.setBandwidth(m_settings.m_rfBandwidth); | 
					
						
							|  |  |  |     ui->rfBW->blockSignals(true); | 
					
						
							|  |  |  |     ui->afBW->blockSignals(true); | 
					
						
							|  |  |  |     ui->fmDev->blockSignals(true); | 
					
						
							|  |  |  |     ui->rfBWText->setText(QString("%1k").arg(m_settings.m_rfBandwidth / 1000.0, 0, 'f', 1)); | 
					
						
							|  |  |  |     ui->rfBW->setValue(m_settings.m_rfBandwidth / 100.0); | 
					
						
							|  |  |  |     ui->afBWText->setText(QString("%1k").arg(m_settings.m_afBandwidth / 1000.0, 0, 'f', 1)); | 
					
						
							|  |  |  |     ui->afBW->setValue(m_settings.m_afBandwidth / 100.0); | 
					
						
							| 
									
										
										
										
											2020-11-12 18:32:24 +01:00
										 |  |  |     ui->fmDevText->setText(QString("%1%2k").arg(QChar(0xB1, 0x00)).arg(m_settings.m_fmDeviation / 2000.0, 0, 'f', 1)); | 
					
						
							| 
									
										
										
										
											2020-11-08 02:04:17 +01:00
										 |  |  |     ui->fmDev->setValue(m_settings.m_fmDeviation / 200.0); | 
					
						
							|  |  |  |     ui->rfBW->blockSignals(false); | 
					
						
							|  |  |  |     ui->afBW->blockSignals(false); | 
					
						
							|  |  |  |     ui->fmDev->blockSignals(false); | 
					
						
							|  |  |  | 	applySettings(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NFMDemodGUI::on_rfBW_valueChanged(int value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	ui->rfBWText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); | 
					
						
							|  |  |  | 	m_settings.m_rfBandwidth = value * 100.0; | 
					
						
							|  |  |  | 	m_channelMarker.setBandwidth(m_settings.m_rfBandwidth); | 
					
						
							| 
									
										
										
										
											2020-11-12 18:32:24 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     ui->channelSpacing->blockSignals(true); | 
					
						
							|  |  |  |     ui->channelSpacing->setCurrentIndex(NFMDemodSettings::getChannelSpacingIndex(m_settings.m_rfBandwidth)); | 
					
						
							|  |  |  |     ui->channelSpacing->update(); | 
					
						
							|  |  |  |     ui->channelSpacing->blockSignals(false); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	applySettings(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NFMDemodGUI::on_afBW_valueChanged(int value) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2020-11-08 02:04:17 +01:00
										 |  |  | 	ui->afBWText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); | 
					
						
							|  |  |  | 	m_settings.m_afBandwidth = value * 100.0; | 
					
						
							|  |  |  | 	applySettings(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NFMDemodGUI::on_fmDev_valueChanged(int value) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2020-11-12 18:32:24 +01:00
										 |  |  | 	ui->fmDevText->setText(QString("%1%2k").arg(QChar(0xB1, 0x00)).arg(value / 10.0, 0, 'f', 1)); | 
					
						
							| 
									
										
										
										
											2020-11-08 02:04:17 +01:00
										 |  |  | 	m_settings.m_fmDeviation = value * 200.0; | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	applySettings(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NFMDemodGUI::on_volume_valueChanged(int value) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2020-11-05 23:21:04 +01:00
										 |  |  | 	ui->volumeText->setText(QString("%1").arg(value)); | 
					
						
							|  |  |  | 	m_settings.m_volume = value / 100.0; | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	applySettings(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-08 10:26:36 +02:00
										 |  |  | void NFMDemodGUI::on_squelchGate_valueChanged(int value) | 
					
						
							| 
									
										
										
										
											2016-03-31 19:38:39 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-08 10:26:36 +02:00
										 |  |  |     ui->squelchGateText->setText(QString("%1").arg(value * 10.0f, 0, 'f', 0)); | 
					
						
							|  |  |  |     m_settings.m_squelchGate = value; | 
					
						
							| 
									
										
										
										
											2016-03-31 19:38:39 +02:00
										 |  |  | 	applySettings(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-08 10:26:36 +02:00
										 |  |  | void NFMDemodGUI::on_deltaSquelch_toggled(bool checked) | 
					
						
							| 
									
										
										
										
											2017-03-05 06:22:05 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-08 10:26:36 +02:00
										 |  |  |     if (checked) | 
					
						
							| 
									
										
										
										
											2017-03-05 06:22:05 +01:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2018-10-11 16:09:40 +02:00
										 |  |  |         ui->squelchText->setText(QString("%1").arg((-ui->squelch->value()) / 1.0, 0, 'f', 0)); | 
					
						
							| 
									
										
										
										
											2017-05-12 14:41:27 +02:00
										 |  |  |         ui->squelchText->setToolTip(tr("Squelch AF balance threshold (%)")); | 
					
						
							| 
									
										
										
										
											2017-05-15 02:22:24 +02:00
										 |  |  |         ui->squelch->setToolTip(tr("Squelch AF balance threshold (%)")); | 
					
						
							| 
									
										
										
										
											2017-03-05 06:22:05 +01:00
										 |  |  |     } | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2018-10-11 16:09:40 +02:00
										 |  |  |         ui->squelchText->setText(QString("%1").arg(ui->squelch->value() / 1.0, 0, 'f', 0)); | 
					
						
							| 
									
										
										
										
											2017-03-05 06:22:05 +01:00
										 |  |  |         ui->squelchText->setToolTip(tr("Squelch power threshold (dB)")); | 
					
						
							| 
									
										
										
										
											2018-10-11 16:09:40 +02:00
										 |  |  |         ui->squelch->setToolTip(tr("Squelch power threshold (dB)")); | 
					
						
							| 
									
										
										
										
											2017-03-05 06:22:05 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-10-08 10:26:36 +02:00
										 |  |  |     m_settings.m_deltaSquelch = checked; | 
					
						
							| 
									
										
										
										
											2017-03-05 06:22:05 +01:00
										 |  |  |     applySettings(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | void NFMDemodGUI::on_squelch_valueChanged(int value) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-03-05 06:22:05 +01:00
										 |  |  |     if (ui->deltaSquelch->isChecked()) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2018-10-11 08:52:50 +02:00
										 |  |  |         ui->squelchText->setText(QString("%1").arg(-value / 1.0, 0, 'f', 0)); | 
					
						
							| 
									
										
										
										
											2018-10-11 16:09:40 +02:00
										 |  |  |         ui->squelchText->setToolTip(tr("Squelch AF balance threshold (%)")); | 
					
						
							|  |  |  |         ui->squelch->setToolTip(tr("Squelch AF balance threshold (%)")); | 
					
						
							| 
									
										
										
										
											2017-03-05 06:22:05 +01:00
										 |  |  |     } | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2018-10-11 08:52:50 +02:00
										 |  |  |         ui->squelchText->setText(QString("%1").arg(value / 1.0, 0, 'f', 0)); | 
					
						
							| 
									
										
										
										
											2017-03-05 06:22:05 +01:00
										 |  |  |         ui->squelchText->setToolTip(tr("Squelch power threshold (dB)")); | 
					
						
							| 
									
										
										
										
											2018-10-11 16:09:40 +02:00
										 |  |  |         ui->squelch->setToolTip(tr("Squelch power threshold (dB)")); | 
					
						
							| 
									
										
										
										
											2017-03-05 06:22:05 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-10-08 10:26:36 +02:00
										 |  |  |     m_settings.m_squelch = value * 1.0; | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	applySettings(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-31 08:47:46 +02:00
										 |  |  | void NFMDemodGUI::on_ctcssOn_toggled(bool checked) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-08 10:26:36 +02:00
										 |  |  | 	m_settings.m_ctcssOn = checked; | 
					
						
							| 
									
										
										
										
											2015-08-31 08:47:46 +02:00
										 |  |  | 	applySettings(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-17 18:14:15 +02:00
										 |  |  | void NFMDemodGUI::on_dcsOn_toggled(bool checked) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     m_settings.m_dcsOn = checked; | 
					
						
							|  |  |  |     applySettings(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NFMDemodGUI::on_dcsCode_currentIndexChanged(int index) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (index == 0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         m_settings.m_dcsCode = 0; | 
					
						
							|  |  |  |         applySettings(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         QString dcsText = ui->dcsCode->currentText(); | 
					
						
							|  |  |  |         bool positive = (dcsText[3] == 'P'); | 
					
						
							|  |  |  |         dcsText.chop(1); | 
					
						
							|  |  |  |         bool ok; | 
					
						
							|  |  |  |         int dcsCode = dcsText.toInt(&ok, 8); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (ok) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             m_settings.m_dcsCode = dcsCode; | 
					
						
							|  |  |  |             m_settings.m_dcsPositive = positive; | 
					
						
							|  |  |  |             applySettings(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-17 22:06:59 +02:00
										 |  |  | void NFMDemodGUI::on_highPassFilter_toggled(bool checked) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     m_settings.m_highPass = checked; | 
					
						
							|  |  |  |     applySettings(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-06 04:49:22 +01:00
										 |  |  | void NFMDemodGUI::on_audioMute_toggled(bool checked) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-08 10:26:36 +02:00
										 |  |  | 	m_settings.m_audioMute = checked; | 
					
						
							| 
									
										
										
										
											2015-12-06 04:49:22 +01:00
										 |  |  | 	applySettings(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-17 01:42:58 +02:00
										 |  |  | void NFMDemodGUI::on_ctcss_currentIndexChanged(int index) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-08 10:26:36 +02:00
										 |  |  | 	m_settings.m_ctcssIndex = index; | 
					
						
							| 
									
										
										
										
											2017-10-08 10:52:37 +02:00
										 |  |  | 	applySettings(); | 
					
						
							| 
									
										
										
										
											2015-06-17 01:42:58 +02:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-13 00:45:03 +01:00
										 |  |  | void NFMDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-11-13 00:45:03 +01:00
										 |  |  |     (void) widget; | 
					
						
							|  |  |  |     (void) rollDown; | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	/*
 | 
					
						
							|  |  |  | 	if((widget == ui->spectrumContainer) && (m_nfmDemod != NULL)) | 
					
						
							|  |  |  | 		m_nfmDemod->setSpectrum(m_threadedSampleSink->getMessageQueue(), rollDown); | 
					
						
							|  |  |  | 	*/ | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-26 22:16:05 +02:00
										 |  |  | void NFMDemodGUI::onMenuDialogCalled(const QPoint &p) | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2019-05-09 21:07:05 +02:00
										 |  |  |     if (m_contextMenuType == ContextMenuChannelSettings) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         BasicChannelSettingsDialog dialog(&m_channelMarker, this); | 
					
						
							|  |  |  |         dialog.setUseReverseAPI(m_settings.m_useReverseAPI); | 
					
						
							|  |  |  |         dialog.setReverseAPIAddress(m_settings.m_reverseAPIAddress); | 
					
						
							|  |  |  |         dialog.setReverseAPIPort(m_settings.m_reverseAPIPort); | 
					
						
							|  |  |  |         dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); | 
					
						
							|  |  |  |         dialog.setReverseAPIChannelIndex(m_settings.m_reverseAPIChannelIndex); | 
					
						
							|  |  |  |         dialog.move(p); | 
					
						
							|  |  |  |         dialog.exec(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); | 
					
						
							|  |  |  |         m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); | 
					
						
							|  |  |  |         m_settings.m_title = m_channelMarker.getTitle(); | 
					
						
							|  |  |  |         m_settings.m_useReverseAPI = dialog.useReverseAPI(); | 
					
						
							|  |  |  |         m_settings.m_reverseAPIAddress = dialog.getReverseAPIAddress(); | 
					
						
							|  |  |  |         m_settings.m_reverseAPIPort = dialog.getReverseAPIPort(); | 
					
						
							|  |  |  |         m_settings.m_reverseAPIDeviceIndex = dialog.getReverseAPIDeviceIndex(); | 
					
						
							|  |  |  |         m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         setWindowTitle(m_settings.m_title); | 
					
						
							|  |  |  |         setTitleColor(m_settings.m_rgbColor); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         applySettings(); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2019-09-23 01:25:17 +02:00
										 |  |  |     else if ((m_contextMenuType == ContextMenuStreamSettings) && (m_deviceUISet->m_deviceMIMOEngine)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         DeviceStreamSelectionDialog dialog(this); | 
					
						
							|  |  |  |         dialog.setNumberOfStreams(m_nfmDemod->getNumberOfDeviceStreams()); | 
					
						
							|  |  |  |         dialog.setStreamIndex(m_settings.m_streamIndex); | 
					
						
							|  |  |  |         dialog.move(p); | 
					
						
							|  |  |  |         dialog.exec(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         m_settings.m_streamIndex = dialog.getSelectedStreamIndex(); | 
					
						
							|  |  |  |         m_channelMarker.clearStreamIndexes(); | 
					
						
							|  |  |  |         m_channelMarker.addStreamIndex(m_settings.m_streamIndex); | 
					
						
							|  |  |  |         displayStreamIndex(); | 
					
						
							|  |  |  |         applySettings(); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-11-14 01:45:13 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-09 21:07:05 +02:00
										 |  |  |     resetContextMenuType(); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-09 01:03:05 +01:00
										 |  |  | NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel, QWidget* parent) : | 
					
						
							| 
									
										
										
										
											2020-10-04 06:16:15 +02:00
										 |  |  | 	ChannelGUI(parent), | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	ui(new Ui::NFMDemodGUI), | 
					
						
							|  |  |  | 	m_pluginAPI(pluginAPI), | 
					
						
							| 
									
										
										
										
											2017-10-31 08:24:05 +01:00
										 |  |  | 	m_deviceUISet(deviceUISet), | 
					
						
							| 
									
										
										
										
											2015-08-25 00:36:53 +02:00
										 |  |  | 	m_channelMarker(this), | 
					
						
							| 
									
										
										
										
											2015-08-19 01:02:52 +02:00
										 |  |  | 	m_basicSettingsShown(false), | 
					
						
							| 
									
										
										
										
											2015-10-04 06:26:06 +02:00
										 |  |  | 	m_doApplySettings(true), | 
					
						
							| 
									
										
										
										
											2017-08-17 17:25:10 +02:00
										 |  |  | 	m_squelchOpen(false), | 
					
						
							| 
									
										
										
										
											2020-08-01 10:09:39 +02:00
										 |  |  |     m_audioSampleRate(-1), | 
					
						
							| 
									
										
										
										
											2021-04-17 18:14:15 +02:00
										 |  |  |     m_reportedDcsCode(0), | 
					
						
							| 
									
										
										
										
											2021-04-18 10:45:49 +02:00
										 |  |  |     m_dcsShowPositive(false), | 
					
						
							| 
									
										
										
										
											2017-08-17 17:25:10 +02:00
										 |  |  | 	m_tickCount(0) | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | { | 
					
						
							|  |  |  | 	ui->setupUi(this); | 
					
						
							|  |  |  | 	setAttribute(Qt::WA_DeleteOnClose, true); | 
					
						
							| 
									
										
										
										
											2016-04-01 00:18:49 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); | 
					
						
							| 
									
										
										
										
											2017-08-26 22:16:05 +02:00
										 |  |  |     connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-14 22:07:48 +02:00
										 |  |  | 	m_nfmDemod = reinterpret_cast<NFMDemod*>(rxChannel); | 
					
						
							| 
									
										
										
										
											2017-10-08 23:36:47 +02:00
										 |  |  | 	m_nfmDemod->setMessageQueueToGUI(getInputMessageQueue()); | 
					
						
							| 
									
										
										
										
											2015-06-17 01:42:58 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-12 21:59:04 +02:00
										 |  |  | 	connect(&MainCore::instance()->getMasterTimer(), SIGNAL(timeout()), this, SLOT(tick())); | 
					
						
							| 
									
										
										
										
											2015-10-04 06:26:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-27 13:18:00 +02:00
										 |  |  |     CRightClickEnabler *audioMuteRightClickEnabler = new CRightClickEnabler(ui->audioMute); | 
					
						
							| 
									
										
										
										
											2018-12-17 00:34:14 +01:00
										 |  |  |     connect(audioMuteRightClickEnabler, SIGNAL(rightClick(const QPoint &)), this, SLOT(audioSelect())); | 
					
						
							| 
									
										
										
										
											2018-03-27 13:18:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-08 10:52:37 +02:00
										 |  |  |     blockApplySettings(true); | 
					
						
							| 
									
										
										
										
											2015-06-17 01:42:58 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-08 02:04:17 +01:00
										 |  |  |     ui->channelSpacing->clear(); | 
					
						
							| 
									
										
										
										
											2015-06-17 01:42:58 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-08 02:04:17 +01:00
										 |  |  |     for (int i = 0; i < NFMDemodSettings::m_nbChannelSpacings; i++) { | 
					
						
							|  |  |  |         ui->channelSpacing->addItem(QString("%1").arg(NFMDemodSettings::getChannelSpacing(i) / 1000.0, 0, 'f', 2)); | 
					
						
							| 
									
										
										
										
											2017-10-08 10:52:37 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-08 02:04:17 +01:00
										 |  |  |     ui->channelSpacing->setCurrentIndex(NFMDemodSettings::getChannelSpacingIndex(12500)); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-08 10:52:37 +02:00
										 |  |  |     int ctcss_nbTones; | 
					
						
							|  |  |  |     const Real *ctcss_tones = m_nfmDemod->getCtcssToneSet(ctcss_nbTones); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ui->ctcss->addItem("--"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-17 18:14:15 +02:00
										 |  |  |     for (int i=0; i<ctcss_nbTones; i++) { | 
					
						
							| 
									
										
										
										
											2017-10-08 10:52:37 +02:00
										 |  |  |         ui->ctcss->addItem(QString("%1").arg(ctcss_tones[i])); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-17 18:14:15 +02:00
										 |  |  |     ui->dcsOn->setChecked(m_settings.m_dcsOn); | 
					
						
							|  |  |  |     QList<unsigned int> dcsCodes; | 
					
						
							|  |  |  |     DCSCodes::getCanonicalCodes(dcsCodes); | 
					
						
							|  |  |  |     ui->dcsCode->addItem("--"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for (auto dcsCode : dcsCodes) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         ui->dcsCode->addItem(QString("%1P").arg(dcsCode, 3, 8, QLatin1Char('0'))); | 
					
						
							|  |  |  |         ui->dcsCode->addItem(QString("%1N").arg(dcsCode, 3, 8, QLatin1Char('0'))); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-08 10:52:37 +02:00
										 |  |  |     blockApplySettings(false); | 
					
						
							| 
									
										
										
										
											2015-06-17 01:42:58 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-17 00:49:52 +01:00
										 |  |  | 	ui->audioMute->setStyleSheet("QToolButton { background:rgb(79,79,79); }"); // squelch closed
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-17 23:05:47 +02:00
										 |  |  | 	ui->deltaFrequencyLabel->setText(QString("%1f").arg(QChar(0x94, 0x03))); | 
					
						
							| 
									
										
										
										
											2017-05-16 17:48:12 +02:00
										 |  |  | 	ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold)); | 
					
						
							| 
									
										
										
										
											2017-05-17 23:05:47 +02:00
										 |  |  | 	ui->deltaFrequency->setValueRange(false, 7, -9999999, 9999999); | 
					
						
							| 
									
										
										
										
											2016-12-05 18:42:24 +01:00
										 |  |  |     ui->channelPowerMeter->setColorTheme(LevelMeterSignalDB::ColorGreenAndBlue); | 
					
						
							| 
									
										
										
										
											2015-07-19 18:43:48 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-14 01:45:13 +01:00
										 |  |  |     m_channelMarker.blockSignals(true); | 
					
						
							|  |  |  |     m_channelMarker.setColor(Qt::red); | 
					
						
							|  |  |  |     m_channelMarker.setBandwidth(5000); | 
					
						
							|  |  |  |     m_channelMarker.setCenterFrequency(0); | 
					
						
							| 
									
										
										
										
											2017-08-26 22:16:05 +02:00
										 |  |  |     m_channelMarker.setTitle("NFM Demodulator"); | 
					
						
							| 
									
										
										
										
											2017-11-14 01:45:13 +01:00
										 |  |  |     m_channelMarker.blockSignals(false); | 
					
						
							|  |  |  |     m_channelMarker.setVisible(true); // activate signal on the last setting only
 | 
					
						
							| 
									
										
										
										
											2015-08-24 02:06:11 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-14 01:45:13 +01:00
										 |  |  |     m_settings.setChannelMarker(&m_channelMarker); | 
					
						
							| 
									
										
										
										
											2015-08-24 02:06:11 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 08:24:05 +01:00
										 |  |  | 	m_deviceUISet->addChannelMarker(&m_channelMarker); | 
					
						
							|  |  |  | 	m_deviceUISet->addRollupWidget(this); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-14 01:45:13 +01:00
										 |  |  | 	connect(&m_channelMarker, SIGNAL(changedByCursor()), this, SLOT(channelMarkerChangedByCursor())); | 
					
						
							| 
									
										
										
										
											2017-11-14 22:58:35 +01:00
										 |  |  |     connect(&m_channelMarker, SIGNAL(highlightedByCursor()), this, SLOT(channelMarkerHighlightedByCursor())); | 
					
						
							| 
									
										
										
										
											2017-11-14 01:45:13 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 06:22:05 +01:00
										 |  |  | 	QChar delta = QChar(0x94, 0x03); | 
					
						
							|  |  |  | 	ui->deltaSquelch->setText(delta); | 
					
						
							| 
									
										
										
										
											2018-02-22 05:06:19 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-08 23:36:47 +02:00
										 |  |  | 	connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-12 01:21:30 +02:00
										 |  |  | 	displaySettings(); | 
					
						
							| 
									
										
										
										
											2017-06-06 01:53:52 +02:00
										 |  |  | 	applySettings(true); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | NFMDemodGUI::~NFMDemodGUI() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	delete ui; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-06 01:53:52 +02:00
										 |  |  | void NFMDemodGUI::applySettings(bool force) | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2015-08-19 01:02:52 +02:00
										 |  |  | 	if (m_doApplySettings) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		qDebug() << "NFMDemodGUI::applySettings"; | 
					
						
							| 
									
										
										
										
											2015-08-17 08:29:34 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-08 11:37:15 +02:00
										 |  |  |         NFMDemod::MsgConfigureNFMDemod* message = NFMDemod::MsgConfigureNFMDemod::create( m_settings, force); | 
					
						
							|  |  |  |         m_nfmDemod->getInputMessageQueue()->push(message); | 
					
						
							| 
									
										
										
										
											2015-08-19 01:02:52 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2015-05-11 11:03:01 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-12 01:21:30 +02:00
										 |  |  | void NFMDemodGUI::displaySettings() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     m_channelMarker.blockSignals(true); | 
					
						
							|  |  |  |     m_channelMarker.setCenterFrequency(m_settings.m_inputFrequencyOffset); | 
					
						
							|  |  |  |     m_channelMarker.setBandwidth(m_settings.m_rfBandwidth); | 
					
						
							| 
									
										
										
										
											2017-11-19 18:18:17 +01:00
										 |  |  |     m_channelMarker.setTitle(m_settings.m_title); | 
					
						
							| 
									
										
										
										
											2017-10-12 01:21:30 +02:00
										 |  |  |     m_channelMarker.blockSignals(false); | 
					
						
							| 
									
										
										
										
											2017-11-14 01:45:13 +01:00
										 |  |  |     m_channelMarker.setColor(m_settings.m_rgbColor); | 
					
						
							| 
									
										
										
										
											2017-10-12 01:21:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-14 01:45:13 +01:00
										 |  |  |     setTitleColor(m_settings.m_rgbColor); | 
					
						
							| 
									
										
										
										
											2017-10-12 01:21:30 +02:00
										 |  |  |     setWindowTitle(m_channelMarker.getTitle()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     blockApplySettings(true); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-14 01:45:13 +01:00
										 |  |  |     ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-08 02:04:17 +01:00
										 |  |  |     ui->rfBWText->setText(QString("%1k").arg(m_settings.m_rfBandwidth / 1000.0, 0, 'f', 1)); | 
					
						
							|  |  |  |     ui->rfBW->setValue(m_settings.m_rfBandwidth / 100.0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ui->afBWText->setText(QString("%1k").arg(m_settings.m_afBandwidth / 1000.0, 0, 'f', 1)); | 
					
						
							|  |  |  |     ui->afBW->setValue(m_settings.m_afBandwidth / 100.0); | 
					
						
							| 
									
										
										
										
											2017-10-12 01:21:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-12 18:32:24 +01:00
										 |  |  |     ui->fmDevText->setText(QString("%1%2k").arg(QChar(0xB1, 0x00)).arg(m_settings.m_fmDeviation / 2000.0, 0, 'f', 1)); | 
					
						
							| 
									
										
										
										
											2020-11-08 02:04:17 +01:00
										 |  |  |     ui->fmDev->setValue(m_settings.m_fmDeviation / 200.0); | 
					
						
							| 
									
										
										
										
											2017-10-12 01:21:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-12 18:32:24 +01:00
										 |  |  |     ui->channelSpacing->blockSignals(true); | 
					
						
							|  |  |  |     ui->channelSpacing->setCurrentIndex(NFMDemodSettings::getChannelSpacingIndex(m_settings.m_rfBandwidth)); | 
					
						
							|  |  |  |     ui->channelSpacing->blockSignals(false); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-05 23:21:04 +01:00
										 |  |  |     ui->volumeText->setText(QString("%1").arg(m_settings.m_volume*100.0, 0, 'f', 0)); | 
					
						
							|  |  |  |     ui->volume->setValue(m_settings.m_volume * 100.0); | 
					
						
							| 
									
										
										
										
											2017-10-12 01:21:30 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     ui->squelchGateText->setText(QString("%1").arg(m_settings.m_squelchGate * 10.0f, 0, 'f', 0)); | 
					
						
							|  |  |  |     ui->squelchGate->setValue(m_settings.m_squelchGate); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ui->deltaSquelch->setChecked(m_settings.m_deltaSquelch); | 
					
						
							| 
									
										
										
										
											2017-10-12 22:17:56 +02:00
										 |  |  |     ui->squelch->setValue(m_settings.m_squelch * 1.0); | 
					
						
							| 
									
										
										
										
											2017-10-12 01:21:30 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if (m_settings.m_deltaSquelch) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2018-10-11 08:52:50 +02:00
										 |  |  |         ui->squelchText->setText(QString("%1").arg((-m_settings.m_squelch) / 1.0, 0, 'f', 0)); | 
					
						
							| 
									
										
										
										
											2017-10-12 01:21:30 +02:00
										 |  |  |         ui->squelchText->setToolTip(tr("Squelch AF balance threshold (%)")); | 
					
						
							|  |  |  |         ui->squelch->setToolTip(tr("Squelch AF balance threshold (%)")); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2018-10-11 08:52:50 +02:00
										 |  |  |         ui->squelchText->setText(QString("%1").arg(m_settings.m_squelch / 1.0, 0, 'f', 0)); | 
					
						
							| 
									
										
										
										
											2017-10-12 01:21:30 +02:00
										 |  |  |         ui->squelchText->setToolTip(tr("Squelch power threshold (dB)")); | 
					
						
							| 
									
										
										
										
											2018-10-11 16:09:40 +02:00
										 |  |  |         ui->squelch->setToolTip(tr("Squelch power threshold (dB)")); | 
					
						
							| 
									
										
										
										
											2017-10-12 01:21:30 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ui->ctcssOn->setChecked(m_settings.m_ctcssOn); | 
					
						
							| 
									
										
										
										
											2019-05-17 22:06:59 +02:00
										 |  |  |     ui->highPassFilter->setChecked(m_settings.m_highPass); | 
					
						
							| 
									
										
										
										
											2017-10-12 01:21:30 +02:00
										 |  |  |     ui->audioMute->setChecked(m_settings.m_audioMute); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ui->ctcss->setCurrentIndex(m_settings.m_ctcssIndex); | 
					
						
							| 
									
										
										
										
											2021-04-18 10:45:49 +02:00
										 |  |  |     ui->dcsOn->setChecked(m_settings.m_dcsOn); | 
					
						
							| 
									
										
										
										
											2017-10-12 01:21:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-17 18:14:15 +02:00
										 |  |  |     if (m_settings.m_dcsCode == 0) { | 
					
						
							|  |  |  |         ui->dcsCode->setCurrentText(tr("--")); | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |         ui->dcsCode->setCurrentText(tr("%1%2") | 
					
						
							|  |  |  |             .arg(m_settings.m_dcsCode, 3, 8, QLatin1Char('0')) | 
					
						
							|  |  |  |             .arg(m_settings.m_dcsPositive ? "P" : "N") | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     setDcsCode(m_reportedDcsCode); | 
					
						
							| 
									
										
										
										
											2019-09-23 01:25:17 +02:00
										 |  |  |     displayStreamIndex(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-12 01:21:30 +02:00
										 |  |  |     blockApplySettings(false); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-23 01:25:17 +02:00
										 |  |  | void NFMDemodGUI::displayStreamIndex() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (m_deviceUISet->m_deviceMIMOEngine) { | 
					
						
							|  |  |  |         setStreamIndicator(tr("%1").arg(m_settings.m_streamIndex)); | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |         setStreamIndicator("S"); // single channel indicator
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-11 11:03:01 +02:00
										 |  |  | void NFMDemodGUI::leaveEvent(QEvent*) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-08-25 00:36:53 +02:00
										 |  |  | 	m_channelMarker.setHighlighted(false); | 
					
						
							| 
									
										
										
										
											2015-05-11 11:03:01 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NFMDemodGUI::enterEvent(QEvent*) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-08-25 00:36:53 +02:00
										 |  |  | 	m_channelMarker.setHighlighted(true); | 
					
						
							| 
									
										
										
										
											2015-05-11 11:03:01 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-17 01:42:58 +02:00
										 |  |  | void NFMDemodGUI::setCtcssFreq(Real ctcssFreq) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2021-04-17 18:14:15 +02:00
										 |  |  | 	if (ctcssFreq == 0) { | 
					
						
							| 
									
										
										
										
											2015-06-17 01:42:58 +02:00
										 |  |  | 		ui->ctcssText->setText("--"); | 
					
						
							| 
									
										
										
										
											2021-04-17 18:14:15 +02:00
										 |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											2015-06-17 01:42:58 +02:00
										 |  |  | 		ui->ctcssText->setText(QString("%1").arg(ctcssFreq)); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-17 18:14:15 +02:00
										 |  |  | void NFMDemodGUI::setDcsCode(unsigned int dcsCode) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (dcsCode == 0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 		ui->dcsText->setText("--"); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         unsigned int normalizedCode; | 
					
						
							| 
									
										
										
										
											2021-04-18 10:45:49 +02:00
										 |  |  |         bool showPositive = ui->dcsPositive->isChecked(); | 
					
						
							| 
									
										
										
										
											2021-04-17 18:14:15 +02:00
										 |  |  |         normalizedCode = DCSCodes::m_toCanonicalCode[dcsCode]; | 
					
						
							| 
									
										
										
										
											2021-04-18 10:45:49 +02:00
										 |  |  |         normalizedCode = showPositive ? normalizedCode : DCSCodes::m_signFlip[normalizedCode]; | 
					
						
							| 
									
										
										
										
											2021-04-17 18:14:15 +02:00
										 |  |  | 		ui->dcsText->setText(tr("%1").arg(normalizedCode, 3, 8, QLatin1Char('0'))); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 01:02:52 +02:00
										 |  |  | void NFMDemodGUI::blockApplySettings(bool block) | 
					
						
							| 
									
										
										
										
											2015-08-18 09:24:56 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2015-08-19 01:02:52 +02:00
										 |  |  | 	m_doApplySettings = !block; | 
					
						
							| 
									
										
										
										
											2015-08-18 09:24:56 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-27 13:18:00 +02:00
										 |  |  | void NFMDemodGUI::audioSelect() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     qDebug("NFMDemodGUI::audioSelect"); | 
					
						
							|  |  |  |     AudioSelectDialog audioSelect(DSPEngine::instance()->getAudioDeviceManager(), m_settings.m_audioDeviceName); | 
					
						
							|  |  |  |     audioSelect.exec(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (audioSelect.m_selected) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         m_settings.m_audioDeviceName = audioSelect.m_audioDeviceName; | 
					
						
							|  |  |  |         applySettings(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-04 06:26:06 +02:00
										 |  |  | void NFMDemodGUI::tick() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-05-16 23:39:49 +02:00
										 |  |  |     double magsqAvg, magsqPeak; | 
					
						
							| 
									
										
										
										
											2016-12-06 01:57:35 +01:00
										 |  |  |     int nbMagsqSamples; | 
					
						
							|  |  |  |     m_nfmDemod->getMagSqLevels(magsqAvg, magsqPeak, nbMagsqSamples); | 
					
						
							| 
									
										
										
										
											2017-05-16 23:39:49 +02:00
										 |  |  |     double powDbAvg = CalcDb::dbPower(magsqAvg); | 
					
						
							|  |  |  |     double powDbPeak = CalcDb::dbPower(magsqPeak); | 
					
						
							| 
									
										
										
										
											2016-12-06 01:57:35 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     ui->channelPowerMeter->levelChanged( | 
					
						
							|  |  |  |             (100.0f + powDbAvg) / 100.0f, | 
					
						
							|  |  |  |             (100.0f + powDbPeak) / 100.0f, | 
					
						
							|  |  |  |             nbMagsqSamples); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-17 17:25:10 +02:00
										 |  |  |     if (m_tickCount % 4 == 0) { | 
					
						
							|  |  |  |         ui->channelPower->setText(tr("%1 dB").arg(powDbAvg, 0, 'f', 1)); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2016-12-05 02:09:08 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-01 10:09:39 +02:00
										 |  |  |     int audioSampleRate = m_nfmDemod->getAudioSampleRate(); | 
					
						
							| 
									
										
										
										
											2016-12-05 02:09:08 +01:00
										 |  |  |     bool squelchOpen = m_nfmDemod->getSquelchOpen(); | 
					
						
							| 
									
										
										
										
											2016-03-27 05:37:15 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-01 10:09:39 +02:00
										 |  |  | 	if ((audioSampleRate != m_audioSampleRate) || (squelchOpen != m_squelchOpen)) | 
					
						
							| 
									
										
										
										
											2016-03-27 05:37:15 +02:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2020-08-01 10:09:39 +02:00
										 |  |  |         if (audioSampleRate < 0) { | 
					
						
							|  |  |  |             ui->audioMute->setStyleSheet("QToolButton { background-color : red; }"); | 
					
						
							|  |  |  |         } else if (squelchOpen) { | 
					
						
							| 
									
										
										
										
											2016-03-27 05:37:15 +02:00
										 |  |  | 			ui->audioMute->setStyleSheet("QToolButton { background-color : green; }"); | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			ui->audioMute->setStyleSheet("QToolButton { background:rgb(79,79,79); }"); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-01-17 00:49:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-01 10:09:39 +02:00
										 |  |  |         m_audioSampleRate = audioSampleRate; | 
					
						
							| 
									
										
										
										
											2017-01-17 00:49:52 +01:00
										 |  |  |         m_squelchOpen = squelchOpen; | 
					
						
							| 
									
										
										
										
											2016-03-27 05:37:15 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-08-17 17:25:10 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	m_tickCount++; | 
					
						
							| 
									
										
										
										
											2015-10-04 06:26:06 +02:00
										 |  |  | } |