mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 04:50:29 -04:00 
			
		
		
		
	
						commit
						03bc7e3d08
					
				
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 49 KiB | 
										
											Binary file not shown.
										
									
								
							| @ -307,7 +307,7 @@ const QString& AudioCATSISO::getDeviceDescription() const | ||||
| 
 | ||||
| int AudioCATSISO::getSourceSampleRate(int) const | ||||
| { | ||||
|     return m_rxSampleRate / (1<<m_settings.m_log2Decim); | ||||
|     return m_settings.m_rxSampleRate / (1<<m_settings.m_log2Decim); | ||||
| } | ||||
| 
 | ||||
| quint64 AudioCATSISO::getSourceCenterFrequency(int) const | ||||
| @ -332,7 +332,7 @@ void AudioCATSISO::setSourceCenterFrequency(qint64 centerFrequency, int) | ||||
| 
 | ||||
| int AudioCATSISO::getSinkSampleRate(int) const | ||||
| { | ||||
|     return m_txSampleRate; | ||||
|     return m_settings.m_txSampleRate; | ||||
| } | ||||
| 
 | ||||
| quint64 AudioCATSISO::getSinkCenterFrequency(int) const | ||||
| @ -460,10 +460,18 @@ void AudioCATSISO::applySettings(const AudioCATSISOSettings& settings, const QLi | ||||
|         << " force:" << force | ||||
|         << settings.getDebugString(settingsKeys, force); | ||||
| 
 | ||||
|     if (settingsKeys.contains("rxDeviceName") || force) | ||||
|     if (settingsKeys.contains("rxDeviceName") || settingsKeys.contains("rxSampleRate") || force) | ||||
|     { | ||||
|         AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager(); | ||||
|         m_rxAudioDeviceIndex = audioDeviceManager->getInputDeviceIndex(settings.m_rxDeviceName); | ||||
|         AudioDeviceManager::InputDeviceInfo deviceInfo; | ||||
| 
 | ||||
|         if (audioDeviceManager->getInputDeviceInfo(settings.m_rxDeviceName, deviceInfo)) | ||||
|         { | ||||
|             deviceInfo.sampleRate = settings.m_rxSampleRate; | ||||
|             audioDeviceManager->setInputDeviceInfo(m_rxAudioDeviceIndex, deviceInfo); | ||||
|         } | ||||
| 
 | ||||
|         m_rxSampleRate = audioDeviceManager->getInputSampleRate(m_rxAudioDeviceIndex); | ||||
|         forwardRxChange = true; | ||||
| 
 | ||||
| @ -476,10 +484,18 @@ void AudioCATSISO::applySettings(const AudioCATSISOSettings& settings, const QLi | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     if (settingsKeys.contains("txDeviceName") || force) | ||||
|     if (settingsKeys.contains("txDeviceName") || settingsKeys.contains("txSampleRate") || force) | ||||
|     { | ||||
|         AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager(); | ||||
|         m_txAudioDeviceIndex = audioDeviceManager->getOutputDeviceIndex(settings.m_txDeviceName); | ||||
|         AudioDeviceManager::InputDeviceInfo deviceInfo; | ||||
| 
 | ||||
|         if (audioDeviceManager->getInputDeviceInfo(settings.m_txDeviceName, deviceInfo)) | ||||
|         { | ||||
|             deviceInfo.sampleRate = settings.m_txSampleRate; | ||||
|             audioDeviceManager->setInputDeviceInfo(m_txAudioDeviceIndex, deviceInfo); | ||||
|         } | ||||
| 
 | ||||
|         m_txSampleRate = audioDeviceManager->getOutputSampleRate(m_txAudioDeviceIndex); | ||||
|         forwardTxChange = true; | ||||
| 
 | ||||
| @ -595,12 +611,13 @@ void AudioCATSISO::applySettings(const AudioCATSISOSettings& settings, const QLi | ||||
|         bool realElseComplex = (m_settings.m_rxIQMapping == AudioCATSISOSettings::L) | ||||
|             || (m_settings.m_rxIQMapping == AudioCATSISOSettings::R); | ||||
|         DSPMIMOSignalNotification *notif = new DSPMIMOSignalNotification( | ||||
|             m_rxSampleRate / (1<<m_settings.m_log2Decim), | ||||
|             settings.m_rxCenterFrequency, | ||||
|             m_settings.m_rxSampleRate / (1<<m_settings.m_log2Decim), | ||||
|             m_settings.m_rxCenterFrequency, | ||||
|             true, | ||||
|             0, | ||||
|             realElseComplex | ||||
|         ); | ||||
|         m_rxSampleRate = notif->getSampleRate(); | ||||
|         m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif); | ||||
|     } | ||||
| 
 | ||||
| @ -613,12 +630,13 @@ void AudioCATSISO::applySettings(const AudioCATSISOSettings& settings, const QLi | ||||
|         bool realElseComplex = (m_settings.m_txIQMapping == AudioCATSISOSettings::L) | ||||
|             || (m_settings.m_txIQMapping == AudioCATSISOSettings::R); | ||||
|         DSPMIMOSignalNotification *notif = new DSPMIMOSignalNotification( | ||||
|             m_txSampleRate, | ||||
|             settings.m_txCenterFrequency, | ||||
|             m_settings.m_txSampleRate, | ||||
|             m_settings.m_txCenterFrequency, | ||||
|             false, | ||||
|             0, | ||||
|             realElseComplex | ||||
|         ); | ||||
|         m_txSampleRate = notif->getSampleRate(); | ||||
|         m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif); | ||||
|     } | ||||
| } | ||||
| @ -713,9 +731,15 @@ void AudioCATSISO::webapiUpdateDeviceSettings( | ||||
|     if (deviceSettingsKeys.contains("rxCenterFrequency")) { | ||||
|         settings.m_rxCenterFrequency = response.getAudioCatsisoSettings()->getRxCenterFrequency(); | ||||
|     } | ||||
|     if (deviceSettingsKeys.contains("rxSampleRate")) { | ||||
|         settings.m_rxSampleRate = response.getAudioCatsisoSettings()->getRxSampleRate(); | ||||
|     } | ||||
|     if (deviceSettingsKeys.contains("txCenterFrequency")) { | ||||
|         settings.m_txCenterFrequency = response.getAudioCatsisoSettings()->getTxCenterFrequency(); | ||||
|     } | ||||
|     if (deviceSettingsKeys.contains("txSampleRate")) { | ||||
|         settings.m_txSampleRate = response.getAudioCatsisoSettings()->getTxSampleRate(); | ||||
|     } | ||||
|     if (deviceSettingsKeys.contains("transverterMode")) { | ||||
|         settings.m_transverterMode = response.getAudioCatsisoSettings()->getTransverterMode() != 0; | ||||
|     } | ||||
| @ -805,7 +829,9 @@ void AudioCATSISO::webapiUpdateDeviceSettings( | ||||
| void AudioCATSISO::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const AudioCATSISOSettings& settings) | ||||
| { | ||||
|     response.getAudioCatsisoSettings()->setRxCenterFrequency(settings.m_rxCenterFrequency); | ||||
|     response.getAudioCatsisoSettings()->setRxSampleRate(settings.m_rxSampleRate); | ||||
|     response.getAudioCatsisoSettings()->setTxCenterFrequency(settings.m_txCenterFrequency); | ||||
|     response.getAudioCatsisoSettings()->setTxSampleRate(settings.m_txSampleRate); | ||||
|     response.getAudioCatsisoSettings()->setIqCorrection(settings.m_iqCorrection ? 1 : 0); | ||||
|     response.getAudioCatsisoSettings()->setTransverterDeltaFrequency(settings.m_transverterDeltaFrequency); | ||||
|     response.getAudioCatsisoSettings()->setTransverterMode(settings.m_transverterMode ? 1 : 0); | ||||
| @ -859,9 +885,15 @@ void AudioCATSISO::webapiReverseSendSettings(const QList<QString>& deviceSetting | ||||
|     if (deviceSettingsKeys.contains("rxCenterFrequency")) { | ||||
|         swgAudioCATSISOSettings->setRxCenterFrequency(settings.m_rxCenterFrequency); | ||||
|     } | ||||
|     if (deviceSettingsKeys.contains("rxSampleRate") || force) { | ||||
|         swgAudioCATSISOSettings->setRxSampleRate(settings.m_rxSampleRate); | ||||
|     } | ||||
|     if (deviceSettingsKeys.contains("txCenterFrequency")) { | ||||
|         swgAudioCATSISOSettings->setTxCenterFrequency(settings.m_txCenterFrequency); | ||||
|     } | ||||
|     if (deviceSettingsKeys.contains("txSampleRate") || force) { | ||||
|         swgAudioCATSISOSettings->setTxSampleRate(settings.m_txSampleRate); | ||||
|     } | ||||
|     if (deviceSettingsKeys.contains("transverterMode")) { | ||||
|         swgAudioCATSISOSettings->setTransverterMode(settings.m_transverterMode ? 1 : 0); | ||||
|     } | ||||
|  | ||||
| @ -151,6 +151,76 @@ bool AudioCATSISOGUI::deserialize(const QByteArray& data) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void AudioCATSISOGUI::refreshRxSampleRates(QString deviceName) | ||||
| { | ||||
|     ui->rxSampleRate->blockSignals(true); | ||||
|     ui->rxSampleRate->clear(); | ||||
|     const auto deviceInfos = AudioDeviceInfo::availableInputDevices(); | ||||
| 
 | ||||
|     for (const AudioDeviceInfo &deviceInfo : deviceInfos) | ||||
|     { | ||||
|         if (deviceName == AudioCATSISOSettings::getFullDeviceName(deviceInfo)) | ||||
|         { | ||||
|             QList<int> sampleRates = deviceInfo.supportedSampleRates(); | ||||
| 
 | ||||
|             for (int i = 0; i < sampleRates.size(); ++i) | ||||
|             { | ||||
|                 qDebug("AudioCATSISOGUI::refreshRxSampleRates: device %s: sample rate %d", qPrintable(deviceName), sampleRates[i]); | ||||
|                 ui->rxSampleRate->addItem(QString("%1").arg(sampleRates[i])); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     ui->rxSampleRate->blockSignals(false); | ||||
| 
 | ||||
|     int index = ui->rxSampleRate->findText(QString("%1").arg(m_settings.m_rxSampleRate)); | ||||
| 
 | ||||
|     if (index >= 0) { | ||||
|         ui->rxSampleRate->setCurrentIndex(index); | ||||
|     } else { | ||||
|         ui->rxSampleRate->setCurrentIndex(0); | ||||
|     } | ||||
| 
 | ||||
|     if (ui->rxSampleRate->currentText().toInt() != m_settings.m_rxSampleRate) { | ||||
|         on_rxSampleRate_currentIndexChanged(ui->rxSampleRate->currentIndex()); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void AudioCATSISOGUI::refreshTxSampleRates(QString deviceName) | ||||
| { | ||||
|     ui->txSampleRate->blockSignals(true); | ||||
|     ui->txSampleRate->clear(); | ||||
|     const auto deviceInfos = AudioDeviceInfo::availableOutputDevices(); | ||||
| 
 | ||||
|     for (const AudioDeviceInfo &deviceInfo : deviceInfos) | ||||
|     { | ||||
|         if (deviceName == AudioCATSISOSettings::getFullDeviceName(deviceInfo)) | ||||
|         { | ||||
|             QList<int> sampleRates = deviceInfo.supportedSampleRates(); | ||||
| 
 | ||||
|             for (int i = 0; i < sampleRates.size(); ++i) | ||||
|             { | ||||
|                 qDebug("AudioCATSISOGUI::refreshTxSampleRates: device %s: sample rate %d", qPrintable(deviceName), sampleRates[i]); | ||||
|                 ui->txSampleRate->addItem(QString("%1").arg(sampleRates[i])); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     ui->txSampleRate->blockSignals(false); | ||||
| 
 | ||||
|     int index = ui->txSampleRate->findText(QString("%1").arg(m_settings.m_txSampleRate)); | ||||
| 
 | ||||
|     if (index >= 0) { | ||||
|         ui->txSampleRate->setCurrentIndex(index); | ||||
|     } else { | ||||
|         ui->txSampleRate->setCurrentIndex(0); | ||||
|     } | ||||
| 
 | ||||
|     if (ui->txSampleRate->currentText().toInt() != m_settings.m_txSampleRate) { | ||||
|         on_txSampleRate_currentIndexChanged(ui->txSampleRate->currentIndex()); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void AudioCATSISOGUI::on_startStop_toggled(bool checked) | ||||
| { | ||||
|     ui->txEnable->setEnabled(!checked); | ||||
| @ -335,12 +405,22 @@ void AudioCATSISOGUI::on_rxDeviceSelect_clicked() | ||||
|     if (audioSelect.m_selected) | ||||
|     { | ||||
|         m_settings.m_rxDeviceName = audioSelect.m_audioDeviceName; | ||||
|         refreshRxSampleRates(m_settings.m_rxDeviceName); | ||||
|         m_settingsKeys.append("rxDeviceName"); | ||||
|         ui->rxDeviceLabel->setText(m_settings.m_rxDeviceName); | ||||
|         sendSettings(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void AudioCATSISOGUI::on_rxSampleRate_currentIndexChanged(int index) | ||||
| { | ||||
|     (void) index; | ||||
|     m_settings.m_rxSampleRate = ui->rxSampleRate->currentText().toInt(); | ||||
|     displayFcRxTooltip(); | ||||
|     m_settingsKeys.append("rxSampleRate"); | ||||
|     sendSettings(); | ||||
| } | ||||
| 
 | ||||
| void AudioCATSISOGUI::on_txDeviceSelect_clicked() | ||||
| { | ||||
|     AudioSelectDialog audioSelect(DSPEngine::instance()->getAudioDeviceManager(), m_settings.m_txDeviceName, false, this); | ||||
| @ -350,12 +430,21 @@ void AudioCATSISOGUI::on_txDeviceSelect_clicked() | ||||
|     if (audioSelect.m_selected) | ||||
|     { | ||||
|         m_settings.m_txDeviceName = audioSelect.m_audioDeviceName; | ||||
|         refreshTxSampleRates(m_settings.m_txDeviceName); | ||||
|         m_settingsKeys.append("txDeviceName"); | ||||
|         ui->txDeviceLabel->setText(m_settings.m_txDeviceName); | ||||
|         sendSettings(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void AudioCATSISOGUI::on_txSampleRate_currentIndexChanged(int index) | ||||
| { | ||||
|     (void) index; | ||||
|     m_settings.m_txSampleRate = ui->txSampleRate->currentText().toInt(); | ||||
|     m_settingsKeys.append("txSampleRate"); | ||||
|     sendSettings(); | ||||
| } | ||||
| 
 | ||||
| void AudioCATSISOGUI::on_rxChannels_currentIndexChanged(int index) | ||||
| { | ||||
|     m_settings.m_rxIQMapping = (AudioCATSISOSettings::IQMapping)index; | ||||
| @ -450,6 +539,8 @@ void AudioCATSISOGUI::displaySettings() | ||||
|     displayFcRxTooltip(); | ||||
|     displayCatDevice(); | ||||
|     displayCatType(); | ||||
|     refreshRxSampleRates(m_settings.m_rxDeviceName); | ||||
|     refreshTxSampleRates(m_settings.m_txDeviceName); | ||||
| } | ||||
| 
 | ||||
| void AudioCATSISOGUI::displayFcRxTooltip() | ||||
| @ -457,7 +548,7 @@ void AudioCATSISOGUI::displayFcRxTooltip() | ||||
|     int32_t fShift = DeviceSampleSource::calculateFrequencyShift( | ||||
|         m_settings.m_log2Decim, | ||||
|         (DeviceSampleSource::fcPos_t) m_settings.m_fcPosRx, | ||||
|         m_rxSampleRate, | ||||
|         m_settings.m_rxSampleRate, | ||||
|         DeviceSampleSource::FrequencyShiftScheme::FSHIFT_STD | ||||
|     ); | ||||
|     ui->fcPosRx->setToolTip(tr("Relative position of device center frequency: %1 kHz").arg(QString::number(fShift / 1000.0f, 'g', 5))); | ||||
| @ -576,7 +667,7 @@ bool AudioCATSISOGUI::handleMessage(const Message& message) | ||||
| 
 | ||||
|         if (sourceOrSink) | ||||
|         { | ||||
|             m_rxSampleRate = notif.getSampleRate() * (1<<m_settings.m_log2Decim); | ||||
|             m_rxSampleRate = notif.getSampleRate(); | ||||
|             m_settings.m_rxCenterFrequency = frequency; | ||||
|         } | ||||
|         else | ||||
| @ -727,7 +818,7 @@ void AudioCATSISOGUI::updateSpectrum(bool rxElseTx) | ||||
|     { | ||||
|         realElseComplex = (m_settings.m_rxIQMapping == AudioCATSISOSettings::L) | ||||
|             || (m_settings.m_rxIQMapping == AudioCATSISOSettings::R); | ||||
|         sampleRate = m_rxSampleRate/(1<<m_settings.m_log2Decim); | ||||
|         sampleRate = m_rxSampleRate; | ||||
|         centerFrequency = m_settings.m_rxCenterFrequency; | ||||
|     } | ||||
|     else | ||||
| @ -789,7 +880,9 @@ void AudioCATSISOGUI::makeUIConnections() | ||||
|     QObject::connect(ui->pttSpectrumLink, &ButtonSwitch::toggled, this, &AudioCATSISOGUI::on_pttSpectrumLinkToggled); | ||||
|     QObject::connect(ui->transverter, &TransverterButton::clicked, this, &AudioCATSISOGUI::on_transverter_clicked); | ||||
|     QObject::connect(ui->rxDeviceSelect, &QPushButton::clicked, this, &AudioCATSISOGUI::on_rxDeviceSelect_clicked); | ||||
|     QObject::connect(ui->rxSampleRate, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &AudioCATSISOGUI::on_rxSampleRate_currentIndexChanged); | ||||
|     QObject::connect(ui->txDeviceSelect, &QPushButton::clicked, this, &AudioCATSISOGUI::on_txDeviceSelect_clicked); | ||||
|     QObject::connect(ui->txSampleRate, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &AudioCATSISOGUI::on_txSampleRate_currentIndexChanged); | ||||
|     QObject::connect(ui->rxChannels, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &AudioCATSISOGUI::on_rxChannels_currentIndexChanged); | ||||
|     QObject::connect(ui->rxVolume, &QDial::valueChanged, this, &AudioCATSISOGUI::on_rxVolume_valueChanged); | ||||
|     QObject::connect(ui->txChannels, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &AudioCATSISOGUI::on_txChannels_currentIndexChanged); | ||||
|  | ||||
| @ -69,6 +69,8 @@ private: | ||||
|     AudioCATSISOSettings::MsgCATReportStatus::Status m_lastCATStatus; | ||||
| 
 | ||||
| 	void blockApplySettings(bool block) { m_doApplySettings = !block; } | ||||
|     void refreshRxSampleRates(QString deviceName); | ||||
|     void refreshTxSampleRates(QString deviceName); | ||||
| 	void displaySettings(); | ||||
|     void displayFrequency(); | ||||
|     void displaySampleRate(); | ||||
| @ -101,7 +103,9 @@ private slots: | ||||
|     void on_txEnable_toggled(bool checked); | ||||
|     void on_transverter_clicked(); | ||||
|     void on_rxDeviceSelect_clicked(); | ||||
|     void on_rxSampleRate_currentIndexChanged(int index); | ||||
|     void on_txDeviceSelect_clicked(); | ||||
|     void on_txSampleRate_currentIndexChanged(int index); | ||||
|     void on_rxChannels_currentIndexChanged(int index); | ||||
|     void on_rxVolume_valueChanged(int value); | ||||
|     void on_txChannels_currentIndexChanged(int index); | ||||
|  | ||||
| @ -32,6 +32,7 @@ | ||||
|    <font> | ||||
|     <family>Liberation Sans</family> | ||||
|     <pointsize>9</pointsize> | ||||
|     <weight>50</weight> | ||||
|     <italic>false</italic> | ||||
|     <bold>false</bold> | ||||
|    </font> | ||||
| @ -333,6 +334,7 @@ | ||||
|         <font> | ||||
|          <family>Liberation Mono</family> | ||||
|          <pointsize>16</pointsize> | ||||
|          <weight>50</weight> | ||||
|          <italic>false</italic> | ||||
|          <bold>false</bold> | ||||
|         </font> | ||||
| @ -422,6 +424,45 @@ | ||||
|        </property> | ||||
|       </widget> | ||||
|      </item> | ||||
|      <item> | ||||
|       <spacer name="horizontalSpacer_6"> | ||||
|        <property name="orientation"> | ||||
|         <enum>Qt::Horizontal</enum> | ||||
|        </property> | ||||
|        <property name="sizeHint" stdset="0"> | ||||
|         <size> | ||||
|          <width>0</width> | ||||
|          <height>0</height> | ||||
|         </size> | ||||
|        </property> | ||||
|       </spacer> | ||||
|      </item> | ||||
|      <item> | ||||
|       <widget class="QLabel" name="rxSampleRateLabel"> | ||||
|        <property name="text"> | ||||
|         <string>SR</string> | ||||
|        </property> | ||||
|       </widget> | ||||
|      </item> | ||||
|      <item> | ||||
|       <widget class="QComboBox" name="rxSampleRate"> | ||||
|        <property name="minimumSize"> | ||||
|         <size> | ||||
|          <width>70</width> | ||||
|          <height>0</height> | ||||
|         </size> | ||||
|        </property> | ||||
|        <property name="maximumSize"> | ||||
|         <size> | ||||
|          <width>70</width> | ||||
|          <height>16777215</height> | ||||
|         </size> | ||||
|        </property> | ||||
|        <property name="toolTip"> | ||||
|         <string>Audio sample rate in Hz</string> | ||||
|        </property> | ||||
|       </widget> | ||||
|      </item> | ||||
|     </layout> | ||||
|    </item> | ||||
|    <item> | ||||
| @ -703,6 +744,45 @@ | ||||
|        </property> | ||||
|       </widget> | ||||
|      </item> | ||||
|      <item> | ||||
|       <spacer name="horizontalSpacer_8"> | ||||
|        <property name="orientation"> | ||||
|         <enum>Qt::Horizontal</enum> | ||||
|        </property> | ||||
|        <property name="sizeHint" stdset="0"> | ||||
|         <size> | ||||
|          <width>0</width> | ||||
|          <height>0</height> | ||||
|         </size> | ||||
|        </property> | ||||
|       </spacer> | ||||
|      </item> | ||||
|      <item> | ||||
|       <widget class="QLabel" name="txSampleRateLabel"> | ||||
|        <property name="text"> | ||||
|         <string>SR</string> | ||||
|        </property> | ||||
|       </widget> | ||||
|      </item> | ||||
|      <item> | ||||
|       <widget class="QComboBox" name="txSampleRate"> | ||||
|        <property name="minimumSize"> | ||||
|         <size> | ||||
|          <width>70</width> | ||||
|          <height>0</height> | ||||
|         </size> | ||||
|        </property> | ||||
|        <property name="maximumSize"> | ||||
|         <size> | ||||
|          <width>70</width> | ||||
|          <height>16777215</height> | ||||
|         </size> | ||||
|        </property> | ||||
|        <property name="toolTip"> | ||||
|         <string>Audio sample rate in Hz</string> | ||||
|        </property> | ||||
|       </widget> | ||||
|      </item> | ||||
|     </layout> | ||||
|    </item> | ||||
|    <item> | ||||
|  | ||||
| @ -89,12 +89,12 @@ PluginInterface::SamplingDevices AudioCATSISOPlugin::enumSampleMIMO(const Origin | ||||
|                     m_deviceTypeID, | ||||
|                     it->serial, | ||||
|                     it->sequence, | ||||
|                     PluginInterface::SamplingDevice::PhysicalDevice, | ||||
|                     PluginInterface::SamplingDevice::BuiltInDevice, | ||||
|                     PluginInterface::SamplingDevice::StreamMIMO, | ||||
|                     1,    // MIMO is always considered as a single device
 | ||||
|                     0) | ||||
|             ); | ||||
|             qDebug("MetisMISOPlugin::enumSampleMIMO: enumerated Metis device #%d", it->sequence); | ||||
|             qDebug("AudioCATSISOPlugin::enumSampleMIMO: enumerated AudioCATSISO device #%d", it->sequence); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -73,6 +73,8 @@ void AudioCATSISOSettings::resetToDefaults() | ||||
|     m_pttSpectrumLink = true; | ||||
|     m_rxCenterFrequency = 14200000; | ||||
|     m_txCenterFrequency = 14200000; | ||||
|     m_rxSampleRate = 48000; // Default sample rate
 | ||||
|     m_txSampleRate = 48000; // Default sample rate
 | ||||
|     m_transverterMode = false; | ||||
|     m_transverterDeltaFrequency = 0; | ||||
|     m_rxDeviceName = ""; | ||||
| @ -108,6 +110,8 @@ AudioCATSISOSettings::AudioCATSISOSettings(const AudioCATSISOSettings& other) | ||||
|     m_pttSpectrumLink = other.m_pttSpectrumLink; | ||||
|     m_rxCenterFrequency = other.m_rxCenterFrequency; | ||||
|     m_txCenterFrequency = other.m_txCenterFrequency; | ||||
|     m_rxSampleRate = other.m_rxSampleRate; | ||||
|     m_txSampleRate = other.m_txSampleRate; | ||||
|     m_transverterMode = other.m_transverterMode; | ||||
|     m_transverterDeltaFrequency = other.m_transverterDeltaFrequency; | ||||
|     m_rxDeviceName = other.m_rxDeviceName; | ||||
| @ -150,11 +154,13 @@ QByteArray AudioCATSISOSettings::serialize() const | ||||
|     s.writeS32(8, (int) m_fcPosRx); | ||||
|     s.writeBool(9, m_transverterMode); | ||||
|     s.writeS64(10, m_transverterDeltaFrequency); | ||||
|     s.writeS32(11, m_rxSampleRate); // Serialize RX sample rate
 | ||||
| 
 | ||||
|     s.writeString(21, m_txDeviceName); | ||||
|     s.writeU64(22, m_txCenterFrequency); | ||||
|     s.writeS32(23, m_txVolume); | ||||
|     s.writeS32(24, (int)m_txIQMapping); | ||||
|     s.writeS32(25, m_txSampleRate); // Serialize TX sample rate
 | ||||
| 
 | ||||
|     s.writeString(31, m_catDevicePath); | ||||
|     s.writeU32(32, m_hamlibModel); | ||||
| @ -203,11 +209,13 @@ bool AudioCATSISOSettings::deserialize(const QByteArray& data) | ||||
|         m_fcPosRx = (fcPos_t) intval; | ||||
|         d.readBool(9, &m_transverterMode, false); | ||||
|         d.readS64(10, &m_transverterDeltaFrequency, 0); | ||||
|         d.readS32(11, &m_rxSampleRate, 48000); // Deserialize RX sample rate
 | ||||
| 
 | ||||
|         d.readString(21, &m_txDeviceName, ""); | ||||
|         d.readU64(22, &m_txCenterFrequency, 14200000); | ||||
|         d.readS32(23, &m_txVolume, -10); | ||||
|         d.readS32(24,(int *)&m_txIQMapping, IQMapping::LR); | ||||
|         d.readS32(25, &m_txSampleRate, 48000); // Deserialize TX sample rate
 | ||||
| 
 | ||||
|         d.readString(31, &m_catDevicePath, ""); | ||||
|         d.readU32(32, &m_hamlibModel, 1); | ||||
| @ -257,6 +265,9 @@ void AudioCATSISOSettings::applySettings(const QStringList& settingsKeys, const | ||||
|     if (settingsKeys.contains("rxDeviceName")) { | ||||
|         m_rxDeviceName = settings.m_rxDeviceName; | ||||
|     } | ||||
|     if (settingsKeys.contains("rxSampleRate")) { | ||||
|         m_rxSampleRate = settings.m_rxSampleRate; | ||||
|     } | ||||
|     if (settingsKeys.contains("rxCenterFrequency")) { | ||||
|         m_rxCenterFrequency = settings.m_rxCenterFrequency; | ||||
|     } | ||||
| @ -282,6 +293,9 @@ void AudioCATSISOSettings::applySettings(const QStringList& settingsKeys, const | ||||
|     if (settingsKeys.contains("txDeviceName")) { | ||||
|         m_txDeviceName = settings.m_txDeviceName; | ||||
|     } | ||||
|     if (settingsKeys.contains("txSampleRate")) { | ||||
|         m_txSampleRate = settings.m_txSampleRate; | ||||
|     } | ||||
|     if (settingsKeys.contains("txCenterFrequency")) { | ||||
|         m_txCenterFrequency = settings.m_txCenterFrequency; | ||||
|     } | ||||
| @ -357,6 +371,9 @@ QString AudioCATSISOSettings::getDebugString(const QStringList& settingsKeys, bo | ||||
|     if (settingsKeys.contains("rxDeviceName") || force) { | ||||
|         ostr << " m_rxDeviceName: " << m_rxDeviceName.toStdString(); | ||||
|     } | ||||
|     if (settingsKeys.contains("rxSampleRate") || force) { | ||||
|         ostr << " m_rxSampleRate: " << m_rxSampleRate; | ||||
|     } | ||||
|     if (settingsKeys.contains("rxCenterFrequency") || force) { | ||||
|         ostr << " m_rxCenterFrequency: " << m_rxCenterFrequency; | ||||
|     } | ||||
| @ -382,6 +399,9 @@ QString AudioCATSISOSettings::getDebugString(const QStringList& settingsKeys, bo | ||||
|     if (settingsKeys.contains("txDeviceName") || force) { | ||||
|         ostr << " m_txDeviceName: " << m_txDeviceName.toStdString(); | ||||
|     } | ||||
|     if (settingsKeys.contains("txSampleRate") || force) { | ||||
|         ostr << " m_txSampleRate: " << m_txSampleRate; | ||||
|     } | ||||
|     if (settingsKeys.contains("txCenterFrequency") || force) { | ||||
|         ostr << " m_txCenterFrequency: " << m_txCenterFrequency; | ||||
|     } | ||||
|  | ||||
| @ -113,6 +113,7 @@ public: | ||||
|     bool    m_pttSpectrumLink; | ||||
| 
 | ||||
|     QString      m_rxDeviceName;       // Including realm, as from getFullDeviceName below
 | ||||
|     int          m_rxSampleRate;       //!< Sample rate in Hz
 | ||||
|     IQMapping    m_rxIQMapping; | ||||
|     unsigned int m_log2Decim; | ||||
|     fcPos_t      m_fcPosRx; | ||||
| @ -121,6 +122,7 @@ public: | ||||
|     float        m_rxVolume; | ||||
| 
 | ||||
|     QString      m_txDeviceName;       // Including realm, as from getFullDeviceName below
 | ||||
|     int          m_txSampleRate;       //!< Sample rate in Hz
 | ||||
|     IQMapping    m_txIQMapping; | ||||
|     int          m_txVolume; //!< dB
 | ||||
| 
 | ||||
|  | ||||
| @ -173,3 +173,11 @@ Use this toggle button to connect or disconnect the radio. | ||||
|  * **grey**: idle (not connected) | ||||
|  * **green**: connected | ||||
|  * **red**: error | ||||
| 
 | ||||
| <h3>26. Audio input (Rx) sample rate</h3> | ||||
| 
 | ||||
| Select sample rate among presumed supported audio device rates. Check the actual sample rate of your device before starting. | ||||
| 
 | ||||
| <h3>27. Audio output (Tx) sample rate</h3> | ||||
| 
 | ||||
| Select sample rate among presumed supported audio device rates. Check the actual sample rate of your device before starting. | ||||
|  | ||||
| @ -219,6 +219,10 @@ void AudioInputGui::refreshSampleRates(QString deviceName) | ||||
|     } else { | ||||
|         ui->sampleRate->setCurrentIndex(0); | ||||
|     } | ||||
| 
 | ||||
|     if (ui->sampleRate->currentText().toInt() != m_settings.m_sampleRate) { | ||||
|         on_sampleRate_currentIndexChanged(ui->sampleRate->currentIndex()); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void AudioInputGui::displaySettings() | ||||
|  | ||||
| @ -60,7 +60,21 @@ QList<int> AudioDeviceInfo::supportedSampleRates() const | ||||
| #else | ||||
| QList<int> AudioDeviceInfo::supportedSampleRates() const | ||||
| { | ||||
|     return m_deviceInfo.supportedSampleRates(); | ||||
|     QList<int> reportedSampleRates = m_deviceInfo.supportedSampleRates(); | ||||
|     reportedSampleRates.append({96000, 192000, 384000}); // Add some common rates that may not be in the list
 | ||||
|     QList<int> sampleRates; | ||||
| 
 | ||||
|     for (auto sampleRate : reportedSampleRates) // Retain the sample rates that are supported by the device
 | ||||
|     { | ||||
|         QAudioFormat format = m_deviceInfo.preferredFormat(); | ||||
|         format.setSampleRate(sampleRate); | ||||
| 
 | ||||
|         if (m_deviceInfo.isFormatSupported(format)) { | ||||
|             sampleRates.append(sampleRate); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     return sampleRates; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -2582,10 +2582,16 @@ margin-bottom: 20px; | ||||
|       "type" : "integer", | ||||
|       "format" : "int64" | ||||
|     }, | ||||
|     "rxSampleRate" : { | ||||
|       "type" : "integer" | ||||
|     }, | ||||
|     "txCenterFrequency" : { | ||||
|       "type" : "integer", | ||||
|       "format" : "int64" | ||||
|     }, | ||||
|     "txSampleRate" : { | ||||
|       "type" : "integer" | ||||
|     }, | ||||
|     "transverterMode" : { | ||||
|       "type" : "integer" | ||||
|     }, | ||||
| @ -59609,7 +59615,7 @@ except ApiException as e: | ||||
|           </div> | ||||
|           <div id="generator"> | ||||
|             <div class="content"> | ||||
|               Generated 2025-06-02T13:08:26.366+02:00 | ||||
|               Generated 2025-07-01T22:00:12.093+02:00 | ||||
|             </div> | ||||
|           </div> | ||||
|       </div> | ||||
|  | ||||
| @ -4,9 +4,13 @@ AudioCATSISOSettings: | ||||
|     rxCenterFrequency: | ||||
|       type: integer | ||||
|       format: int64 | ||||
|     rxSampleRate: | ||||
|       type: integer | ||||
|     txCenterFrequency: | ||||
|       type: integer | ||||
|       format: int64 | ||||
|     txSampleRate: | ||||
|       type: integer | ||||
|     transverterMode: | ||||
|       type: integer | ||||
|     transverterDeltaFrequency: | ||||
|  | ||||
| @ -4,9 +4,13 @@ AudioCATSISOSettings: | ||||
|     rxCenterFrequency: | ||||
|       type: integer | ||||
|       format: int64 | ||||
|     rxSampleRate: | ||||
|       type: integer | ||||
|     txCenterFrequency: | ||||
|       type: integer | ||||
|       format: int64 | ||||
|     txSampleRate: | ||||
|       type: integer | ||||
|     transverterMode: | ||||
|       type: integer | ||||
|     transverterDeltaFrequency: | ||||
|  | ||||
| @ -2582,10 +2582,16 @@ margin-bottom: 20px; | ||||
|       "type" : "integer", | ||||
|       "format" : "int64" | ||||
|     }, | ||||
|     "rxSampleRate" : { | ||||
|       "type" : "integer" | ||||
|     }, | ||||
|     "txCenterFrequency" : { | ||||
|       "type" : "integer", | ||||
|       "format" : "int64" | ||||
|     }, | ||||
|     "txSampleRate" : { | ||||
|       "type" : "integer" | ||||
|     }, | ||||
|     "transverterMode" : { | ||||
|       "type" : "integer" | ||||
|     }, | ||||
| @ -59609,7 +59615,7 @@ except ApiException as e: | ||||
|           </div> | ||||
|           <div id="generator"> | ||||
|             <div class="content"> | ||||
|               Generated 2025-06-02T13:08:26.366+02:00 | ||||
|               Generated 2025-07-01T22:00:12.093+02:00 | ||||
|             </div> | ||||
|           </div> | ||||
|       </div> | ||||
|  | ||||
| @ -30,8 +30,12 @@ SWGAudioCATSISOSettings::SWGAudioCATSISOSettings(QString* json) { | ||||
| SWGAudioCATSISOSettings::SWGAudioCATSISOSettings() { | ||||
|     rx_center_frequency = 0L; | ||||
|     m_rx_center_frequency_isSet = false; | ||||
|     rx_sample_rate = 0; | ||||
|     m_rx_sample_rate_isSet = false; | ||||
|     tx_center_frequency = 0L; | ||||
|     m_tx_center_frequency_isSet = false; | ||||
|     tx_sample_rate = 0; | ||||
|     m_tx_sample_rate_isSet = false; | ||||
|     transverter_mode = 0; | ||||
|     m_transverter_mode_isSet = false; | ||||
|     transverter_delta_frequency = 0L; | ||||
| @ -96,8 +100,12 @@ void | ||||
| SWGAudioCATSISOSettings::init() { | ||||
|     rx_center_frequency = 0L; | ||||
|     m_rx_center_frequency_isSet = false; | ||||
|     rx_sample_rate = 0; | ||||
|     m_rx_sample_rate_isSet = false; | ||||
|     tx_center_frequency = 0L; | ||||
|     m_tx_center_frequency_isSet = false; | ||||
|     tx_sample_rate = 0; | ||||
|     m_tx_sample_rate_isSet = false; | ||||
|     transverter_mode = 0; | ||||
|     m_transverter_mode_isSet = false; | ||||
|     transverter_delta_frequency = 0L; | ||||
| @ -163,6 +171,8 @@ SWGAudioCATSISOSettings::cleanup() { | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     if(rx_device_name != nullptr) {  | ||||
|         delete rx_device_name; | ||||
|     } | ||||
| @ -206,8 +216,12 @@ void | ||||
| SWGAudioCATSISOSettings::fromJsonObject(QJsonObject &pJson) { | ||||
|     ::SWGSDRangel::setValue(&rx_center_frequency, pJson["rxCenterFrequency"], "qint64", ""); | ||||
|      | ||||
|     ::SWGSDRangel::setValue(&rx_sample_rate, pJson["rxSampleRate"], "qint32", ""); | ||||
|      | ||||
|     ::SWGSDRangel::setValue(&tx_center_frequency, pJson["txCenterFrequency"], "qint64", ""); | ||||
|      | ||||
|     ::SWGSDRangel::setValue(&tx_sample_rate, pJson["txSampleRate"], "qint32", ""); | ||||
|      | ||||
|     ::SWGSDRangel::setValue(&transverter_mode, pJson["transverterMode"], "qint32", ""); | ||||
|      | ||||
|     ::SWGSDRangel::setValue(&transverter_delta_frequency, pJson["transverterDeltaFrequency"], "qint64", ""); | ||||
| @ -281,9 +295,15 @@ SWGAudioCATSISOSettings::asJsonObject() { | ||||
|     if(m_rx_center_frequency_isSet){ | ||||
|         obj->insert("rxCenterFrequency", QJsonValue(rx_center_frequency)); | ||||
|     } | ||||
|     if(m_rx_sample_rate_isSet){ | ||||
|         obj->insert("rxSampleRate", QJsonValue(rx_sample_rate)); | ||||
|     } | ||||
|     if(m_tx_center_frequency_isSet){ | ||||
|         obj->insert("txCenterFrequency", QJsonValue(tx_center_frequency)); | ||||
|     } | ||||
|     if(m_tx_sample_rate_isSet){ | ||||
|         obj->insert("txSampleRate", QJsonValue(tx_sample_rate)); | ||||
|     } | ||||
|     if(m_transverter_mode_isSet){ | ||||
|         obj->insert("transverterMode", QJsonValue(transverter_mode)); | ||||
|     } | ||||
| @ -379,6 +399,16 @@ SWGAudioCATSISOSettings::setRxCenterFrequency(qint64 rx_center_frequency) { | ||||
|     this->m_rx_center_frequency_isSet = true; | ||||
| } | ||||
| 
 | ||||
| qint32 | ||||
| SWGAudioCATSISOSettings::getRxSampleRate() { | ||||
|     return rx_sample_rate; | ||||
| } | ||||
| void | ||||
| SWGAudioCATSISOSettings::setRxSampleRate(qint32 rx_sample_rate) { | ||||
|     this->rx_sample_rate = rx_sample_rate; | ||||
|     this->m_rx_sample_rate_isSet = true; | ||||
| } | ||||
| 
 | ||||
| qint64 | ||||
| SWGAudioCATSISOSettings::getTxCenterFrequency() { | ||||
|     return tx_center_frequency; | ||||
| @ -389,6 +419,16 @@ SWGAudioCATSISOSettings::setTxCenterFrequency(qint64 tx_center_frequency) { | ||||
|     this->m_tx_center_frequency_isSet = true; | ||||
| } | ||||
| 
 | ||||
| qint32 | ||||
| SWGAudioCATSISOSettings::getTxSampleRate() { | ||||
|     return tx_sample_rate; | ||||
| } | ||||
| void | ||||
| SWGAudioCATSISOSettings::setTxSampleRate(qint32 tx_sample_rate) { | ||||
|     this->tx_sample_rate = tx_sample_rate; | ||||
|     this->m_tx_sample_rate_isSet = true; | ||||
| } | ||||
| 
 | ||||
| qint32 | ||||
| SWGAudioCATSISOSettings::getTransverterMode() { | ||||
|     return transverter_mode; | ||||
| @ -667,9 +707,15 @@ SWGAudioCATSISOSettings::isSet(){ | ||||
|         if(m_rx_center_frequency_isSet){ | ||||
|             isObjectUpdated = true; break; | ||||
|         } | ||||
|         if(m_rx_sample_rate_isSet){ | ||||
|             isObjectUpdated = true; break; | ||||
|         } | ||||
|         if(m_tx_center_frequency_isSet){ | ||||
|             isObjectUpdated = true; break; | ||||
|         } | ||||
|         if(m_tx_sample_rate_isSet){ | ||||
|             isObjectUpdated = true; break; | ||||
|         } | ||||
|         if(m_transverter_mode_isSet){ | ||||
|             isObjectUpdated = true; break; | ||||
|         } | ||||
|  | ||||
| @ -45,9 +45,15 @@ public: | ||||
|     qint64 getRxCenterFrequency(); | ||||
|     void setRxCenterFrequency(qint64 rx_center_frequency); | ||||
| 
 | ||||
|     qint32 getRxSampleRate(); | ||||
|     void setRxSampleRate(qint32 rx_sample_rate); | ||||
| 
 | ||||
|     qint64 getTxCenterFrequency(); | ||||
|     void setTxCenterFrequency(qint64 tx_center_frequency); | ||||
| 
 | ||||
|     qint32 getTxSampleRate(); | ||||
|     void setTxSampleRate(qint32 tx_sample_rate); | ||||
| 
 | ||||
|     qint32 getTransverterMode(); | ||||
|     void setTransverterMode(qint32 transverter_mode); | ||||
| 
 | ||||
| @ -136,9 +142,15 @@ private: | ||||
|     qint64 rx_center_frequency; | ||||
|     bool m_rx_center_frequency_isSet; | ||||
| 
 | ||||
|     qint32 rx_sample_rate; | ||||
|     bool m_rx_sample_rate_isSet; | ||||
| 
 | ||||
|     qint64 tx_center_frequency; | ||||
|     bool m_tx_center_frequency_isSet; | ||||
| 
 | ||||
|     qint32 tx_sample_rate; | ||||
|     bool m_tx_sample_rate_isSet; | ||||
| 
 | ||||
|     qint32 transverter_mode; | ||||
|     bool m_transverter_mode_isSet; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user