From 49f2527fcd70e745163dffc44f31d7049bd96600 Mon Sep 17 00:00:00 2001 From: f4exb Date: Wed, 2 Jul 2025 00:07:31 +0200 Subject: [PATCH] AudioCATSISO: fix audio sample rate handling and device enumeration --- doc/img/AudioCATSISO_plugin.png | Bin 41736 -> 50277 bytes doc/img/AudioCATSISO_plugin.xcf | Bin 171629 -> 190467 bytes .../samplemimo/audiocatsiso/audiocatsiso.cpp | 48 +++++++-- .../audiocatsiso/audiocatsisogui.cpp | 99 +++++++++++++++++- .../samplemimo/audiocatsiso/audiocatsisogui.h | 4 + .../audiocatsiso/audiocatsisogui.ui | 80 ++++++++++++++ .../audiocatsiso/audiocatsisoplugin.cpp | 4 +- .../audiocatsiso/audiocatsisosettings.cpp | 20 ++++ .../audiocatsiso/audiocatsisosettings.h | 2 + plugins/samplemimo/audiocatsiso/readme.md | 8 ++ sdrbase/resources/webapi/doc/html2/index.html | 8 +- .../doc/swagger/include/AudioCATSISO.yaml | 4 + .../api/swagger/include/AudioCATSISO.yaml | 4 + swagger/sdrangel/code/html2/index.html | 8 +- .../qt5/client/SWGAudioCATSISOSettings.cpp | 46 ++++++++ .../code/qt5/client/SWGAudioCATSISOSettings.h | 12 +++ 16 files changed, 332 insertions(+), 15 deletions(-) diff --git a/doc/img/AudioCATSISO_plugin.png b/doc/img/AudioCATSISO_plugin.png index 9ac5e2d9c0770f46b37a68a531b3d51d32fd1af8..a29689e6db0fdec0b3ce48044e37b767dbb3402d 100644 GIT binary patch literal 50277 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 RK!yKKDxFeHmN&oge*oZRKVty_8Bqa& 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 diff --git a/doc/img/AudioCATSISO_plugin.xcf b/doc/img/AudioCATSISO_plugin.xcf index cb29e50c0cbb5c34c5dc10f72b83387dae8f3190..28424c00f562636899a4affe32d66db912c70a74 100644 GIT binary patch delta 28396 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 X+yTFZ-@$|Md-x+fNmfk!Sh)P(AX+UY delta 13864 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 diff --git a/plugins/samplemimo/audiocatsiso/audiocatsiso.cpp b/plugins/samplemimo/audiocatsiso/audiocatsiso.cpp index 2bfe262ff..a4a7f2c58 100644 --- a/plugins/samplemimo/audiocatsiso/audiocatsiso.cpp +++ b/plugins/samplemimo/audiocatsiso/audiocatsiso.cpp @@ -307,7 +307,7 @@ const QString& AudioCATSISO::getDeviceDescription() const int AudioCATSISO::getSourceSampleRate(int) const { - return m_rxSampleRate / (1<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<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& 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); } diff --git a/plugins/samplemimo/audiocatsiso/audiocatsisogui.cpp b/plugins/samplemimo/audiocatsiso/audiocatsisogui.cpp index 8c3f98f4b..7daec8d5a 100644 --- a/plugins/samplemimo/audiocatsiso/audiocatsisogui.cpp +++ b/plugins/samplemimo/audiocatsiso/audiocatsisogui.cpp @@ -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 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 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<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::of(&QComboBox::currentIndexChanged), this, &AudioCATSISOGUI::on_rxSampleRate_currentIndexChanged); QObject::connect(ui->txDeviceSelect, &QPushButton::clicked, this, &AudioCATSISOGUI::on_txDeviceSelect_clicked); + QObject::connect(ui->txSampleRate, QOverload::of(&QComboBox::currentIndexChanged), this, &AudioCATSISOGUI::on_txSampleRate_currentIndexChanged); QObject::connect(ui->rxChannels, QOverload::of(&QComboBox::currentIndexChanged), this, &AudioCATSISOGUI::on_rxChannels_currentIndexChanged); QObject::connect(ui->rxVolume, &QDial::valueChanged, this, &AudioCATSISOGUI::on_rxVolume_valueChanged); QObject::connect(ui->txChannels, QOverload::of(&QComboBox::currentIndexChanged), this, &AudioCATSISOGUI::on_txChannels_currentIndexChanged); diff --git a/plugins/samplemimo/audiocatsiso/audiocatsisogui.h b/plugins/samplemimo/audiocatsiso/audiocatsisogui.h index a8a300140..5554b73be 100644 --- a/plugins/samplemimo/audiocatsiso/audiocatsisogui.h +++ b/plugins/samplemimo/audiocatsiso/audiocatsisogui.h @@ -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); diff --git a/plugins/samplemimo/audiocatsiso/audiocatsisogui.ui b/plugins/samplemimo/audiocatsiso/audiocatsisogui.ui index 1822c8e3a..ec9493edf 100644 --- a/plugins/samplemimo/audiocatsiso/audiocatsisogui.ui +++ b/plugins/samplemimo/audiocatsiso/audiocatsisogui.ui @@ -32,6 +32,7 @@ Liberation Sans 9 + 50 false false @@ -333,6 +334,7 @@ Liberation Mono 16 + 50 false false @@ -422,6 +424,45 @@ + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + SR + + + + + + + + 70 + 0 + + + + + 70 + 16777215 + + + + Audio sample rate in Hz + + + @@ -703,6 +744,45 @@ + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + SR + + + + + + + + 70 + 0 + + + + + 70 + 16777215 + + + + Audio sample rate in Hz + + + diff --git a/plugins/samplemimo/audiocatsiso/audiocatsisoplugin.cpp b/plugins/samplemimo/audiocatsiso/audiocatsisoplugin.cpp index 52461528c..53ef8369d 100644 --- a/plugins/samplemimo/audiocatsiso/audiocatsisoplugin.cpp +++ b/plugins/samplemimo/audiocatsiso/audiocatsisoplugin.cpp @@ -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); } } diff --git a/plugins/samplemimo/audiocatsiso/audiocatsisosettings.cpp b/plugins/samplemimo/audiocatsiso/audiocatsisosettings.cpp index 276f3f337..5498d7b25 100644 --- a/plugins/samplemimo/audiocatsiso/audiocatsisosettings.cpp +++ b/plugins/samplemimo/audiocatsiso/audiocatsisosettings.cpp @@ -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; } diff --git a/plugins/samplemimo/audiocatsiso/audiocatsisosettings.h b/plugins/samplemimo/audiocatsiso/audiocatsisosettings.h index d93b6d368..edc74891f 100644 --- a/plugins/samplemimo/audiocatsiso/audiocatsisosettings.h +++ b/plugins/samplemimo/audiocatsiso/audiocatsisosettings.h @@ -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 diff --git a/plugins/samplemimo/audiocatsiso/readme.md b/plugins/samplemimo/audiocatsiso/readme.md index ca155f535..937416caf 100644 --- a/plugins/samplemimo/audiocatsiso/readme.md +++ b/plugins/samplemimo/audiocatsiso/readme.md @@ -173,3 +173,11 @@ Use this toggle button to connect or disconnect the radio. * **grey**: idle (not connected) * **green**: connected * **red**: error + +

26. Audio input (Rx) sample rate

+ +Select sample rate among presumed supported audio device rates. Check the actual sample rate of your device before starting. + +

27. Audio output (Tx) sample rate

+ +Select sample rate among presumed supported audio device rates. Check the actual sample rate of your device before starting. diff --git a/sdrbase/resources/webapi/doc/html2/index.html b/sdrbase/resources/webapi/doc/html2/index.html index 5c6eb0a63..357da29b9 100644 --- a/sdrbase/resources/webapi/doc/html2/index.html +++ b/sdrbase/resources/webapi/doc/html2/index.html @@ -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:
- Generated 2025-06-02T13:08:26.366+02:00 + Generated 2025-07-01T22:00:12.093+02:00
diff --git a/sdrbase/resources/webapi/doc/swagger/include/AudioCATSISO.yaml b/sdrbase/resources/webapi/doc/swagger/include/AudioCATSISO.yaml index e4bf3db9d..df5d328bd 100644 --- a/sdrbase/resources/webapi/doc/swagger/include/AudioCATSISO.yaml +++ b/sdrbase/resources/webapi/doc/swagger/include/AudioCATSISO.yaml @@ -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: diff --git a/swagger/sdrangel/api/swagger/include/AudioCATSISO.yaml b/swagger/sdrangel/api/swagger/include/AudioCATSISO.yaml index e4bf3db9d..df5d328bd 100644 --- a/swagger/sdrangel/api/swagger/include/AudioCATSISO.yaml +++ b/swagger/sdrangel/api/swagger/include/AudioCATSISO.yaml @@ -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: diff --git a/swagger/sdrangel/code/html2/index.html b/swagger/sdrangel/code/html2/index.html index 5c6eb0a63..357da29b9 100644 --- a/swagger/sdrangel/code/html2/index.html +++ b/swagger/sdrangel/code/html2/index.html @@ -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:
- Generated 2025-06-02T13:08:26.366+02:00 + Generated 2025-07-01T22:00:12.093+02:00
diff --git a/swagger/sdrangel/code/qt5/client/SWGAudioCATSISOSettings.cpp b/swagger/sdrangel/code/qt5/client/SWGAudioCATSISOSettings.cpp index 24c1c6138..6098456c6 100644 --- a/swagger/sdrangel/code/qt5/client/SWGAudioCATSISOSettings.cpp +++ b/swagger/sdrangel/code/qt5/client/SWGAudioCATSISOSettings.cpp @@ -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; } diff --git a/swagger/sdrangel/code/qt5/client/SWGAudioCATSISOSettings.h b/swagger/sdrangel/code/qt5/client/SWGAudioCATSISOSettings.h index 8cf8ca60d..e2ade57bd 100644 --- a/swagger/sdrangel/code/qt5/client/SWGAudioCATSISOSettings.h +++ b/swagger/sdrangel/code/qt5/client/SWGAudioCATSISOSettings.h @@ -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;