mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 04:50:29 -04:00 
			
		
		
		
	Don't call start() in Demod's constructors. #2102
SSDDemodGUI: Disable AGC widgets when AGC disabled.
This commit is contained in:
		
							parent
							
								
									60db324abc
								
							
						
					
					
						commit
						c0fc8c3b73
					
				| @ -78,7 +78,6 @@ AMDemod::AMDemod(DeviceAPI *deviceAPI) : | |||||||
|         this, |         this, | ||||||
|         &AMDemod::handleIndexInDeviceSetChanged |         &AMDemod::handleIndexInDeviceSetChanged | ||||||
|     ); |     ); | ||||||
|     start(); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| AMDemod::~AMDemod() | AMDemod::~AMDemod() | ||||||
|  | |||||||
| @ -78,8 +78,6 @@ NFMDemod::NFMDemod(DeviceAPI *devieAPI) : | |||||||
|         this, |         this, | ||||||
|         &NFMDemod::handleIndexInDeviceSetChanged |         &NFMDemod::handleIndexInDeviceSetChanged | ||||||
|     ); |     ); | ||||||
| 
 |  | ||||||
|     start(); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| NFMDemod::~NFMDemod() | NFMDemod::~NFMDemod() | ||||||
| @ -593,11 +591,11 @@ void NFMDemod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response | |||||||
|     getMagSqLevels(magsqAvg, magsqPeak, nbMagsqSamples); |     getMagSqLevels(magsqAvg, magsqPeak, nbMagsqSamples); | ||||||
| 
 | 
 | ||||||
|     response.getNfmDemodReport()->setChannelPowerDb(CalcDb::dbPower(magsqAvg)); |     response.getNfmDemodReport()->setChannelPowerDb(CalcDb::dbPower(magsqAvg)); | ||||||
|     int nbCtcssToneFrequencies; |  | ||||||
| 
 | 
 | ||||||
|     if (m_running) |     if (m_running) | ||||||
|     { |     { | ||||||
|         const Real *ctcssToneFrequencies = m_basebandSink->getCtcssToneSet(nbCtcssToneFrequencies); |         int nbCtcssToneFrequencies = CTCSSDetector::getNTones(); | ||||||
|  |         const Real *ctcssToneFrequencies = CTCSSDetector::getToneSet(); | ||||||
|         response.getNfmDemodReport()->setCtcssTone( |         response.getNfmDemodReport()->setCtcssTone( | ||||||
|             m_settings.m_ctcssOn ? |             m_settings.m_ctcssOn ? | ||||||
|                 m_settings.m_ctcssIndex < 0 ? |                 m_settings.m_ctcssIndex < 0 ? | ||||||
|  | |||||||
| @ -124,7 +124,6 @@ public: | |||||||
|             const QStringList& channelSettingsKeys, |             const QStringList& channelSettingsKeys, | ||||||
|             SWGSDRangel::SWGChannelSettings& response); |             SWGSDRangel::SWGChannelSettings& response); | ||||||
| 
 | 
 | ||||||
| 	const Real *getCtcssToneSet(int& nbTones) const { return m_running ? m_basebandSink->getCtcssToneSet(nbTones) : nullptr; } |  | ||||||
| 	bool getSquelchOpen() const { return m_running && m_basebandSink->getSquelchOpen(); } | 	bool getSquelchOpen() const { return m_running && m_basebandSink->getSquelchOpen(); } | ||||||
| 
 | 
 | ||||||
|     void getMagSqLevels(double& avg, double& peak, int& nbSamples) |     void getMagSqLevels(double& avg, double& peak, int& nbSamples) | ||||||
|  | |||||||
| @ -66,7 +66,6 @@ public: | |||||||
|     int getChannelSampleRate() const; |     int getChannelSampleRate() const; | ||||||
|     void getMagSqLevels(double& avg, double& peak, int& nbSamples) { m_sink.getMagSqLevels(avg, peak, nbSamples); } |     void getMagSqLevels(double& avg, double& peak, int& nbSamples) { m_sink.getMagSqLevels(avg, peak, nbSamples); } | ||||||
|     bool getSquelchOpen() const { return m_sink.getSquelchOpen(); } |     bool getSquelchOpen() const { return m_sink.getSquelchOpen(); } | ||||||
|     const Real *getCtcssToneSet(int& nbTones) const { return m_sink.getCtcssToneSet(nbTones); } |  | ||||||
|     void setMessageQueueToGUI(MessageQueue *messageQueue) { m_sink.setMessageQueueToGUI(messageQueue); } |     void setMessageQueueToGUI(MessageQueue *messageQueue) { m_sink.setMessageQueueToGUI(messageQueue); } | ||||||
|     int getAudioSampleRate() const { return m_sink.getAudioSampleRate(); } |     int getAudioSampleRate() const { return m_sink.getAudioSampleRate(); } | ||||||
|     void setBasebandSampleRate(int sampleRate); |     void setBasebandSampleRate(int sampleRate); | ||||||
|  | |||||||
| @ -407,14 +407,17 @@ NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban | |||||||
| 
 | 
 | ||||||
|     ui->channelSpacing->setCurrentIndex(NFMDemodSettings::getChannelSpacingIndex(12500)); |     ui->channelSpacing->setCurrentIndex(NFMDemodSettings::getChannelSpacingIndex(12500)); | ||||||
| 
 | 
 | ||||||
|     int ctcss_nbTones; |     int ctcss_nbTones = CTCSSDetector::getNTones(); | ||||||
|     const Real *ctcss_tones = m_nfmDemod->getCtcssToneSet(ctcss_nbTones); |     const Real *ctcss_tones = CTCSSDetector::getToneSet(); | ||||||
| 
 | 
 | ||||||
|     ui->ctcss->addItem("--"); |     ui->ctcss->addItem("--"); | ||||||
| 
 | 
 | ||||||
|  |     if (ctcss_tones) | ||||||
|  |     { | ||||||
|         for (int i=0; i<ctcss_nbTones; i++) { |         for (int i=0; i<ctcss_nbTones; i++) { | ||||||
|             ui->ctcss->addItem(QString("%1").arg(ctcss_tones[i])); |             ui->ctcss->addItem(QString("%1").arg(ctcss_tones[i])); | ||||||
|         } |         } | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     ui->dcsOn->setChecked(m_settings.m_dcsOn); |     ui->dcsOn->setChecked(m_settings.m_dcsOn); | ||||||
|     QList<unsigned int> dcsCodes; |     QList<unsigned int> dcsCodes; | ||||||
|  | |||||||
| @ -45,11 +45,6 @@ public: | |||||||
| 
 | 
 | ||||||
|     virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end); |     virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end); | ||||||
| 
 | 
 | ||||||
|     const Real *getCtcssToneSet(int& nbTones) const { |  | ||||||
|         nbTones = m_ctcssDetector.getNTones(); |  | ||||||
|         return m_ctcssDetector.getToneSet(); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     bool getSquelchOpen() const { return m_squelchOpen; } |     bool getSquelchOpen() const { return m_squelchOpen; } | ||||||
| 
 | 
 | ||||||
|     void getMagSqLevels(double& avg, double& peak, int& nbSamples) |     void getMagSqLevels(double& avg, double& peak, int& nbSamples) | ||||||
|  | |||||||
| @ -54,6 +54,8 @@ const char* const SSBDemod::m_channelId = "SSBDemod"; | |||||||
| SSBDemod::SSBDemod(DeviceAPI *deviceAPI) : | SSBDemod::SSBDemod(DeviceAPI *deviceAPI) : | ||||||
|         ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSink), |         ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSink), | ||||||
|         m_deviceAPI(deviceAPI), |         m_deviceAPI(deviceAPI), | ||||||
|  |         m_thread(nullptr), | ||||||
|  |         m_basebandSink(nullptr), | ||||||
|         m_running(false), |         m_running(false), | ||||||
|         m_spectrumVis(SDR_RX_SCALEF), |         m_spectrumVis(SDR_RX_SCALEF), | ||||||
|         m_basebandSampleRate(0) |         m_basebandSampleRate(0) | ||||||
| @ -78,8 +80,6 @@ SSBDemod::SSBDemod(DeviceAPI *deviceAPI) : | |||||||
|         this, |         this, | ||||||
|         &SSBDemod::handleIndexInDeviceSetChanged |         &SSBDemod::handleIndexInDeviceSetChanged | ||||||
|     ); |     ); | ||||||
| 
 |  | ||||||
|     start(); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| SSBDemod::~SSBDemod() | SSBDemod::~SSBDemod() | ||||||
|  | |||||||
| @ -202,6 +202,7 @@ void SSBDemodGUI::on_agc_toggled(bool checked) | |||||||
| { | { | ||||||
|     m_settings.m_agc = checked; |     m_settings.m_agc = checked; | ||||||
|     applySettings(); |     applySettings(); | ||||||
|  |     displayAGC(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void SSBDemodGUI::on_agcClamping_toggled(bool checked) | void SSBDemodGUI::on_agcClamping_toggled(bool checked) | ||||||
| @ -440,6 +441,8 @@ SSBDemodGUI::SSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban | |||||||
| 	displaySettings(); | 	displaySettings(); | ||||||
|     makeUIConnections(); |     makeUIConnections(); | ||||||
| 
 | 
 | ||||||
|  |     qDebug() << "********************" << m_settings.m_filterBank.size() << m_settings.m_filterIndex; | ||||||
|  |     qDebug() << "*********** " << m_settings.m_filterBank[m_settings.m_filterIndex].m_spanLog2; | ||||||
| 	applyBandwidths(m_settings.m_filterBank[m_settings.m_filterIndex].m_spanLog2, true); // does applySettings(true)
 | 	applyBandwidths(m_settings.m_filterBank[m_settings.m_filterIndex].m_spanLog2, true); // does applySettings(true)
 | ||||||
|     DialPopup::addPopupsToChildDials(this); |     DialPopup::addPopupsToChildDials(this); | ||||||
|     m_resizer.enableChildMouseTracking(); |     m_resizer.enableChildMouseTracking(); | ||||||
| @ -466,10 +469,21 @@ void SSBDemodGUI::applySettings(bool force) | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | uint32_t SSBDemodGUI::getValidAudioSampleRate() const | ||||||
|  | { | ||||||
|  |     // When not running, m_ssbDemod->getAudioSampleRate() will return 0, but we
 | ||||||
|  |     // want a valid value to initialise the GUI
 | ||||||
|  |     int sr = m_ssbDemod->getAudioSampleRate(); | ||||||
|  |     if (sr == 0) { | ||||||
|  |         sr = 48000; | ||||||
|  |     } | ||||||
|  |     return sr; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| unsigned int SSBDemodGUI::spanLog2Max() | unsigned int SSBDemodGUI::spanLog2Max() | ||||||
| { | { | ||||||
|     unsigned int spanLog2 = 0; |     unsigned int spanLog2 = 0; | ||||||
|     for (; m_ssbDemod->getAudioSampleRate() / (1<<spanLog2) >= 1000; spanLog2++); |     for (; getValidAudioSampleRate() / (1<<spanLog2) >= 1000; spanLog2++); | ||||||
|     return spanLog2 == 0 ? 0 : spanLog2-1; |     return spanLog2 == 0 ? 0 : spanLog2-1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -481,10 +495,10 @@ void SSBDemodGUI::applyBandwidths(unsigned int spanLog2, bool force) | |||||||
|     ui->spanLog2->setMaximum(limit); |     ui->spanLog2->setMaximum(limit); | ||||||
|     bool dsb = ui->dsb->isChecked(); |     bool dsb = ui->dsb->isChecked(); | ||||||
|     //int spanLog2 = ui->spanLog2->value();
 |     //int spanLog2 = ui->spanLog2->value();
 | ||||||
|     m_spectrumRate = m_ssbDemod->getAudioSampleRate() / (1<<spanLog2); |     m_spectrumRate = getValidAudioSampleRate() / (1<<spanLog2); | ||||||
|     int bw = ui->BW->value(); |     int bw = ui->BW->value(); | ||||||
|     int lw = ui->lowCut->value(); |     int lw = ui->lowCut->value(); | ||||||
|     int bwMax = m_ssbDemod->getAudioSampleRate() / (100*(1<<spanLog2)); |     int bwMax = getValidAudioSampleRate() / (100*(1<<spanLog2)); | ||||||
|     int tickInterval = m_spectrumRate / 1200; |     int tickInterval = m_spectrumRate / 1200; | ||||||
|     tickInterval = tickInterval == 0 ? 1 : tickInterval; |     tickInterval = tickInterval == 0 ? 1 : tickInterval; | ||||||
| 
 | 
 | ||||||
| @ -636,6 +650,7 @@ void SSBDemodGUI::displaySettings() | |||||||
|     ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); |     ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); | ||||||
| 
 | 
 | ||||||
|     ui->agc->setChecked(m_settings.m_agc); |     ui->agc->setChecked(m_settings.m_agc); | ||||||
|  |     displayAGC(); | ||||||
|     ui->agcClamping->setChecked(m_settings.m_agcClamping); |     ui->agcClamping->setChecked(m_settings.m_agcClamping); | ||||||
|     ui->dnr->setChecked(m_settings.m_dnr); |     ui->dnr->setChecked(m_settings.m_dnr); | ||||||
|     ui->audioBinaural->setChecked(m_settings.m_audioBinaural); |     ui->audioBinaural->setChecked(m_settings.m_audioBinaural); | ||||||
| @ -694,6 +709,18 @@ void SSBDemodGUI::displaySettings() | |||||||
|     blockApplySettings(false); |     blockApplySettings(false); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void SSBDemodGUI::displayAGC() | ||||||
|  | { | ||||||
|  |     // Disable controls only valid when AGC is enabled
 | ||||||
|  |     ui->agcClamping->setEnabled(m_settings.m_agc); | ||||||
|  |     ui->agcTimeLog2->setEnabled(m_settings.m_agc); | ||||||
|  |     ui->agcTimeText->setEnabled(m_settings.m_agc); | ||||||
|  |     ui->agcPowerThreshold->setEnabled(m_settings.m_agc); | ||||||
|  |     ui->agcPowerThresholdText->setEnabled(m_settings.m_agc); | ||||||
|  |     ui->agcThresholdGate->setEnabled(m_settings.m_agc); | ||||||
|  |     ui->agcThresholdGateText->setEnabled(m_settings.m_agc); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void SSBDemodGUI::displayAGCPowerThreshold(int value) | void SSBDemodGUI::displayAGCPowerThreshold(int value) | ||||||
| { | { | ||||||
|     if (value == SSBDemodSettings::m_minPowerThresholdDB) |     if (value == SSBDemodSettings::m_minPowerThresholdDB) | ||||||
|  | |||||||
| @ -102,11 +102,13 @@ private: | |||||||
| 	void applyBandwidths(unsigned int spanLog2, bool force = false); | 	void applyBandwidths(unsigned int spanLog2, bool force = false); | ||||||
|     unsigned int spanLog2Max(); |     unsigned int spanLog2Max(); | ||||||
| 	void displaySettings(); | 	void displaySettings(); | ||||||
|  | 	void displayAGC(); | ||||||
| 	void displayAGCPowerThreshold(int value); | 	void displayAGCPowerThreshold(int value); | ||||||
|     void displayAGCThresholdGate(int value); |     void displayAGCThresholdGate(int value); | ||||||
| 	bool handleMessage(const Message& message); | 	bool handleMessage(const Message& message); | ||||||
|     void makeUIConnections(); |     void makeUIConnections(); | ||||||
|     void updateAbsoluteCenterFrequency(); |     void updateAbsoluteCenterFrequency(); | ||||||
|  | 	uint32_t getValidAudioSampleRate() const; | ||||||
| 
 | 
 | ||||||
| 	void leaveEvent(QEvent*); | 	void leaveEvent(QEvent*); | ||||||
| 	void enterEvent(EnterEventType*); | 	void enterEvent(EnterEventType*); | ||||||
|  | |||||||
| @ -881,6 +881,13 @@ | |||||||
|         </property> |         </property> | ||||||
|        </widget> |        </widget> | ||||||
|       </item> |       </item> | ||||||
|  |       <item> | ||||||
|  |        <widget class="Line" name="line_7"> | ||||||
|  |         <property name="orientation"> | ||||||
|  |          <enum>Qt::Vertical</enum> | ||||||
|  |         </property> | ||||||
|  |        </widget> | ||||||
|  |       </item> | ||||||
|       <item> |       <item> | ||||||
|        <widget class="QDial" name="agcTimeLog2"> |        <widget class="QDial" name="agcTimeLog2"> | ||||||
|         <property name="maximumSize"> |         <property name="maximumSize"> | ||||||
| @ -925,6 +932,13 @@ | |||||||
|         </property> |         </property> | ||||||
|        </widget> |        </widget> | ||||||
|       </item> |       </item> | ||||||
|  |       <item> | ||||||
|  |        <widget class="Line" name="line_5"> | ||||||
|  |         <property name="orientation"> | ||||||
|  |          <enum>Qt::Vertical</enum> | ||||||
|  |         </property> | ||||||
|  |        </widget> | ||||||
|  |       </item> | ||||||
|       <item> |       <item> | ||||||
|        <widget class="QDial" name="agcPowerThreshold"> |        <widget class="QDial" name="agcPowerThreshold"> | ||||||
|         <property name="maximumSize"> |         <property name="maximumSize"> | ||||||
| @ -969,6 +983,13 @@ | |||||||
|         </property> |         </property> | ||||||
|        </widget> |        </widget> | ||||||
|       </item> |       </item> | ||||||
|  |       <item> | ||||||
|  |        <widget class="Line" name="line_6"> | ||||||
|  |         <property name="orientation"> | ||||||
|  |          <enum>Qt::Vertical</enum> | ||||||
|  |         </property> | ||||||
|  |        </widget> | ||||||
|  |       </item> | ||||||
|       <item> |       <item> | ||||||
|        <widget class="QDial" name="agcThresholdGate"> |        <widget class="QDial" name="agcThresholdGate"> | ||||||
|         <property name="maximumSize"> |         <property name="maximumSize"> | ||||||
| @ -1126,12 +1147,24 @@ | |||||||
|    <extends>QToolButton</extends> |    <extends>QToolButton</extends> | ||||||
|    <header>gui/buttonswitch.h</header> |    <header>gui/buttonswitch.h</header> | ||||||
|   </customwidget> |   </customwidget> | ||||||
|  |   <customwidget> | ||||||
|  |    <class>ValueDialZ</class> | ||||||
|  |    <extends>QWidget</extends> | ||||||
|  |    <header>gui/valuedialz.h</header> | ||||||
|  |    <container>1</container> | ||||||
|  |   </customwidget> | ||||||
|   <customwidget> |   <customwidget> | ||||||
|    <class>RollupContents</class> |    <class>RollupContents</class> | ||||||
|    <extends>QWidget</extends> |    <extends>QWidget</extends> | ||||||
|    <header>gui/rollupcontents.h</header> |    <header>gui/rollupcontents.h</header> | ||||||
|    <container>1</container> |    <container>1</container> | ||||||
|   </customwidget> |   </customwidget> | ||||||
|  |   <customwidget> | ||||||
|  |    <class>LevelMeterSignalDB</class> | ||||||
|  |    <extends>QWidget</extends> | ||||||
|  |    <header>gui/levelmeter.h</header> | ||||||
|  |    <container>1</container> | ||||||
|  |   </customwidget> | ||||||
|   <customwidget> |   <customwidget> | ||||||
|    <class>GLSpectrum</class> |    <class>GLSpectrum</class> | ||||||
|    <extends>QWidget</extends> |    <extends>QWidget</extends> | ||||||
| @ -1144,18 +1177,6 @@ | |||||||
|    <header>gui/glspectrumgui.h</header> |    <header>gui/glspectrumgui.h</header> | ||||||
|    <container>1</container> |    <container>1</container> | ||||||
|   </customwidget> |   </customwidget> | ||||||
|   <customwidget> |  | ||||||
|    <class>ValueDialZ</class> |  | ||||||
|    <extends>QWidget</extends> |  | ||||||
|    <header>gui/valuedialz.h</header> |  | ||||||
|    <container>1</container> |  | ||||||
|   </customwidget> |  | ||||||
|   <customwidget> |  | ||||||
|    <class>LevelMeterSignalDB</class> |  | ||||||
|    <extends>QWidget</extends> |  | ||||||
|    <header>gui/levelmeter.h</header> |  | ||||||
|    <container>1</container> |  | ||||||
|   </customwidget> |  | ||||||
|   <customwidget> |   <customwidget> | ||||||
|    <class>TickedSlider</class> |    <class>TickedSlider</class> | ||||||
|    <extends>QSlider</extends> |    <extends>QSlider</extends> | ||||||
|  | |||||||
| @ -78,8 +78,6 @@ VORDemod::VORDemod(DeviceAPI *deviceAPI) : | |||||||
|         this, |         this, | ||||||
|         &VORDemod::handleIndexInDeviceSetChanged |         &VORDemod::handleIndexInDeviceSetChanged | ||||||
|     ); |     ); | ||||||
| 
 |  | ||||||
|     start(); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| VORDemod::~VORDemod() | VORDemod::~VORDemod() | ||||||
|  | |||||||
| @ -79,7 +79,6 @@ WFMDemod::WFMDemod(DeviceAPI* deviceAPI) : | |||||||
|         this, |         this, | ||||||
|         &WFMDemod::handleIndexInDeviceSetChanged |         &WFMDemod::handleIndexInDeviceSetChanged | ||||||
|     ); |     ); | ||||||
|     start(); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| WFMDemod::~WFMDemod() | WFMDemod::~WFMDemod() | ||||||
|  | |||||||
| @ -46,12 +46,12 @@ public: | |||||||
|     bool analyze(Real *sample); // input signal sample
 |     bool analyze(Real *sample); // input signal sample
 | ||||||
| 
 | 
 | ||||||
|     // get the number of defined tones.
 |     // get the number of defined tones.
 | ||||||
|     int getNTones() const { |     static int getNTones() { | ||||||
|     	return CTCSSFrequencies::m_nbFreqs; |     	return CTCSSFrequencies::m_nbFreqs; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // get the tone set
 |     // get the tone set
 | ||||||
|     const Real *getToneSet() const { |     static const Real *getToneSet() { | ||||||
|     	return CTCSSFrequencies::m_Freqs; |     	return CTCSSFrequencies::m_Freqs; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user